Create immutable objects with ease.
This is a small standalone gem featuring a module extracted from axiom. It allows you to make objects immutable in a simple, unobtrusive way.
require 'adamantium' require 'securerandom' class Example # Inclusion of Adamantium defaults to deep freeze behavior # of constructor and memoizer include Adamantium # Instance and attributes (ivars) are frozen per default # Example: # # object = Example.new # object.frozen? # => true # object.attribute.frozen? # => true # def initialize @attribute = "foo bar" end attr_reader :attribute # Memoized method with deeply frozen value (default) # Example: # # object = Example.new # object.random => ["abcdef"] # object.random => ["abcdef"] # object.random.frozen? => true # object.random[0].frozen? => true # def random [SecureRandom.hex(6)] end memoize :random # Memoized method with non frozen value # Example: # # object = Example.new # object.buffer # => <StringIO:abcdef> # object.buffer # => <StringIO:abcdef> # object.buffer.frozen? # => false # def buffer StringIO.new end memoize :buffer, freezer: :noop # Memoized method with shallow frozen value # Example: # # object = Example.new # object.random2 => ["abcdef"] # object.random2 => ["abcdef"] # object.random2.frozen? => true # object.random2[0].frozen? => false # def random2 [SecureRandom.hex(6)] end memoize :random2, freezer: :flat # Transform method derives changed instances without # calling the constructor # Example: # # object = Example.new # object.random => ["abcdef"] # update = object.edit "baz quux" # update.random => ["abcdef"] # update.attribute => "baz quux" # def edit(attribute) transform do @attribute = attribute end end end class FlatExample # Inclusion of Adamantium::Flat defaults to shallow frozen # behavior for memoizer and constructor include Adamantium::Flat # Instance is frozen but attribute is not # Example: # # object = FlatExample.new # object.frozen? # => true # object.attribute.frozen? # => false # def initialize @attribute = "foo bar" end attr_reader :attribute # Memoized method with flat frozen value (default with Adamantium::Flat) # Example: # # object = Example.new # object.random => ["abcdef"] # object.random => ["abcdef"] # object.random.frozen? => true # object.random[0].frozen? => false # def random [SecureRandom.hex(6)] end memoize :random end
See CONTRIBUTING.md for details.
Copyright © 2012-2014 Dan Kubb. See LICENSE for details.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4