class EacRubyUtils::CompareBy

def apply(klass)

def apply(klass)
  pself = self
  klass.include(::Comparable)
  %i[<=> eql?].each do |cmp_method|
    klass.define_method(cmp_method) do |other|
      pself.object_values(self).send(cmp_method, pself.object_values(other))
    end
  end
  klass.define_method(:hash) { pself.object_values(self).hash }
end

def initialize(fields)

def initialize(fields)
  @fields = fields
end

def object_values(object)

def object_values(object)
  fields.map { |field| object.send(field) }
end