module Refract
Public Class Methods
search(json, query)
click to toggle source
# File lib/refract.rb, line 4 def self.search(json, query) fail(ArgumentError, 'Expected hash as the first argument') unless json.is_a?(Hash) fail(ArgumentError, 'Expected hash as the second argument') unless query.is_a?(Hash) recursive_lookup(Refract::KeysTransform.deep_stringify_keys(json), Refract::KeysTransform.deep_stringify_keys(query)) end
Private Class Methods
recursive_lookup(json, query)
click to toggle source
# File lib/refract.rb, line 13 def self.recursive_lookup(json, query) return [] unless json['content'] return [] unless json['content'].is_a?(Array) result = json['content'].select do |element| query.map do |k, v| if v.is_a?(Hash) && element[k].is_a?(Hash) (v.to_a - element[k].to_a).empty? else element[k] == v end end.all? end json['content'].map do |element| search(element, query) end.flatten.concat(result) end