module Virtus::ValueObject::ClassMethods

Public Instance Methods

attribute(name, type, options = {}) click to toggle source

Define an attribute on the receiver

The Attribute will have private writer methods (eg., immutable instances)

and be used in equality/equivalence comparisons

@example

class GeoLocation
  include Virtus::ValueObject

  attribute :latitude,  Float
  attribute :longitude, Float
end

@see Virtus::Extensions::Methods#attribute

@return [self]

@api public

Calls superclass method
# File lib/virtus/value_object.rb, line 119
def attribute(name, type, options = {})
  equalizer << name
  super name, type, options.merge(:writer => :private)
end
equalizer() click to toggle source

Define and include a module that provides Value Object semantics

Included module will have inspect, eql?, #== and hash methods whose definition is based on the keys argument

@example

virtus_class.equalizer

@return [Equalizer]

An Equalizer module which defines #inspect, #eql?, #== and #hash
for instances of this class

@api public

# File lib/virtus/value_object.rb, line 137
def equalizer
  @equalizer ||=
    begin
      equalizer = Virtus::Equalizer.new(name || inspect)
      include equalizer
      equalizer
    end
end