Class: Eco::Data::Hashes::DiffResult

Inherits:
Object
  • Object
show all
Defined in:
lib/eco/data/hashes/diff_result.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(src1, src2, key:, compare: :all, case_sensitive: false) ⇒ DiffResult

Returns a new instance of DiffResult.

Parameters:

  • - (Array<String>, sym)

    :all compares the matching attrs between both hashes only



11
12
13
14
15
16
17
# File 'lib/eco/data/hashes/diff_result.rb', line 11

def initialize(src1, src2, key:, compare: :all, case_sensitive: false)
  @key     = key
  @compare = compare
  @case_sensitive = case_sensitive
  @src1 = src1
  @src2 = src2
end

Instance Attribute Details

#keyObject (readonly)

Returns the value of attribute key.



6
7
8
# File 'lib/eco/data/hashes/diff_result.rb', line 6

def key
  @key
end

#src1Object (readonly)

Returns the value of attribute src1.



7
8
9
# File 'lib/eco/data/hashes/diff_result.rb', line 7

def src1
  @src1
end

#src2Object (readonly)

Returns the value of attribute src2.



7
8
9
# File 'lib/eco/data/hashes/diff_result.rb', line 7

def src2
  @src2
end

Instance Method Details

#attr(attr) ⇒ Object



46
47
48
49
# File 'lib/eco/data/hashes/diff_result.rb', line 46

def attr(attr)
  return nil unless src2
  src2[attr.to_s]
end

#attr_prev(attr) ⇒ Object



51
52
53
54
# File 'lib/eco/data/hashes/diff_result.rb', line 51

def attr_prev(attr)
  return nil unless src1
  src1[attr.to_s]
end

#case_sensitive?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/eco/data/hashes/diff_result.rb', line 80

def case_sensitive?
  !!@case_sensitive
end

#comparable_attrsObject



84
85
86
87
# File 'lib/eco/data/hashes/diff_result.rb', line 84

def comparable_attrs
  return [] if new? || del?
  compared_attrs
end

#compared_attrsObject



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/eco/data/hashes/diff_result.rb', line 89

def compared_attrs
  return @compared_attrs if instance_variable_defined?(:@compared_attrs)
  @compared_attrs = \
    if @compare == :all
      src1.keys & src2.keys
    elsif @compare.is_a?(Array)
      @compare.map(&:to_s)
    else
      raise "Expecting 'compare' to be sym (:all) or Array<String>. Given: #{@compare.class}"
    end
end

#del?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/eco/data/hashes/diff_result.rb', line 23

def del?
  !!src1 && !src2
end

#diff?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/eco/data/hashes/diff_result.rb', line 31

def diff?
  new? || del? || !diff_attrs.empty?
end

#diff_attr?(attr) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
43
44
# File 'lib/eco/data/hashes/diff_result.rb', line 40

def diff_attr?(attr)
  return true if new?
  return true if del?
  diff_attrs.include?(attr.to_s)
end

#diff_attrsObject



67
68
69
70
71
# File 'lib/eco/data/hashes/diff_result.rb', line 67

def diff_attrs
  @diff_attrs ||= comparable_attrs.each_with_object([]) do |attr, out|
    out << attr unless eq?(src1[attr], src2[attr])
  end
end

#diff_hashObject



60
61
62
63
64
65
# File 'lib/eco/data/hashes/diff_result.rb', line 60

def diff_hash
  target_attrs = [key] | compared_attrs
  return src2.slice(*target_attrs) if new?
  return src1.slice(key)           if del?
  src2.slice(key, *diff_attrs)
end

#eq?(val1, val2) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
76
77
78
# File 'lib/eco/data/hashes/diff_result.rb', line 73

def eq?(val1, val2)
  return true  if val1 == val2
  return false if case_sensitive?
  return false if !val2 || !val1
  val1.upcase == val2.upcase
end

#key?Boolean

Is the key attr value changing?

Returns:

  • (Boolean)


36
37
38
# File 'lib/eco/data/hashes/diff_result.rb', line 36

def key?
  !(new? || del?) && diff_attr?(key)
end

#new?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/eco/data/hashes/diff_result.rb', line 19

def new?
  !src1 && !!src2
end

#previous(attr) ⇒ Object



56
57
58
# File 'lib/eco/data/hashes/diff_result.rb', line 56

def previous(attr)
  src1 && src1[attr.to_s]
end

#update?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/eco/data/hashes/diff_result.rb', line 27

def update?
  !new? && !del? && diff?
end