Class: ActiveEventStore::Mapper
- Inherits:
-
Object
- Object
- ActiveEventStore::Mapper
- Defined in:
- lib/active_event_store/mapper.rb
Overview
Custom mapper for RES events.
Instance Method Summary collapse
- #event_to_record(domain_event) ⇒ Object
-
#initialize(mapping:, serializer: ActiveEventStore.config.serializer) ⇒ Mapper
constructor
A new instance of Mapper.
- #record_to_event(record) ⇒ Object
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., 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 |