diff --git a/lib/dry/equalizer.rb b/lib/dry/equalizer.rb index 3d16c12..f12a21f 100644 --- a/lib/dry/equalizer.rb +++ b/lib/dry/equalizer.rb @@ -19,7 +19,7 @@ class Equalizer < Module # # @api private def initialize(*keys) - @keys = keys.uniq + @keys = keys define_methods freeze end @@ -45,9 +45,10 @@ def included(descendant) # # @api private def define_methods - define_cmp_method - define_hash_method - define_inspect_method + keys = @keys.uniq + define_cmp_method(keys) + define_hash_method(keys) + define_inspect_method(keys) end # Define an #cmp? method based on the instance's values identified by #keys @@ -55,8 +56,7 @@ def define_methods # @return [undefined] # # @api private - def define_cmp_method - keys = @keys + def define_cmp_method(keys) define_method(:cmp?) do |comparator, other| keys.all? do |key| __send__(key).public_send(comparator, other.__send__(key)) @@ -70,8 +70,7 @@ def define_cmp_method # @return [undefined] # # @api private - def define_hash_method - keys = @keys + def define_hash_method(keys) define_method(:hash) do | | keys.map(&method(:send)).push(self.class).hash end @@ -82,8 +81,7 @@ def define_hash_method # @return [undefined] # # @api private - def define_inspect_method - keys = @keys + def define_inspect_method(keys) define_method(:inspect) do | | klass = self.class name = klass.name || klass.inspect