Module: JSONSearch
- Defined in:
- lib/lib/json_search.rb
Overview
XPath-style library for JSON
Class Method Summary collapse
- .children(object, name) ⇒ Object
- .descendants(object, name) ⇒ Object
- .find(object, selector) ⇒ Object
Class Method Details
.children(object, name) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/lib/json_search.rb', line 31 def self.children(object, name) case object when Array object.map { |item| children(item, name) }.flatten when Hash if name == "*" object.values else [object[name]] end else [] end end |
.descendants(object, name) ⇒ Object
48 49 50 51 52 |
# File 'lib/lib/json_search.rb', line 48 def self.descendants(object, name) children(object, "*").map { |child| descendants(child, name) }.push(*children(object, name)) end |
.find(object, selector) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/lib/json_search.rb', line 5 def self.find(object, selector) if object.is_a?(Array) return object.map { |item| find(item, selector) }.flatten.compact end case selector when /\A\/([^\/]+)/ name = $1 sub = selector.sub($&, "") children(object, name).map { |child| find(child, sub) }.flatten.compact when /\A\/\/([^\/]+)/ name = $1 sub = selector.sub($&, "") descendants(object, name).map { |descendant| find(descendant, sub) }.flatten.compact when /\A\z/ object else raise "Unsupported selector" end end |