Skip to content

paneq/as_readonly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AsReadonly

Expose your collections as readonly objects without fear.

Example

  ara = AsReadonly::Array.new([1,2])
  ara[0]    # => 1
  ara.clear # raises NoMethodError

Installation

Add this line to your application's Gemfile:

gem 'as_readonly'

And then execute:

$ bundle

Or install it yourself as:

$ gem install as_readonly

Require

  • as_readonly/array

      AsReadonly::Array
    
  • as_readonly/hash

      AsReadonly::Hash
    
  • as_readonly/set

      AsReadonly::Set
    
  • as_readonly/collections

      as_readonly/array
      as_readonly/hash
      as_readonly/set`
    
  • as_readonly/core_ext/array

      array.as_readonly # => AsReadonly::Array.new(array)
    
  • as_readonly/core_ext/hash

      hash.as_readonly  # => AsReadonly::Hash.new(hash)
    
  • as_readonly/core_ext/set

      set.as_readonly   # => AsReadonly::Set.new(set)
    
  • as_readonly/core_ext/collections

      as_readonly/core_ext/array
      as_readonly/core_ext/hash
      as_readonly/core_ext/set
    
  • as_readonly/core_ext/module

      Module#attr_readonly
    
      class MyClass
        attr_readonly :array
        def initialize
          @array = []
        end
      end
    
      MyClass.new.array.size  # => 0
      MyClass.new.array.clear # => NoMethodError exception
    
  • as_readonly/core_ext/all

      as_readonly/core_ext/collections
      as_readonly/core_ext/module
    
  • as_readonly - everything above

Usage

require 'as_readonly/array'

class MyClass
  def initialize
    @collection = []
  end

  def collection
    @read_collection ||= AsReadonly::Array.new(@collection)
  end
end

Note

This gem does not prevent calling mutating methods on collection elements. Obviously.

class MyClass
  def initialize
    @collection = ["asd"]
  end

  def collection
    @read_collection ||= AsReadonly::Array.new(@collection)
  end
end

c = MyClass.new
c.collection[0].upcase

Inspirations

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

Expose your collections as readonly objects without fear

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages