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
|