Class: Terrestrial::Adapters::MemoryAdapter::Upsert
- Inherits:
-
Object
- Object
- Terrestrial::Adapters::MemoryAdapter::Upsert
- Defined in:
- lib/terrestrial/adapters/memory_adapter.rb
Overview
Small amount of code necessary to simulate upserts with Sequel’s API
Instance Method Summary collapse
- #attempt_update(row_id) ⇒ Object
-
#initialize(dataset, target:, update:) ⇒ Upsert
constructor
A new instance of Upsert.
- #insert(row) ⇒ Object
- #target_matches?(key) ⇒ Boolean
Constructor Details
#initialize(dataset, target:, update:) ⇒ Upsert
Returns a new instance of Upsert.
275 276 277 278 279 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 275 def initialize(dataset, target:, update:) @dataset = dataset @target = target @update_attributes = update end |
Instance Method Details
#attempt_update(row_id) ⇒ Object
292 293 294 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 292 def attempt_update(row_id) dataset.where(row_id).update(update_attributes) end |
#insert(row) ⇒ Object
284 285 286 287 288 289 290 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 284 def insert(row) dataset.insert(row) rescue DuplicateKeyError => e if target_matches?(e.key) attempt_update(e.row_id) end end |
#target_matches?(key) ⇒ Boolean
296 297 298 |
# File 'lib/terrestrial/adapters/memory_adapter.rb', line 296 def target_matches?(key) key.sort == Array(target).sort end |