# File lib/table_sync/receiving/model/sequel.rb, line 23 def primary_keys [raw_model.primary_key].flatten end
class TableSync::Receiving::Model::Sequel
Attributes
raw_model[R]
schema[R]
table[R]
Public Class Methods
new(table_name)
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 7 def initialize(table_name) @raw_model = Class.new(::Sequel::Model(table_name)).tap(&:unrestrict_primary_key) model_naming = ::TableSync::NamingResolver::Sequel.new( table_name: table_name, db: @raw_model.db, ) @table = model_naming.table.to_sym @schema = model_naming.schema.to_sym end
Public Instance Methods
after_commit(&block)
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 59 def after_commit(&block) db.after_commit(&block) end
columns()
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 19 def columns dataset.columns end
destroy(data:, target_keys:, version_key:)
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 43 def destroy(data:, target_keys:, version_key:) sanitized_data = data.map { |attr| attr.select { |key, _value| target_keys.include?(key) } } sanitized_data = type_cast(sanitized_data) result = dataset.returning.where(::Sequel.|(*sanitized_data)).delete if result.size > data.size raise TableSync::DestroyError.new(data: data, target_keys: target_keys, result: result) end result end
primary_keys()
click to toggle source
transaction(&block)
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 55 def transaction(&block) db.transaction(&block) end
upsert(data:, target_keys:, version_key:, default_values:)
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 27 def upsert(data:, target_keys:, version_key:, default_values:) qualified_version = ::Sequel.qualify(raw_model.table_name, version_key) version_condition = ::Sequel.function(:coalesce, qualified_version, 0) < ::Sequel.qualify(:excluded, version_key) upd_spec = update_spec(data.first.keys - target_keys) data.map! { |d| default_values.merge(d) } insert_data = type_cast(data) dataset .returning .insert_conflict(target: target_keys, update: upd_spec, update_where: version_condition) .multi_insert(insert_data) end
Private Instance Methods
dataset()
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 67 def dataset raw_model.dataset end
db()
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 71 def db dataset.db end
type_cast(data)
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 75 def type_cast(data) data.map { |d| raw_model.new(d).values.keep_if { |k| d.key?(k) } } end
update_spec(keys)
click to toggle source
# File lib/table_sync/receiving/model/sequel.rb, line 79 def update_spec(keys) keys.map { |key| [key, ::Sequel[:excluded][key]] }.to_h end