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.
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
#key ⇒ Object (readonly)
Returns the value of attribute key.
6 7 8 |
# File 'lib/eco/data/hashes/diff_result.rb', line 6 def key @key end |
#src1 ⇒ Object (readonly)
Returns the value of attribute src1.
7 8 9 |
# File 'lib/eco/data/hashes/diff_result.rb', line 7 def src1 @src1 end |
#src2 ⇒ Object (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
80 81 82 |
# File 'lib/eco/data/hashes/diff_result.rb', line 80 def case_sensitive? !!@case_sensitive end |
#comparable_attrs ⇒ Object
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_attrs ⇒ Object
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
23 24 25 |
# File 'lib/eco/data/hashes/diff_result.rb', line 23 def del? !!src1 && !src2 end |
#diff? ⇒ 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
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_attrs ⇒ Object
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_hash ⇒ Object
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
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?
36 37 38 |
# File 'lib/eco/data/hashes/diff_result.rb', line 36 def key? !(new? || del?) && diff_attr?(key) end |
#new? ⇒ 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
27 28 29 |
# File 'lib/eco/data/hashes/diff_result.rb', line 27 def update? !new? && !del? && diff? end |