class AttrExtras::AttrValue
Attributes
klass[R]
names[R]
Public Class Methods
new(klass, *names)
click to toggle source
# File lib/attr_extras/attr_value.rb, line 2 def initialize(klass, *names) @klass, @names = klass, names end
Public Instance Methods
apply()
click to toggle source
# File lib/attr_extras/attr_value.rb, line 9 def apply define_readers define_equals define_hash_identity end
Private Instance Methods
define_equals()
click to toggle source
# File lib/attr_extras/attr_value.rb, line 21 def define_equals names = @names # Make available within block. klass.send(:define_method, :==) do |other| return false unless other.is_a?(self.class) names.all? { |attr| self.public_send(attr) == other.public_send(attr) } end end
define_hash_identity()
click to toggle source
# File lib/attr_extras/attr_value.rb, line 31 def define_hash_identity names = @names # Make available within block. # Both #eql? and #hash are required for hash identity. klass.send(:alias_method, :eql?, :==) klass.send(:define_method, :hash) do [ self.class, *names.map { |attr| public_send(attr) } ].hash end end
define_readers()
click to toggle source
# File lib/attr_extras/attr_value.rb, line 17 def define_readers klass.send(:attr_reader, *names) end