module Sequent::Core::SerializesCommand

Public Instance Methods

command() click to toggle source
# File lib/sequent/core/command_record.rb, line 9
def command
  args = Sequent::Core::Oj.strict_load(command_json)
  Class.const_get(command_type).deserialize_from_json(args)
end
command=(command) click to toggle source
# File lib/sequent/core/command_record.rb, line 14
def command=(command)
  self.created_at = command.created_at
  self.aggregate_id = command.aggregate_id if command.respond_to? :aggregate_id
  self.user_id = command.user_id if command.respond_to? :user_id
  self.command_type = command.class.name
  self.command_json = Sequent::Core::Oj.dump(command.attributes)

  # optional attributes (here for historic reasons)
  # this should be moved to a configurable CommandSerializer
  self.organization_id = command.organization_id if serialize_attribute?(command, :organization_id)
  self.event_aggregate_id = command.event_aggregate_id if serialize_attribute?(command, :event_aggregate_id)
  self.event_sequence_number = command.event_sequence_number if serialize_attribute?(
    command,
    :event_sequence_number,
  )
end

Private Instance Methods

serialize_attribute?(command, attribute) click to toggle source
# File lib/sequent/core/command_record.rb, line 33
def serialize_attribute?(command, attribute)
  [self, command].all? { |obj| obj.respond_to?(attribute) }
end