Class: JsonPath
- Inherits:
-
Object
show all
- Defined in:
- lib/jsonpath.rb,
lib/jsonpath/proxy.rb,
lib/jsonpath/version.rb,
lib/jsonpath/enumerable.rb
Defined Under Namespace
Classes: Enumerable, Proxy
Constant Summary
collapse
- PATH_ALL =
'$..*'
- VERSION =
'0.5.7'
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(path, opts = nil) ⇒ JsonPath
Returns a new instance of JsonPath.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/jsonpath.rb', line 13
def initialize(path, opts = nil)
@opts = opts
scanner = StringScanner.new(path)
@path = []
while not scanner.eos?
if token = scanner.scan(/\$/)
@path << token
elsif token = scanner.scan(/@/)
@path << token
elsif token = scanner.scan(/[a-zA-Z0-9_-]+/)
@path << "['#{token}']"
elsif token = scanner.scan(/'(.*?)'/)
@path << "[#{token}]"
elsif token = scanner.scan(/\[/)
count = 1
while !count.zero?
if t = scanner.scan(/\[/)
token << t
count += 1
elsif t = scanner.scan(/\]/)
token << t
count -= 1
elsif t = scanner.scan(/[^\[\]]+/)
token << t
elsif scanner.eos?
raise ArgumentError, 'unclosed bracket'
end
end
@path << token
elsif token = scanner.scan(/\]/)
raise ArgumentError, 'unmatched closing bracket'
elsif token = scanner.scan(/\.\./)
@path << token
elsif scanner.scan(/\./)
nil
elsif token = scanner.scan(/\*/)
@path << token
elsif token = scanner.scan(/[><=] \d+/)
@path.last << token
elsif token = scanner.scan(/./)
@path.last << token
end
end
end
|
Instance Attribute Details
#path ⇒ Object
Returns the value of attribute path.
11
12
13
|
# File 'lib/jsonpath.rb', line 11
def path
@path
end
|
Class Method Details
.for(obj_or_str) ⇒ Object
81
82
83
|
# File 'lib/jsonpath.rb', line 81
def self.for(obj_or_str)
Proxy.new(process_object(obj_or_str))
end
|
.on(obj_or_str, path, opts = nil) ⇒ Object
77
78
79
|
# File 'lib/jsonpath.rb', line 77
def self.on(obj_or_str, path, opts = nil)
self.new(path, opts).on(process_object(obj_or_str))
end
|
Instance Method Details
#enum_on(obj_or_str, mode = nil) ⇒ Object
Also known as:
[]
72
73
74
|
# File 'lib/jsonpath.rb', line 72
def enum_on(obj_or_str, mode = nil)
JsonPath::Enumerable.new(self, self.class.process_object(obj_or_str), mode, @opts)
end
|
#first(obj_or_str, *args) ⇒ Object
68
69
70
|
# File 'lib/jsonpath.rb', line 68
def first(obj_or_str, *args)
enum_on(obj_or_str).first(*args)
end
|
#join(join_path) ⇒ Object
58
59
60
61
62
|
# File 'lib/jsonpath.rb', line 58
def join(join_path)
res = deep_clone
res.path += JsonPath.new(join_path).path
res
end
|
#on(obj_or_str) ⇒ Object
64
65
66
|
# File 'lib/jsonpath.rb', line 64
def on(obj_or_str)
enum_on(obj_or_str).to_a
end
|