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

#diffObject



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

#newObject



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

#oldObject



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_keyObject



14
15
16
# File 'lib/waldit/record.rb', line 14

def primary_key
  self[:primary_key]&.then { |key| JSON.parse(key) }
end