Module: Equalizer

Defined in:
lib/equalizer.rb

Overview

Equalizer provides equality, equivalence, hashing, pattern matching, and inspection methods for Ruby objects based on specified attributes.

Examples:

Basic usage

class GeoLocation
  include Equalizer.new(:latitude, :longitude)

  attr_reader :latitude, :longitude, :name

  def initialize(latitude, longitude, name = nil)
    @latitude = latitude
    @longitude = longitude
    @name = name
  end
end

loc1 = GeoLocation.new(1.0, 2.0, "Home")
loc2 = GeoLocation.new(1.0, 2.0, "Work")
loc1 == loc2  # => true (name is not part of equality)

Pattern matching

case location
in GeoLocation(latitude:, longitude:) then "#{latitude}, #{longitude}"
in [lat, lon]                         then "coords: #{lat}, #{lon}"
end

Defined Under Namespace

Modules: InspectMethods, InstanceMethods

Constant Summary collapse

VERSION =

The current version of the Equalizer gem

"1.0.0"

Class Method Summary collapse

Class Method Details

.new(*keys, inspect: true) ⇒ Module

Creates a module providing equality methods based on the given attributes

Examples:

Basic usage

class Point
  include Equalizer.new(:x, :y)
  attr_reader :x, :y
end

Parameters:

  • keys (Array<Symbol>)

    attribute names to use for equality

  • inspect (Boolean) (defaults to: true)

    whether to override #inspect and #pretty_print

Returns:

  • (Module)

    a module to include in your class

Raises:

  • (ArgumentError)

    if keys is empty or contains non-Symbols



48
49
50
51
# File 'lib/equalizer.rb', line 48

def self.new(*keys, inspect: true)
  validate_keys!(keys)
  build_module(keys.freeze, inspect:)
end