Module: JSONSearch

Defined in:
lib/lib/json_search.rb

Overview

XPath-style library for JSON

Class Method Summary collapse

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