Class: FourthDimensional::EventLoaders::ActiveRecord
- Inherits:
-
Object
- Object
- FourthDimensional::EventLoaders::ActiveRecord
- Defined in:
- lib/fourth_dimensional/event_loaders/active_record.rb
Overview
FourthDimensional::EventLoaders::ActiveRecord
FourthDimensional.configure do |config|
config.event_loader = FourthDimensional::EventLoaders::ActiveRecord.new
end
Defined Under Namespace
Classes: Command, Event, FourthDimensionalRecord
Instance Method Summary collapse
-
#deserialize_event(event) ⇒ Object
Deserializes a single event.
-
#for_aggregate(aggregate_id) ⇒ Object
Loads events by
aggregate_id
and deserializes them. -
#save_commands_and_events(commands:, events:) ⇒ Object
Saves commands and events in active record compatible database.
Instance Method Details
#deserialize_event(event) ⇒ Object
Deserializes a single event.
21 22 23 24 25 26 27 28 29 |
# File 'lib/fourth_dimensional/event_loaders/active_record.rb', line 21 def deserialize_event(event) event.event_type.camelize.constantize.new(aggregate_id: event.aggregate_id, id: event.id, version: event.version, data: event.data, metadata: event., created_at: event.created_at, updated_at: event.updated_at) end |
#for_aggregate(aggregate_id) ⇒ Object
Loads events by aggregate_id
and deserializes them.
FourthDimensional.config.event_loader.for_aggregate(aggregate_id)
14 15 16 17 18 |
# File 'lib/fourth_dimensional/event_loaders/active_record.rb', line 14 def for_aggregate(aggregate_id) Event.where(aggregate_id: aggregate_id) .order(:version) .map(&method(:deserialize_event)) end |
#save_commands_and_events(commands:, events:) ⇒ Object
Saves commands and events in active record compatible database.
32 33 34 35 36 37 |
# File 'lib/fourth_dimensional/event_loaders/active_record.rb', line 32 def save_commands_and_events(commands:, events:) FourthDimensionalRecord.transaction do create_commands!(commands) create_events!(events).map(&method(:deserialize_event)) end end |