Method: Logidze::Model#diff_from

Defined in:
lib/logidze/model.rb

#diff_from(ts = nil, version: nil, time: nil) ⇒ Object

Return diff object representing changes since specified time.

Examples:


post.diff_from(time: 2.days.ago) # or post.diff_from(version: 2)
#=> { "id" => 1, "changes" => { "title" => { "old" => "Hello!", "new" => "World" } } }


129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/logidze/model.rb', line 129

def diff_from(ts = nil, version: nil, time: nil)
  Deprecations.show_ts_deprecation_for("#diff_from") if ts
  time ||= ts
  time = parse_time(time) if time
  changes = log_data.diff_from(time: time, version: version).tap do |v|
    deserialize_changes!(v)
  end

  changes.delete_if { |k, _v| deleted_column?(k) }

  { "id" => id, "changes" => changes }
end