| Module | Diff |
| In: |
lib/diff.rb
|
$LastChangedBy: ertai $ $Id: /w/fey/ruby_ex/trunk/lib/diff.rb 7944 2005-09-06T23:27:27.929371Z ertai $
# File lib/diff.rb, line 11 def diff(other, recursive=true) gen_diff(other, recursive) {|a, b| a == b} end
# File lib/diff.rb, line 15 def gen_diff(other, recursive=true, &comp) result = { :similar => {}, :different => {}, :missing => {}, :additional => {} } if not other.is_a?(self.class) result[:different] = {:self => self.class, :other => other.class} return result end self.each_pair do |k, v| if other.has_key?(k) if comp[v, other[k]] result[:similar][k] = v else if recursive and v.respond_to?(:gen_diff) diff_result = v.gen_diff(other[k], recursive, &comp) else diff_result = {:self => v, :other => other[k]} end result[:different][k] = diff_result unless diff_result.no_diff? end else result[:additional][k] = v end end other.each_pair do |k, v| if not self.has_key?(k) result[:missing][k] = v end end result end