Skip to content

Inspired by Hash#dig this repo contains an implementation of Hash#dig_and_collect, an utility method to navigate even more complex nested hashes without messing up your code.

License

Notifications You must be signed in to change notification settings

mottalrd/hash_dig_and_collect

Repository files navigation

Installation

Add this line to your application's Gemfile:

gem 'hash_dig_and_collect'

And then execute:

$ bundle

Or install it yourself as:

$ gem install hash_dig_and_collect

Usage

Hash#dig in Ruby 2.3 completely changed the way I navigate deeply nested hashes. This repo contains an implementation of Hash#dig_and_collect, a new utility method to navigate even more complex nested hashes without messing up your code.

See the details of the why in this Blog post.

client_with_many_addresses = {
  details: {
    first_name: "Florentino",
    last_name: "Perez"
  },
  addresses: [
    {
      type: "home",
      postcode: "SE1 9SG",
      street: "London Bridge St",
      number: 32,
      city: "London",
      location: {
        latitude: 51.504382,
        longitude: -0.086279
      }
    },
    {
      type: "office",
      postcode: "SW1A 1AA",
      street: "Buckingham Palace Road",
      number: nil,
      city: "London",
      location: {
        latitude: 51.5013673,
        longitude: -0.1440787
      }
    }
  ]
}

client_with_many_addresses.dig_and_collect(:addresses, :location, :latitude)
# [51.504382, 51.5013673]

Contributing

  1. Fork it ( https://github.com/mottalrd/hash_dig_and_collect/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

About

Inspired by Hash#dig this repo contains an implementation of Hash#dig_and_collect, an utility method to navigate even more complex nested hashes without messing up your code.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages