Class: ActiveAdmin::Audit::VersionSnapshot
- Inherits:
-
HashWithIndifferentAccess
- Object
- HashWithIndifferentAccess
- ActiveAdmin::Audit::VersionSnapshot
- Defined in:
- lib/active_admin/audit/version_snapshot.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.dump(snapshot) ⇒ Object
4 5 6 |
# File 'lib/active_admin/audit/version_snapshot.rb', line 4 def self.dump(snapshot) snapshot.to_json end |
.load(string) ⇒ Object
8 9 10 |
# File 'lib/active_admin/audit/version_snapshot.rb', line 8 def self.load(string) self[JSON.parse(string || '{}')] end |
Instance Method Details
#diff(other_snapshot) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/active_admin/audit/version_snapshot.rb', line 12 def diff(other_snapshot) keys = (self.keys + other_snapshot.keys).uniq keys.each_with_object({}) do |key, diff| old_value = self[key] new_value = other_snapshot[key] if old_value.class == new_value.class item_diff = {} added = new_value - old_value item_diff[:+] = added unless added.empty? removed = old_value - new_value item_diff[:-] = removed unless removed.empty? diff[key] = item_diff unless item_diff.empty? end end end |
#materialize(klass) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/active_admin/audit/version_snapshot.rb', line 33 def materialize(klass) each do |attr, values| self[attr] = if values.is_a? Array # array of any values values.map { |value| materialize_item(klass, attr, value) } elsif values.is_a? Hash # hash with diff in '+'/'-' values.each do |k, items| values[k] = items.map { |value| materialize_item(klass, attr, value) } end else # any values materialize_item(klass, attr, values) end end end |