Class: Keepasser::Comparator

Inherits:
Object
  • Object
show all
Defined in:
lib/keepasser/comparator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(left, right) ⇒ Comparator

Returns a new instance of Comparator.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/keepasser/comparator.rb', line 5

def initialize left, right
  parsers = [Parser.new(left), Parser.new(right)]

  @errors = {}

  parsers[0].keys.each do |group|
    missing = []
    left = parsers[0][group].keys - parsers[1][group].keys
    left.map { |entry| parsers[0][group].delete entry }

    right = parsers[1][group].keys - parsers[0][group].keys
    missing += right.map { |e| { e => parsers[1][group][e].fields } }
    right.map { |entry| parsers[1][group].delete entry }

    if missing.any?
      begin
        @errors['Missing entries'][group] = missing.clone
      rescue NoMethodError
        @errors['Missing entries'] = {}
        @errors['Missing entries'][group] = missing.clone
      end
    end
  end

  parsers[0].each_pair do |group, entries|
    entries.each_pair do |title, data|
      if data.fields != parsers[1][group][title].fields
        @errors['Different data'] = {}
        @errors['Different data'][group] = {}
        @errors['Different data'][group][title] = {}
        data.fields.each_pair do |key, value|
          other_value = parsers[1][group][title].fields[key]
          if value != parsers[1][group][title].fields[key]
            @errors['Different data'][group][title][key] = [value, other_value]
          end
        end
      end
    end
  end
end

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



3
4
5
# File 'lib/keepasser/comparator.rb', line 3

def errors
  @errors
end

Instance Method Details

#to_sObject



46
47
48
# File 'lib/keepasser/comparator.rb', line 46

def to_s
  @errors.to_yaml
end