Class: ActiveEventStore::Mapper

Inherits:
Object
  • Object
show all
Defined in:
lib/active_event_store/mapper.rb

Overview

Instance Method Summary collapse

Constructor Details

#initialize(mapping:, serializer: ActiveEventStore.config.serializer) ⇒ Mapper

Returns a new instance of Mapper.



16
17
18
19
# File 'lib/active_event_store/mapper.rb', line 16

def initialize(mapping:, serializer: ActiveEventStore.config.serializer)
  @serializer = serializer
  @mapping = mapping
end

Instance Method Details

#event_to_record(domain_event) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/active_event_store/mapper.rb', line 21

def event_to_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::Record.new(
    event_id: domain_event.event_id,
    metadata: serializer.dump(domain_event..to_h),
    data: serializer.dump(domain_event.data),
    event_type: domain_event.event_type,
    timestamp: domain_event.timestamp,
    valid_at: domain_event.valid_at
  )
end

#record_to_event(record) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/active_event_store/mapper.rb', line 37

def record_to_event(record)
  event_class = mapping.fetch(record.event_type) {
    raise "Don't know how to deserialize event: \"#{record.event_type}\". " \
          "Add explicit mapping: ActiveEventStore.mapping.register \"#{record.event_type}\", \"<Class Name>\""
  }

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