Class: Hash

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

Instance Method Summary collapse

Instance Method Details

#diff(other) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/xml_spec.rb', line 25

def diff(other)
  (self.keys + other.keys).uniq.inject({}) do |memo, key|
    unless self[key] == other[key]
      if self[key].kind_of?(Hash) &&  other[key].kind_of?(Hash)
        memo[key] = self[key].diff(other[key])
      else
        memo[key] = [self[key], other[key]]
      end
    end
    memo
  end
end

#interpret_diff(memos = [], path = []) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/xml_spec.rb', line 38

def interpret_diff( memos=[], path=[] )
  self.inject(memos) do |memo, key_value|
    k, v = key_value.first, key_value.last
    path << k
    #puts '', "memo: #{memo.inspect}", "key: #{k}", "value: #{v}"
    #puts "path: #{path.inspect}"
    if v.kind_of?( Hash )
      #debugger
      v.interpret_diff( memos, path )
    elsif v.kind_of?(Array)
      #debugger
      memo << "#{path.join( '/' )}: #{v.map { |val| val.nil? ? 'nil' : (val.respond_to?( :empty? ) && val.empty? ? "''" : "'#{val}'") }.join( ' is not ' )}"
    end
  end

  memos
end