Class: Eco::Data::Hashes::ArrayDiff

Inherits:
Object
  • Object
show all
Extended by:
Language::Models::ClassHelpers
Defined in:
lib/eco/data/hashes/array_diff.rb

Constant Summary

Constants included from Language::Models::ClassHelpers

Language::Models::ClassHelpers::NOT_USED

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Language::Models::ClassHelpers

class_resolver, inheritable_attrs, inheritable_class_vars, inherited, instance_variable_name, new_class, redef_without_warning, resolve_class, to_constant, used_param?

Constructor Details

#initialize(source1, source2, logger: ::Logger.new(IO::NULL), **kargs) ⇒ ArrayDiff

Returns a new instance of ArrayDiff.



43
44
45
46
47
48
49
50
51
52
# File 'lib/eco/data/hashes/array_diff.rb', line 43

def initialize(source1, source2, logger: ::Logger.new(IO::NULL), **kargs)
  @logger  = logger
  @options = kargs
  @source1 = source1
  @source2 = source2
  @src_h1  = by_key(source1)
  @src_h2  = by_key(source2)
  raise "Missing source1" unless !!self.src_h1
  raise "Missing source2" unless !!self.src_h2
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



39
40
41
# File 'lib/eco/data/hashes/array_diff.rb', line 39

def logger
  @logger
end

#source1Object (readonly)

Returns the value of attribute source1.



37
38
39
# File 'lib/eco/data/hashes/array_diff.rb', line 37

def source1
  @source1
end

#source2Object (readonly)

Returns the value of attribute source2.



37
38
39
# File 'lib/eco/data/hashes/array_diff.rb', line 37

def source2
  @source2
end

#src_h1Object (readonly)

Returns the value of attribute src_h1.



38
39
40
# File 'lib/eco/data/hashes/array_diff.rb', line 38

def src_h1
  @src_h1
end

#src_h2Object (readonly)

Returns the value of attribute src_h2.



38
39
40
# File 'lib/eco/data/hashes/array_diff.rb', line 38

def src_h2
  @src_h2
end

Class Method Details

.case_sensitive(value = nil) ⇒ Object



21
22
23
24
25
# File 'lib/eco/data/hashes/array_diff.rb', line 21

def case_sensitive(value = nil)
  @case_sensitive = false unless instance_variable_defined?(:@case_sensitive)
  return @case_sensitive unless value
  @case_sensitive = !!value
end

.case_sensitive?Boolean

Returns:

  • (Boolean)


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

def case_sensitive?
  !!@case_sensitive
end

.compare(*attrs) ⇒ Object



17
18
19
# File 'lib/eco/data/hashes/array_diff.rb', line 17

def compare(*attrs)
  compared_attrs.push(*attrs.map(&:to_s)).uniq!
end

.compared_attrsObject



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

def compared_attrs
  @compared_attrs ||= []
  @compared_attrs
end

.key(value = nil) ⇒ Object



8
9
10
11
# File 'lib/eco/data/hashes/array_diff.rb', line 8

def key(value = nil)
  return @key unless value
  @key = value.to_s
end

.key?Boolean

Returns:

  • (Boolean)


13
14
15
# File 'lib/eco/data/hashes/array_diff.rb', line 13

def key?
  !!@key
end

Instance Method Details

#diffsHash

Note:
  • A Hash::DiffResult object, offers hash_diff with the attrs that have changed value
  • It also allows to know the original value

Returns where key is the key of the record, and value a DiffResult object.

Returns:

  • (Hash)

    where key is the key of the record, and value a DiffResult object



58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/eco/data/hashes/array_diff.rb', line 58

def diffs
  @diffs ||= paired_sources.each_with_object([]) do |(src1, src2), diffs|
    args = {
      key:            key,
      compare:        compared_attrs,
      case_sensitive: case_sensitive?
    }
    diff_result_class.new(src1, src2, **args).tap do |res|
      diffs << res if res.diff?
    end
  end
end