Sha256: 2afe6e3f7d9dae9699538b80ab6df9bd522e111f264049bdd3d320e032a8c0aa
Contents?: true
Size: 1.34 KB
Versions: 1
Compression:
Stored size: 1.34 KB
Contents
module HashDiff class Comparison < Struct.new(:left, :right) def diff @diff ||= differences(left, right) end def left_diff @concern = :left @left_diff ||= differences(left, right) end def right_diff @concern = :right @right_diff ||= differences(left, right) end private def concern @concern ||= :both end def clone(left, right) self.dup.tap do |inst| inst.left = left inst.right = right end end def differences(left, right) combined_attribute_keys.reduce({}, &reduction_strategy) end def reduction_strategy(opts={}) lambda do |diff, key| diff[key] = report(key) if not equal?(key) diff end end def combined_attribute_keys (left.keys + right.keys).uniq end def equal?(key) left[key] == right[key] end def hash?(value) value.is_a? Hash end def comparable?(key) hash?(left[key]) and hash?(right[key]) end def report(key) if comparable?(key) clone(left[key], right[key]).diff else report_concern(key) end end def report_concern(key) case concern when :left then right[key] when :right then left[key] when :both then [left[key], right[key]] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hash_diff-0.6.1 | lib/hash_diff/comparison.rb |