Module: Smith::PersistenceAdapters::ActiveRecordInitialWrite

Defined in:
lib/smith/persistence_adapters/active_record_initial_write.rb

Class Method Summary collapse

Class Method Details

.call(model:, key_column:, payload_column:, key:, payload:) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/smith/persistence_adapters/active_record_initial_write.rb', line 8

def call(model:, key_column:, payload_column:, key:, payload:)
  candidate = nil
  record = model.create_or_find_by!(key_column => key) do |new_record|
    candidate = new_record
    new_record.public_send(:"#{payload_column}=", payload)
  end

  created_record?(record, candidate)
rescue ::ActiveRecord::RecordInvalid => e
  raise unless key_collision?(e.record, candidate, model, key_column, key)

  false
rescue ::ActiveRecord::RecordNotFound => e
  raise e.cause if e.cause.is_a?(::ActiveRecord::RecordNotUnique)

  raise
end