class Midnight::Rails::ActiveRecordEventAdapter

noinspection RubyDefParenthesesInspection noinspection RubyParameterNamingConvention

Attributes

active_record[R]

Public Class Methods

new(\ active_record: DefaultEvent, serializer: Utilities::JsonSerializer, fetch_event_timestamp: lambda do |event| ::Time.parse(event.metadata[:occurred_at]) end ) click to toggle source
# File lib/midnight/rails/active_record_event_adapter.rb, line 12
def initialize(\
  active_record: DefaultEvent,
  serializer: Utilities::JsonSerializer,
  fetch_event_timestamp: lambda do |event|
    ::Time.parse(event.metadata[:occurred_at])
  end
)
  @active_record = active_record
  @serializer = serializer
  @fetch_event_timestamp = fetch_event_timestamp
  freeze
end

Public Instance Methods

save_events(events = [], next_position:, state_id:, **_) click to toggle source
# File lib/midnight/rails/active_record_event_adapter.rb, line 25
def save_events(events = [], next_position:, state_id:, **_)
  serialized_events = events.each_with_index.map do |unserialized_event, position_offset|
    {
      event_type: unserialized_event.class.name,
      data: @serializer.dump(unserialized_event.data),
      metadata: @serializer.dump(unserialized_event.metadata),
      position: next_position + position_offset,
      state_id: state_id,
      occurred_at: @fetch_event_timestamp.call(unserialized_event),
    }
  end
  # https://github.com/zdennis/activerecord-import
  active_record.import(serialized_events, validate: false)
end