Sha256: 9640856560d7a878ad8ec63ff63c591e5ea3b9228b604e4277fba893ddade6d1
Contents?: true
Size: 648 Bytes
Versions: 190
Compression:
Stored size: 648 Bytes
Contents
# frozen_string_literal: true require 'eac_ruby_utils/common_concern/module_setup' module EacRubyUtils class CompareBy attr_reader :fields def initialize(fields) @fields = fields end 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 object_values(object) fields.map { |field| object.send(field) } end end end
Version data entries
190 entries across 190 versions & 3 rubygems