Use Java-style property notation to execute method call chains on an object.
Install the gem and add to the application's Gemfile by executing:
bundle add property_string
If bundler is not being used to manage dependencies, install the gem by executing:
gem install property_string
# Object call chain
product.company.name # bar
ps = PropertyString.new(product)
ps["company.name"] # bar
# Object call chain with Array-like object
user.posts[0].replied_to.name # sshaw
ps = PropertyString.new(user)
ps["posts.0.replied_to.name"] # sshaw
# Method does not exist
ps = PropertyString.new(product)
ps["company.does_not_exist!"] # NoMethodError
# Can work with a Hash
h.dig(:some, "nested", :hash) # foo
ps = PropertyString.new(h)
ps["some.nested.hash"]
# Or an Array
a[0][0][0]
ps = PropertyString.new(a)
ps["0.0.0"]
# Fetching
ps.fetch("posts.9999", "your default")
ps.fetch("posts.9999") { |key| "some_default_for_#{key}" }
ps = PropertyString.new(product, :raise_if_method_missing => false)
ps["company.does_not_exist!"] # nil
ps = PropertyString.new(product, :whitelist => { Product => %w[company], Company => %w[name] })
ps["id"] # PropertyString::MethodNotAllowed
ps["company.id"] # PropertyString::MethodNotAllowed
Currently does not work when a superclass is whitelisted but trivial to add.
- PropertyHash - Access a nested Ruby Hash using Java-style properties as keys.
Bug reports and pull requests are welcome on GitHub at https://github.com/sshaw/property_string.
The gem is available as open source under the terms of the MIT License.