Module: Waldit::Record
- Defined in:
- lib/waldit/record.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.included(base) ⇒ Object
5 6 7 8 9 10 11 12 |
# File 'lib/waldit/record.rb', line 5 def self.included(base) base.class_eval do scope :from_table, -> table { order(:committed_at, :lsn).where(table_name: table) } scope :from_model, -> model { from_table(model.table_name) } scope :for, -> record { from_model(record.class).where(primary_key: record.id) } scope :with_context, -> ctx { order(:committed_at, :lsn).where("context @> ?", ctx.to_json) } end end |
Instance Method Details
#diff ⇒ Object
28 29 30 31 32 33 |
# File 'lib/waldit/record.rb', line 28 def diff return self[:diff] if self[:diff] (old.keys | new.keys).reduce({}) do |diff, key| old[key] != new[key] ? diff.merge(key => [old[key], new[key]]) : diff end end |
#new ⇒ Object
18 19 20 21 |
# File 'lib/waldit/record.rb', line 18 def new return self[:new] if self[:new] (self[:diff] || {}).transform_values { |_old, new| new } end |
#old ⇒ Object
23 24 25 26 |
# File 'lib/waldit/record.rb', line 23 def old return self[:old] if self[:old] (self[:diff] || {}).transform_values { |old, _new| old } end |
#primary_key ⇒ Object
14 15 16 |
# File 'lib/waldit/record.rb', line 14 def primary_key self[:primary_key]&.then { |key| JSON.parse(key) } end |