class ActiveEventStore::Mapper

Custom mapper for RES events.

See github.com/RailsEventStore/rails_event_store/blob/v0.35.0/ruby_event_store/lib/ruby_event_store/mappers/default.rb

Attributes

mapping[R]
serializer[R]

Public Class Methods

new(mapping:, serializer: JSON) click to toggle source
# File lib/active_event_store/mapper.rb, line 18
def initialize(mapping:, serializer: JSON)
  @serializer = serializer
  @mapping = mapping
end

Public Instance Methods

event_to_serialized_record(domain_event) click to toggle source
# File lib/active_event_store/mapper.rb, line 23
def event_to_serialized_record(domain_event)
  # lazily add type to mapping
  # NOTE: use class name instead of a class to handle code reload
  # in development (to avoid accessing orphaned classes)
  mapping.register(domain_event.event_type, domain_event.class.name) unless mapping.exist?(domain_event.event_type)

  RubyEventStore::SerializedRecord.new(
    event_id: domain_event.event_id,
    metadata: serializer.dump(domain_event.metadata.to_h),
    data: serializer.dump(domain_event.data),
    event_type: domain_event.event_type
  )
end
serialized_record_to_event(record) click to toggle source
# File lib/active_event_store/mapper.rb, line 37
def serialized_record_to_event(record)
  event_class = mapping.fetch(record.event_type) do
    raise "Don't know how to deserialize event: \"#{record.event_type}\". " \
          "Add explicit mapping: ActiveEventStore.mapper.register \"#{record.event_type}\", \"<Class Name>\""
  end

  Object.const_get(event_class).new(
    **serializer.load(record.data).symbolize_keys,
    metadata: serializer.load(record.metadata).symbolize_keys,
    event_id: record.event_id
  )
end