class Midnight::Rails::ActiveRecordWrapper

Public Class Methods

new( record, serializer:, metadata_adapter:, advance_metadata: ) click to toggle source
# File lib/midnight/rails/active_record_wrapper.rb, line 8
def initialize(
  record,
  serializer:,
  metadata_adapter:,
  advance_metadata:
)
  @record = record
  @serializer = serializer
  @metadata_adapter = metadata_adapter
  @advance_metadata = advance_metadata
  @state_loaded = false
  @state_changed = false
end

Public Instance Methods

advance_metadata(events) click to toggle source
# File lib/midnight/rails/active_record_wrapper.rb, line 39
def advance_metadata(events)
  @advance_metadata.call(@record, events)
end
metadata() click to toggle source
# File lib/midnight/rails/active_record_wrapper.rb, line 22
def metadata
  @metadata_adapter.call(@record)
end
save!() click to toggle source
# File lib/midnight/rails/active_record_wrapper.rb, line 43
def save!
  @record.state = @serializer.dump(@changed_state) \
    if @state_changed
  @record.save!
rescue ::ActiveRecord::StaleObjectError => e
  # rescue just to add the convenient marker module to the exception
  raise e if e.is_a?(Commons::ConcurrentWriteError)
  raise StaleObjectError.new(e.record, e.attempted_action)
end
state() click to toggle source
# File lib/midnight/rails/active_record_wrapper.rb, line 26
def state
  return @changed_state if @state_changed
  return @loaded_state if @state_loaded
  @loaded_state = @serializer.load(@record.state)
  @state_loaded = true
  @loaded_state
end
state=(new_state) click to toggle source
# File lib/midnight/rails/active_record_wrapper.rb, line 34
def state=(new_state)
  @state_changed = true
  @changed_state = new_state
end