Module: DefineEquality

Defined in:
lib/ruby_peter_v/define_equality.rb

Overview

Modified from the equitable function from ruby facets

github.com/rubyworks/facets/blob/master/lib/standard/facets/equitable.rb

Copyright © 2005,2010 Thomas Sawyer Licensed under the Ruby license and GPL license See github.com/rubyworks/facets/blob/master/LICENSE.txt

This modified version falls under the license for this package

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.identify(base, *accessors) ⇒ Object

NOTE added :class as a default accessor



15
16
17
18
# File 'lib/ruby_peter_v/define_equality.rb', line 15

def self.identify(base, *accessors)
  base.send(:define_method, :equality_accessors){ [:class] + accessors }
  self
end

Instance Method Details

#==(o) ⇒ Object



20
21
22
# File 'lib/ruby_peter_v/define_equality.rb', line 20

def ==(o)
  equality_accessors.all?{ |a| send(a) == o.send(a) }
end

#eql?(o) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/ruby_peter_v/define_equality.rb', line 24

def eql?(o)
  equality_accessors.all?{ |a| send(a).eql?(o.send(a)) }
end

#hashObject



28
29
30
# File 'lib/ruby_peter_v/define_equality.rb', line 28

def hash
  equality_accessors.inject(0){ |acc, a| acc ^ send(a).hash }
end