class Unparser::Equalizer

Define equality, equivalence and inspection methods

Original code before vendoring and reduction from: github.com/dkubb/equalizer.

Public Class Methods

new(*keys) click to toggle source

Initialize an Equalizer with the given keys

Will use the keys with which it is initialized to define cmp?, hash, and inspect

@param [Array<Symbol>] keys

@return [undefined]

@api private

rubocop:disable Lint/MissingSuper

# File lib/unparser/equalizer.rb, line 20
def initialize(*keys)
  @keys = keys
  define_methods
  freeze
end

Private Instance Methods

define_cmp_method() click to toggle source
# File lib/unparser/equalizer.rb, line 39
def define_cmp_method
  keys = @keys
  define_method(:cmp?) do |comparator, other|
    keys.all? do |key|
      __send__(key).public_send(comparator, other.__send__(key))
    end
  end
  private :cmp?
end
define_hash_method() click to toggle source
# File lib/unparser/equalizer.rb, line 49
def define_hash_method
  keys = @keys
  define_method(:hash) do
    keys.map(&public_method(:__send__)).push(self.class).hash
  end
end
define_inspect_method() click to toggle source
# File lib/unparser/equalizer.rb, line 56
def define_inspect_method
  keys = @keys
  define_method(:inspect) do
    klass = self.class
    name  = klass.name || klass.inspect
    "#<#{name}#{keys.map { |key| " #{key}=#{__send__(key).inspect}" }.join}>"
  end
end
define_methods() click to toggle source
# File lib/unparser/equalizer.rb, line 33
def define_methods
  define_cmp_method
  define_hash_method
  define_inspect_method
end
included(descendant) click to toggle source

rubocop:enable Lint/MissingSuper

# File lib/unparser/equalizer.rb, line 29
def included(descendant)
  descendant.include(Methods)
end