Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions lib/dry/equalizer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class Equalizer < Module
#
# @api private
def initialize(*keys)
@keys = keys.uniq
@keys = keys
define_methods
freeze
end
Expand All @@ -45,18 +45,18 @@ 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
#
# @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))
Expand All @@ -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
Expand All @@ -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
Expand Down