Tonsser Hash Utils
A collection of classes for dealing with hashes. We've found them to be useful when manipulating a lot of JSON.
Installation
Add this line to your application's Gemfile:
gem "tonsser_hash_utils", "~> 1.0"
And then execute:
bundle install
Or install it yourself as:
gem install tonsser_hash_utils
Usage
The gem contains the following classes
HashWithQuickAccess
DeepHash
HashMerger
HashBuilder
HashWithQuickAccess
HashWithQuickAccess
makes it easy to access lots of properties within deeply nested hashes. Useful when dealing with hashes that are serialized from JSON.
Example:
# This
json[:foo][:bar][:baz][:qux]
# Becomes this
hash = HashWithQuickAccess.new(json)
hash.foo.bar.baz.qux
It also supports arrays within the hashes, so you can do stuff like
hash = HashWithQuickAccess.new(json)
hash.foo.bar[4].baz.qux
DeepHash
DeepHash
is useful for checking if some deeply nested value is present.
Example:
# This
params[:foo] && params[:foo][:bar] && params[:foo][:bar][:baz]
# Becomes this
DeepHash.new(params).dig(:foo, :bar, :baz)
HashMerger
HashMerger
is useful for recursively deep merging hashes that can contains arrays, which should also be merged.
Example:
one = {
foo: {
bar: [1,2,3]
}
}
two = {
foo: {
bar: [4,5]
qux: "Yo!"
}
}
HashMerger.new(one).merge_with(two) # => {
# foo: {
# bar: [1,2,3,4,5],
# qux: "Yo!"
# }
# }
NOTE: The merging is done using recursion, which might overflow the stack in Ruby due to the lack of tail call optimization. This shouldn't be a problem unless you have giant hashes, but be aware!
HashBuilder
HashBuilder
is useful for building a hash that might contain deep nesting.
# This
json = {
one: {
two: {
three: {
four: :foo
}
}
}
}
# Becomes this
builder = HashBuilder.new
builder.one.two.three.four = :foo
json = builder.as_json
Contributing
- Fork it ( https://github.com/[my-github-username]/tonsser_hash_utils/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
Releasing
bundle exec rake release