Class: ActiveAdmin::Audit::VersionSnapshot

Inherits:
HashWithIndifferentAccess
  • Object
show all
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