module Hashie::Extensions::DeepFind
Public Instance Methods
Source
# File lib/hashie/extensions/deep_find.rb, line 19 def deep_find(key) _deep_find(key) end
Performs a depth-first search on deeply nested data structures for a key and returns the first occurrence of the key.
options = {user: {location: {address: '123 Street'}}} options.extend(Hashie::Extensions::DeepFind) options.deep_find(:address) # => '123 Street' class MyHash < Hash include Hashie::Extensions::DeepFind end my_hash = MyHash.new my_hash[:user] = {location: {address: '123 Street'}} my_hash.deep_find(:address) # => '123 Street'
Also aliased as: deep_detect
Source
# File lib/hashie/extensions/deep_find.rb, line 47 def deep_find_all(key) matches = _deep_find_all(key) matches.empty? ? nil : matches end
Performs a depth-first search on deeply nested data structures for a key and returns all occurrences of the key.
options = { users: [ { location: {address: '123 Street'} }, { location: {address: '234 Street'}} ] } options.extend(Hashie::Extensions::DeepFind) options.deep_find_all(:address) # => ['123 Street', '234 Street'] class MyHash < Hash include Hashie::Extensions::DeepFind end my_hash = MyHash.new my_hash[:users] = [ {location: {address: '123 Street'}}, {location: {address: '234 Street'}} ] my_hash.deep_find_all(:address) # => ['123 Street', '234 Street']
Also aliased as: deep_select
Private Instance Methods
Source
# File lib/hashie/extensions/deep_find.rb, line 56 def _deep_find(key, object = self) _deep_find_all(key, object).first end
Source
# File lib/hashie/extensions/deep_find.rb, line 60 def _deep_find_all(key, object = self, matches = []) deep_locate_result = DeepLocate.deep_locate(key, object).tap do |result| result.map! { |element| element[key] } end matches.concat(deep_locate_result) end