module MessageStore::Write

Public Class Methods

included(cls) click to toggle source
# File lib/message_store/write.rb, line 3
def self.included(cls)
  cls.class_exec do
    include Dependency
    include Virtual
    include Log::Dependency

    extend Build
    extend Call
    extend Configure

    dependency :identifier, Identifier::UUID::Random

    abstract :configure
    abstract :write
  end
end

Public Instance Methods

call(message_data, stream_name, expected_version: nil) click to toggle source
# File lib/message_store/write.rb, line 44
def call(message_data, stream_name, expected_version: nil)
  batch = Array(message_data)

  logger.trace(tag: :write) do
    message_types = batch.map {|message_data| message_data.type }.uniq.join(', ')
    "Writing message data (Types: #{message_types}, Stream Name: #{stream_name}, Expected Version: #{expected_version.inspect}, Number of Messages: #{batch.length})"
  end
  logger.trace(tags: [:data, :message_data]) { batch.pretty_inspect }

  set_ids(batch)

  position = write(batch, stream_name, expected_version: expected_version)

  logger.info(tag: :write) do
    message_types = batch.map {|message_data| message_data.type }.uniq.join(', ')
    "Wrote message data (Types: #{message_types}, Stream Name: #{stream_name}, Expected Version: #{expected_version.inspect}, Number of Messages: #{batch.length})"
  end
  logger.info(tags: [:data, :message_data]) { batch.pretty_inspect }

  position
end
Also aliased as: write
set_ids(batch) click to toggle source
# File lib/message_store/write.rb, line 67
def set_ids(batch)
  batch.each do |message_data|
    if message_data.id.nil?
      message_data.id = identifier.get
    end
  end
end
write(message_data, stream_name, expected_version: nil)
Alias for: call