Skip to content

Instantly share code, notes, and snippets.

@cbandy
Last active December 10, 2015 05:48
Show Gist options
  • Select an option

  • Save cbandy/4390285 to your computer and use it in GitHub Desktop.

Select an option

Save cbandy/4390285 to your computer and use it in GitHub Desktop.
Virtus::ValueObject and Equalizer. Equalizer instances are immutable. https://github.com/dkubb/equalizer/issues/8
module Virtus::ValueObject
def self.new(super_class = Object, &block)
result = Class.new(super_class)
result.class_exec(&block)
result.include(Equalizer.new(*result.attribute_set.map(&:name)))
end
end
MyClass = Virtus::ValueObject.new do
attribute ...
end
x = MyClass.new ...
module Virtus
module ClassMethods
def freeze
include Equalizer.new(*attribute_set.map(&:name))
super
end
end
end
class MyClass
include Virtus::ValueObject
attribute ...
end
MyClass.freeze
x = MyClass.new ...
module Virtus
module ClassMethods
def new(*args)
unless @equalizer
@equalizer = Equalizer.new(*attribute_set.map(&:name))
include @equalizer
end
super
end
end
end
class MyClass
include Virtus::ValueObject
attribute ...
end
x = MyClass.new ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment