Method: HashDiff.best_diff
- Defined in:
- lib/hashdiff/diff.rb
.best_diff(obj1, obj2, options = {}) {|path, value1, value2| ... } ⇒ Array
Best diff two objects, which tries to generate the smallest change set using different similarity values.
HashDiff.best_diff is useful in case of comparing two objects which include similar hashes in arrays.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/hashdiff/diff.rb', line 27 def self.best_diff(obj1, obj2, = {}, &block) [:comparison] = block if block_given? opts = { :similarity => 0.3 }.merge!() diffs_1 = diff(obj1, obj2, opts) count_1 = count_diff diffs_1 opts = { :similarity => 0.5 }.merge!() diffs_2 = diff(obj1, obj2, opts) count_2 = count_diff diffs_2 opts = { :similarity => 0.8 }.merge!() diffs_3 = diff(obj1, obj2, opts) count_3 = count_diff diffs_3 count, diffs = count_1 < count_2 ? [count_1, diffs_1] : [count_2, diffs_2] diffs = count < count_3 ? diffs : diffs_3 end |