InheritableAccessors
Easily and consistently inherit attributes and configurations. This is particularly designed to work well with Rspec, which creates new inherited classes during each context.
Usage
Inheritable accessors comes with 3 inheritable components that can be used: an iheritable hash, set, and option accessor.
InheritableHashAccessor
class Parent
include InheritableAccessors::InheritableHashAccessor
inheritable_hash_accessor :options
[:a] = 1
end
class Child < Parent
[:b] = 2
end
item = Child.new
# deleted items do not affect parent items
item.delete(:a)
item.[:c] = 3
Parent..to_hash
#=> {a: 1})
Child..to_hash
#=> {a: 1, b: 1})
item..to_hash
#=> {b: 2, c: 3})
InheritableOptionAccessor
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:
gem 'inheritable_accessors'
And then execute:
$ bundle
Or install it yourself as:
$ gem install inheritable_accessors
Usage
see specs.
Contributing
- Fork it ( https://github.com/blakechambers/inheritable-accessors/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request