Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
module EventStore
  module Messaging
    module Message
      def self.included(cls)
        cls.class_exec do
          include ::Messaging::Message

          extend Follow
          extend Initial
          extend Linked
          extend Proceed
        end
      end

      Info = ::Messaging::Message::Info

      def precedence?(other_message)
        follows? other_message
      end

      module Follow
        def follow(source, receiver=nil, **arguments)
          receiver ||= self.build

          message = super source, receiver, **arguments
          message
        end
      end

      module Linked
        def linked(metadata)
          message = self.new
          message.metadata = Metadata.new

          Log.get(self).warn(tag: :obsolete) { "The `linked' method is obsolete. Consider using the `follow' method." }

          message.metadata.causation_event_stream_name = metadata.source_event_stream_name
          message.metadata.causation_event_position = metadata.source_event_position
          message.metadata.correlation_stream_name = metadata.correlation_stream_name
          message.metadata.reply_stream_name = metadata.reply_stream_name

          message
        end
      end

      module Proceed
        def proceed(source, receiver=nil, **arguments)
          Log.get(self).warn(tag: :obsolete) { "The `proceed' method is obsolete. Consider using the `follow' method." }

          message = follow source, receiver, **arguments
          message.metadata.extend Metadata
          message
        end

        def self.call(source, receiver=nil, **arguments)
          message = ::Messaging::Message::Follow.(source, receiver, **arguments)
          message.metadata.extend Metadata
          message
        end
      end

      module Initial
        def initial(initiated_stream_name)
          metadata = Metadata.new

          metadata.correlation_stream_name = initiated_stream_name

          message = build
          message.metadata = metadata

          message
        end
      end
    end
  end
end