Module Hashie::Extensions::DeepLocate
In: lib/hashie/extensions/deep_locate.rb

Methods

Public Class methods

The module level implementation of deep_locate, incase you do not want to include/extend the base datastructure. For further examples please see deep_locate.

@example

  books = [
    {
      title: "Ruby for beginners",
      pages: 120
    },
    ...
  ]

  Hashie::Extensions::DeepLocate.deep_locate -> (key, value, object) { key == :title }, books
  # => [{:title=>"Ruby for beginners", :pages=>120}, ...]

Public Instance methods

Performs a depth-first search on deeply nested data structures for a given comparator callable and returns each Enumerable, for which the callable returns true for at least one the its elements.

@example

  books = [
    {
      title: "Ruby for beginners",
      pages: 120
    },
    {
      title: "CSS for intermediates",
      pages: 80
    },
    {
      title: "Collection of ruby books",
      books: [
        {
          title: "Ruby for the rest of us",
          pages: 576
        }
      ]
    }
  ]

  books.extend(Hashie::Extensions::DeepLocate)

  # for ruby 1.9 leave *no* space between the lambda rocket and the braces
  # http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot-0/

  books.deep_locate -> (key, value, object) { key == :title && value.include?("Ruby") }
  # => [{:title=>"Ruby for beginners", :pages=>120}, {:title=>"Ruby for the rest of us", :pages=>576}]

  books.deep_locate -> (key, value, object) { key == :pages && value <= 120 }
  # => [{:title=>"Ruby for beginners", :pages=>120}, {:title=>"CSS for intermediates", :pages=>80}]

[Validate]