Sha256: 215f21fd944f83fbf954590317aae06c20b2150df16cac13dee299d2378c91df
Contents?: true
Size: 772 Bytes
Versions: 4
Compression:
Stored size: 772 Bytes
Contents
require 'forwardable' module Hamster module Immutable def self.included(klass) klass.extend(ClassMethods) klass.instance_eval do include InstanceMethods end end module ClassMethods def new(*args) super.freeze end end module InstanceMethods extend Forwardable def immutable? frozen? end alias_method :__copy__, :dup private :__copy__ def dup self end def_delegator :self, :dup, :clone protected def transform_unless(condition, &block) condition ? self : transform(&block) end def transform(&block) __copy__.tap { |copy| copy.instance_eval(&block) }.freeze end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
hamster-0.3.3 | lib/hamster/immutable.rb |
hamster-0.3.2 | lib/hamster/immutable.rb |
hamster-0.3.1 | lib/hamster/immutable.rb |
hamster-0.3.0 | lib/hamster/immutable.rb |