jsonpath 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/.gitignore +5 -0
- data/.rspec +3 -0
- data/Gemfile +2 -0
- data/Rakefile +5 -8
- data/jsonpath.gemspec +1 -11
- data/lib/jsonpath/enumerable.rb +3 -4
- data/lib/jsonpath/version.rb +1 -1
- data/lib/jsonpath.rb +4 -0
- data/spec/jsonpath_spec.rb +14 -12
- metadata +12 -10
- data/spec/spec.opts +0 -7
data/.gemtest
ADDED
File without changes
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -10,12 +10,9 @@ Rake::RDocTask.new do |rd|
|
|
10
10
|
end
|
11
11
|
|
12
12
|
require 'rubygems'
|
13
|
-
require 'spec'
|
14
|
-
require 'spec/rake/spectask'
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
14
|
+
require 'rspec/core/rake_task'
|
15
|
+
RSpec::Core::RakeTask.new(:spec)
|
16
|
+
|
17
|
+
task :default => :spec
|
18
|
+
task :test => :spec
|
data/jsonpath.gemspec
CHANGED
@@ -23,17 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency 'json'
|
24
24
|
s.add_development_dependency 'code_stats'
|
25
25
|
s.add_development_dependency 'rake'
|
26
|
-
s.add_development_dependency 'rspec', '
|
26
|
+
s.add_development_dependency 'rspec', '~> 2.5.0'
|
27
27
|
s.add_development_dependency 'bundler', '~> 1.0.0'
|
28
|
-
|
29
|
-
if s.respond_to? :specification_version then
|
30
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
31
|
-
s.specification_version = 3
|
32
|
-
|
33
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
34
|
-
else
|
35
|
-
end
|
36
|
-
else
|
37
|
-
end
|
38
28
|
end
|
39
29
|
|
data/lib/jsonpath/enumerable.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
class JsonPath
|
2
2
|
class Enumerable
|
3
3
|
include ::Enumerable
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(path, object)
|
6
6
|
@path, @object = path.path, object
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def each(node = @object, pos = 0, &blk)
|
10
10
|
if pos == @path.size
|
11
11
|
return blk.call(node)
|
@@ -23,7 +23,7 @@ class JsonPath
|
|
23
23
|
when ?', ?"
|
24
24
|
if node.is_a?(Hash)
|
25
25
|
key = sub_path[1,sub_path.size - 2]
|
26
|
-
each(node[key], pos + 1, &blk) if node.key?(key)
|
26
|
+
each(node[key], pos + 1, &blk) if node.key?(key)
|
27
27
|
end
|
28
28
|
when ??
|
29
29
|
(node.is_a?(Hash) ? node.keys : (0..node.size)).each do |e|
|
@@ -58,4 +58,3 @@ class JsonPath
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
61
|
-
|
data/lib/jsonpath/version.rb
CHANGED
data/lib/jsonpath.rb
CHANGED
data/spec/jsonpath_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe "JsonPath" do
|
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
@object = { "store"=> {
|
7
|
-
"book" => [
|
7
|
+
"book" => [
|
8
8
|
{ "category"=> "reference",
|
9
9
|
"author"=> "Nigel Rees",
|
10
10
|
"title"=> "Sayings of the Century",
|
@@ -35,7 +35,6 @@ describe "JsonPath" do
|
|
35
35
|
}
|
36
36
|
}
|
37
37
|
end
|
38
|
-
#json = JsonPath.wrap(object)
|
39
38
|
|
40
39
|
it "should lookup a direct path" do
|
41
40
|
JsonPath.new('$.store.*').on(@object).to_a.first['book'].size.should == 4
|
@@ -49,17 +48,17 @@ describe "JsonPath" do
|
|
49
48
|
@object['store']['book'][3]['author']
|
50
49
|
]
|
51
50
|
end
|
52
|
-
|
51
|
+
|
53
52
|
it "should retrieve all prices" do
|
54
|
-
JsonPath.new('$..price').on(@object).to_a.should == [
|
53
|
+
JsonPath.new('$..price').on(@object).to_a.sort.should == [
|
55
54
|
@object['store']['bicycle']['price'],
|
56
55
|
@object['store']['book'][0]['price'],
|
57
56
|
@object['store']['book'][1]['price'],
|
58
57
|
@object['store']['book'][2]['price'],
|
59
58
|
@object['store']['book'][3]['price']
|
60
|
-
]
|
59
|
+
].sort
|
61
60
|
end
|
62
|
-
|
61
|
+
|
63
62
|
it "should recognize all types of array splices" do
|
64
63
|
JsonPath.new('$..book[0:1:1]').on(@object).to_a.should == [@object['store']['book'][0], @object['store']['book'][1]]
|
65
64
|
JsonPath.new('$..book[1::2]').on(@object).to_a.should == [@object['store']['book'][1], @object['store']['book'][3]]
|
@@ -67,28 +66,31 @@ describe "JsonPath" do
|
|
67
66
|
JsonPath.new('$..book[:-2:2]').on(@object).to_a.should == [@object['store']['book'][0], @object['store']['book'][2]]
|
68
67
|
JsonPath.new('$..book[2::]').on(@object).to_a.should == [@object['store']['book'][2], @object['store']['book'][3]]
|
69
68
|
end
|
70
|
-
|
69
|
+
|
71
70
|
it "should recognize array comma syntax" do
|
72
71
|
JsonPath.new('$..book[0,1]').on(@object).to_a.should == [@object['store']['book'][0], @object['store']['book'][1]]
|
73
72
|
JsonPath.new('$..book[2,-1::]').on(@object).to_a.should == [@object['store']['book'][2], @object['store']['book'][3]]
|
74
73
|
end
|
75
|
-
|
74
|
+
|
76
75
|
it "should support filters" do
|
77
76
|
JsonPath.new("$..book[?(@['isbn'])]").on(@object).to_a.should == [@object['store']['book'][2], @object['store']['book'][3]]
|
78
77
|
JsonPath.new("$..book[?(@['price'] < 10)]").on(@object).to_a.should == [@object['store']['book'][0], @object['store']['book'][2]]
|
79
78
|
end
|
80
|
-
|
79
|
+
|
81
80
|
it "should support eval'd array indicies" do
|
82
81
|
JsonPath.new('$..book[(@.length-2)]').on(@object).to_a.should == [@object['store']['book'][2]]
|
83
82
|
end
|
84
|
-
|
83
|
+
|
85
84
|
it "should correct retrieve the right number of all nodes" do
|
86
85
|
JsonPath.new('$..*').on(@object).to_a.size.should == 28
|
87
86
|
end
|
88
|
-
|
87
|
+
|
89
88
|
it "should deal with a space in the key name" do
|
90
89
|
JsonPath.new("$.'c d'").on({"a" => "a","b" => "b", "c d" => "e"}).to_a.should == ['e']
|
90
|
+
end
|
91
91
|
|
92
|
+
it "should support a convenience class method" do
|
93
|
+
JsonPath.on(@object, '$..author').to_a.should == JsonPath.new('$..author').on(@object).to_a
|
92
94
|
end
|
93
|
-
|
95
|
+
|
94
96
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonpath
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joshua Hull
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-19 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -66,14 +66,14 @@ dependencies:
|
|
66
66
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
67
|
none: false
|
68
68
|
requirements:
|
69
|
-
- -
|
69
|
+
- - ~>
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
hash:
|
71
|
+
hash: 27
|
72
72
|
segments:
|
73
73
|
- 2
|
74
|
+
- 5
|
74
75
|
- 0
|
75
|
-
|
76
|
-
version: 2.0.0
|
76
|
+
version: 2.5.0
|
77
77
|
type: :development
|
78
78
|
version_requirements: *id004
|
79
79
|
- !ruby/object:Gem::Dependency
|
@@ -101,6 +101,10 @@ extensions: []
|
|
101
101
|
extra_rdoc_files:
|
102
102
|
- README.md
|
103
103
|
files:
|
104
|
+
- .gemtest
|
105
|
+
- .gitignore
|
106
|
+
- .rspec
|
107
|
+
- Gemfile
|
104
108
|
- README.md
|
105
109
|
- Rakefile
|
106
110
|
- VERSION
|
@@ -110,7 +114,6 @@ files:
|
|
110
114
|
- lib/jsonpath/enumerable.rb
|
111
115
|
- lib/jsonpath/version.rb
|
112
116
|
- spec/jsonpath_spec.rb
|
113
|
-
- spec/spec.opts
|
114
117
|
- spec/spec_helper.rb
|
115
118
|
has_rdoc: true
|
116
119
|
homepage: http://github.com/joshbuddy/jsonpath
|
@@ -148,5 +151,4 @@ specification_version: 3
|
|
148
151
|
summary: Ruby implementation of http://goessner.net/articles/JsonPath/
|
149
152
|
test_files:
|
150
153
|
- spec/jsonpath_spec.rb
|
151
|
-
- spec/spec.opts
|
152
154
|
- spec/spec_helper.rb
|