Class: Sq::Dbsync::TableRegistry
- Inherits:
-
Object
- Object
- Sq::Dbsync::TableRegistry
- Defined in:
- lib/sq/dbsync/table_registry.rb
Overview
A key-value abstraction that is used to store metadata about loads on a per-table basis.
Instance Method Summary collapse
- #delete(key) ⇒ Object
- #ensure_storage_exists ⇒ Object
- #get(key) ⇒ Object
-
#initialize(db) ⇒ TableRegistry
constructor
A new instance of TableRegistry.
- #purge_except(keys) ⇒ Object
-
#set(key, values) ⇒ Object
Set a value if an existing value does not already exist.
-
#set!(key, values) ⇒ Object
Set a value, overriding any existing.
- #update(key, lock, values) ⇒ Object
Constructor Details
#initialize(db) ⇒ TableRegistry
Returns a new instance of TableRegistry.
6 7 8 9 |
# File 'lib/sq/dbsync/table_registry.rb', line 6 def initialize(db) @db = db @table = db[table_name] end |
Instance Method Details
#delete(key) ⇒ Object
11 12 13 |
# File 'lib/sq/dbsync/table_registry.rb', line 11 def delete(key) table.filter(table_name: key.to_s).delete end |
#ensure_storage_exists ⇒ Object
54 55 56 57 58 59 60 61 |
# File 'lib/sq/dbsync/table_registry.rb', line 54 def ensure_storage_exists db.create_table?(table_name, charset: 'utf8') do String :table_name, primary_key: true DateTime :last_synced_at DateTime :last_batch_synced_at DateTime :last_row_at end end |
#get(key) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/sq/dbsync/table_registry.rb', line 39 def get(key) table. select(:last_synced_at, :last_row_at, :last_batch_synced_at). filter(table_name: key.to_s). first end |
#purge_except(keys) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/sq/dbsync/table_registry.rb', line 46 def purge_except(keys) query = table if keys.any? query = query.where('table_name NOT IN ?', keys.map(&:to_s)) end query.delete end |
#set(key, values) ⇒ Object
Set a value if an existing value does not already exist.
16 17 18 19 20 |
# File 'lib/sq/dbsync/table_registry.rb', line 16 def set(key, values) unless exists?(key) table.insert(values.merge(table_name: key.to_s)) end end |
#set!(key, values) ⇒ Object
Set a value, overriding any existing.
23 24 25 26 27 28 |
# File 'lib/sq/dbsync/table_registry.rb', line 23 def set!(key, values) db.transaction do delete(key) set(key, values) end end |
#update(key, lock, values) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/sq/dbsync/table_registry.rb', line 30 def update(key, lock, values) table. filter( table_name: key.to_s, last_batch_synced_at: lock ). update(values) end |