README.md in inheritable_accessors-0.1.1 vs README.md in inheritable_accessors-0.1.2

- old
+ new

@@ -1,16 +1,77 @@ -# InheritableAccessors +# InheritableAccessors [![Build Status](https://travis-ci.org/blakechambers/inheritable-accessors.svg)](https://travis-ci.org/blakechambers/inheritable-accessors) -Easily and consistently inherit attributes and configurations. This is particularly designed to work well with Rspec, which creates new inherited classes during each context. More examples of usage coming soon. +Easily and consistently inherit attributes and configurations. This is particularly designed to work well with Rspec, which creates new inherited classes during each context. -## Planned features +## Usage -- inheritable\_hash - - [x] support addition - - [ ] support delete/clear/reject -- inheritable\_set - - [x] support addition - - [ ] support deletion +Inheritable accessors comes with 3 inheritable components that can be used: +an iheritable hash, set, and option accessor. + +### InheritableHashAccessor + +```ruby +class Parent + include InheritableAccessors::InheritableHashAccessor + + inheritable_hash_accessor :options + + options[:a] = 1 +end + +class Child < Parent + options[:b] = 2 +end + +item = Child.new + +# deleted items do not affect parent items +item.delete(:a) +item.options[:c] = 3 + +Parent.options.to_hash +#=> {a: 1}) +Child.options.to_hash +#=> {a: 1, b: 1}) +item.options.to_hash +#=> {b: 2, c: 3}) +``` + +### InheritableOptionAccessor + +```ruby +class MyRequest + include InheritableAccessors::InheritableHashAccessor + include InheritableAccessors::InheritableOptionAccessor + + inheritable_hash_accessor :request_opts + inheritable_option_accessor :path, :action, :params, for: :request_opts + + # passing an argument to the accessor will "set" that value. + action "GET" + + action # => "GET" + + # passing a block will use the value of the block, but *only* when it is + # called. Block values will be memoized after the first run. + path { secret_path } + + protected + + def secret_path + "/secret_path" + end + +end + + +request = MyRequest.new +request.path # => "/secret_path" +request.path "/other_path" +request.path # => "/other_path" + + +``` ## Installation Add this line to your application's Gemfile: