Class: Eco::Data::Hashes::DiffResult
- Inherits:
-
Object
- Object
- Eco::Data::Hashes::DiffResult
- Defined in:
- lib/eco/data/hashes/diff_result.rb
Instance Attribute Summary collapse
-
#key ⇒ Object
readonly
Returns the value of attribute key.
-
#src1 ⇒ Object
readonly
Returns the value of attribute src1.
-
#src2 ⇒ Object
readonly
Returns the value of attribute src2.
Instance Method Summary collapse
- #attr(attr) ⇒ Object
- #attr_prev(attr) ⇒ Object
- #case_sensitive? ⇒ Boolean
- #comparable_attrs ⇒ Object
- #compared_attrs ⇒ Object
- #del? ⇒ Boolean
- #diff? ⇒ Boolean
- #diff_attr?(attr) ⇒ Boolean
- #diff_attrs ⇒ Object
- #diff_hash ⇒ Object
- #eq?(val1, val2) ⇒ Boolean
-
#initialize(src1, src2, key:, compare: :all, case_sensitive: false) ⇒ DiffResult
constructor
A new instance of DiffResult.
-
#key? ⇒ Boolean
Is the key attr value changing?.
- #new? ⇒ Boolean
- #previous(attr) ⇒ Object
- #update? ⇒ Boolean
Constructor Details
#initialize(src1, src2, key:, compare: :all, case_sensitive: false) ⇒ DiffResult
Returns a new instance of DiffResult.
10 11 12 13 14 15 16 |
# File 'lib/eco/data/hashes/diff_result.rb', line 10 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
#key ⇒ Object (readonly)
Returns the value of attribute key.
5 6 7 |
# File 'lib/eco/data/hashes/diff_result.rb', line 5 def key @key end |
#src1 ⇒ Object (readonly)
Returns the value of attribute src1.
6 7 8 |
# File 'lib/eco/data/hashes/diff_result.rb', line 6 def src1 @src1 end |
#src2 ⇒ Object (readonly)
Returns the value of attribute src2.
6 7 8 |
# File 'lib/eco/data/hashes/diff_result.rb', line 6 def src2 @src2 end |
Instance Method Details
#attr(attr) ⇒ Object
45 46 47 48 |
# File 'lib/eco/data/hashes/diff_result.rb', line 45 def attr(attr) return nil unless src2 src2[attr.to_s] end |
#attr_prev(attr) ⇒ Object
50 51 52 53 |
# File 'lib/eco/data/hashes/diff_result.rb', line 50 def attr_prev(attr) return nil unless src1 src1[attr.to_s] end |
#case_sensitive? ⇒ Boolean
79 80 81 |
# File 'lib/eco/data/hashes/diff_result.rb', line 79 def case_sensitive? !!@case_sensitive end |
#comparable_attrs ⇒ Object
83 84 85 86 |
# File 'lib/eco/data/hashes/diff_result.rb', line 83 def comparable_attrs return [] if new? || del? compared_attrs end |
#compared_attrs ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/eco/data/hashes/diff_result.rb', line 88 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
22 23 24 |
# File 'lib/eco/data/hashes/diff_result.rb', line 22 def del? !!src1 && !src2 end |
#diff? ⇒ Boolean
30 31 32 |
# File 'lib/eco/data/hashes/diff_result.rb', line 30 def diff? new? || del? || !diff_attrs.empty? end |
#diff_attr?(attr) ⇒ Boolean
39 40 41 42 43 |
# File 'lib/eco/data/hashes/diff_result.rb', line 39 def diff_attr?(attr) return true if new? return true if del? diff_attrs.include?(attr.to_s) end |
#diff_attrs ⇒ Object
66 67 68 69 70 |
# File 'lib/eco/data/hashes/diff_result.rb', line 66 def diff_attrs @diff_attrs ||= comparable_attrs.each_with_object([]) do |attr, out| out << attr unless eq?(src1[attr], src2[attr]) end end |
#diff_hash ⇒ Object
59 60 61 62 63 64 |
# File 'lib/eco/data/hashes/diff_result.rb', line 59 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
72 73 74 75 76 77 |
# File 'lib/eco/data/hashes/diff_result.rb', line 72 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?
35 36 37 |
# File 'lib/eco/data/hashes/diff_result.rb', line 35 def key? !(new? || del?) && diff_attr?(key) end |
#new? ⇒ Boolean
18 19 20 |
# File 'lib/eco/data/hashes/diff_result.rb', line 18 def new? !src1 && !!src2 end |
#previous(attr) ⇒ Object
55 56 57 |
# File 'lib/eco/data/hashes/diff_result.rb', line 55 def previous(attr) src1 && src1[attr.to_s] end |
#update? ⇒ Boolean
26 27 28 |
# File 'lib/eco/data/hashes/diff_result.rb', line 26 def update? !new? && !del? && diff? end |