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 $

Methods

diff   gen_diff   no_diff?  

Public Instance methods

[Source]

# File lib/diff.rb, line 11
  def diff(other, recursive=true)
    gen_diff(other, recursive) {|a, b| a == b}
  end

[Source]

# 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

[Source]

# File lib/diff.rb, line 50
  def no_diff?
    self[:different] == {} and self[:missing] == {} and self[:additional] == {}
  end

[Validate]