Module: Dyph::Equatable::ClassMethods

Defined in:
lib/dyph/equatable.rb

Instance Method Summary collapse

Instance Method Details

#equate_with(*fields) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/dyph/equatable.rb', line 8

def equate_with(*fields)
  self.class_eval <<-CODE, __FILE__, __LINE__ + 1
    def hash
      self.class.hash ^ #{fields.map { |field| "#{field}.hash"}.join(" ^ ")}
    end
  CODE

  self.class_eval <<-CODE, __FILE__, __LINE__ + 1
    def ==(other)
      self.class == other.class && #{fields.map { |field| "#{field} == other.#{field}"}.join(" && ")}
    end
    alias_method :eql?, :==
  CODE
end