-
Notifications
You must be signed in to change notification settings - Fork 71
/
basic.rb
88 lines (78 loc) · 2.92 KB
/
basic.rb
1
2
3
4
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
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
require "rubygems"
require 'lib/jsonpath.rb'
require 'json'
describe "JsonPath" do
object = { "store"=> {
"book" => [
{ "category"=> "reference",
"author"=> "Nigel Rees",
"title"=> "Sayings of the Century",
"price"=> 8.95
},
{ "category"=> "fiction",
"author"=> "Evelyn Waugh",
"title"=> "Sword of Honour",
"price"=> 12.99
},
{ "category"=> "fiction",
"author"=> "Herman Melville",
"title"=> "Moby Dick",
"isbn"=> "0-553-21311-3",
"price"=> 8.99
},
{ "category"=> "fiction",
"author"=> "J. R. R. Tolkien",
"title"=> "The Lord of the Rings",
"isbn"=> "0-395-19395-8",
"price"=> 22.99
}
],
"bicycle"=> {
"color"=> "red",
"price"=> 19.95
}
}
}
json = JsonPath.wrap(object)
it "should lookup a direct path" do
json.path('$.store.*').to_a.first['book'].size.should == 4
end
it "should retrieve all authors" do
json.path('$..author').to_a.should == [
object['store']['book'][0]['author'],
object['store']['book'][1]['author'],
object['store']['book'][2]['author'],
object['store']['book'][3]['author']
]
end
it "should retrieve all prices" do
json.path('$..price').to_a.should == [
object['store']['bicycle']['price'],
object['store']['book'][0]['price'],
object['store']['book'][1]['price'],
object['store']['book'][2]['price'],
object['store']['book'][3]['price']
]
end
it "should recognize all types of array splices" do
json.path('$..book[0:1:1]').to_a.should == [object['store']['book'][0], object['store']['book'][1]]
json.path('$..book[1::2]').to_a.should == [object['store']['book'][1], object['store']['book'][3]]
json.path('$..book[::2]').to_a.should == [object['store']['book'][0], object['store']['book'][2]]
json.path('$..book[:-2:2]').to_a.should == [object['store']['book'][0], object['store']['book'][2]]
json.path('$..book[2::]').to_a.should == [object['store']['book'][2], object['store']['book'][3]]
end
it "should recognize array comma syntax" do
json.path('$..book[0,1]').to_a.should == [object['store']['book'][0], object['store']['book'][1]]
json.path('$..book[2,-1::]').to_a.should == [object['store']['book'][2], object['store']['book'][3]]
end
it "should support filters" do
json.path("$..book[?(@['isbn'])]").to_a.should == [object['store']['book'][2], object['store']['book'][3]]
json.path("$..book[?(@['price'] < 10)]").to_a.should == [object['store']['book'][0], object['store']['book'][2]]
end
it "should support eval'd array indicies" do
json.path('$..book[(@.length-2)]').to_a.should == [object['store']['book'][2]]
end
it "should correct retrieve the right number of all nodes" do
json.path('$..*').to_a.size.should == 28
end
end