magnum-pi 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/CHANGELOG.rdoc +4 -0
- data/VERSION +1 -1
- data/lib/magnum-pi/api/consumer.rb +1 -1
- data/lib/magnum-pi/gem_ext.rb +1 -0
- data/lib/magnum-pi/gem_ext/oj.rb +1 -0
- data/lib/magnum-pi/gem_ext/oj/aj.rb +135 -0
- data/lib/magnum-pi/gem_ext/ox/ax.rb +6 -7
- data/lib/magnum-pi/version.rb +1 -1
- data/magnum-pi.gemspec +1 -0
- data/test/test_helper.rb +1 -0
- data/test/test_helper/minitest.rb +10 -10
- data/test/unit/api/test_consumer.rb +3 -3
- data/test/unit/gem_ext/test_aj.rb +82 -0
- data/test/unit/{core_ext → gem_ext}/test_ax.rb +2 -0
- metadata +22 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTgzYWJjMmVmMWM2Yjc4ODVmMzkxOTlmYWNlZWI4OTk1YTMxODQ3NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YWViMGNjMjM3MWQxNGRiYzNjZGM0ODEwMzlmYWMyMjI3NmVkZjk2Yw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZGZiM2YzMzQyYjUyMDM4ZTZkNDNmMGUxY2MwNDRjZTNhMDVmYWU3YTk5MzIz
|
10
|
+
N2RhZjJkYTNkODRkMDA2YTA5ZTM5MjVlNTk1YTAxMjdlN2IyNjNiMTRhYmMx
|
11
|
+
YTk1NWQzMzA5MDU1OGFlNTJiM2JjOGFkZGQyZGQ5MDc1ZTNhMzU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NWJiNDhkNzI2Njg5MjAyNGNhNTY2NmEwZTQ3MThiMWFiM2U0ZTE1Y2I4MDA2
|
14
|
+
NThlMWJkYjA5MTMzNDc2YjM5OTgwNmNjZDliN2E3ZWU2MzAxOWNhNzgzMWQ5
|
15
|
+
OWJhMzI5OTY2ZjgxY2NhM2Y5YWZiMDUwZDE0ZjU1MmJjMmI3OGM=
|
data/CHANGELOG.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/lib/magnum-pi/gem_ext.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
require "magnum-pi/gem_ext/oj/aj"
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require "stringio"
|
2
|
+
|
3
|
+
class Aj < Oj::Saj
|
4
|
+
|
5
|
+
def initialize(json)
|
6
|
+
@stringio = StringIO.new json
|
7
|
+
end
|
8
|
+
|
9
|
+
def each(pattern, &block)
|
10
|
+
@pattern = pattern.split("/").collect{|x| x == "" ? "*" : x}
|
11
|
+
@block = block
|
12
|
+
|
13
|
+
@stringio.rewind
|
14
|
+
Oj.saj_parse self, @stringio
|
15
|
+
|
16
|
+
ensure
|
17
|
+
@types = nil
|
18
|
+
@current_path = nil
|
19
|
+
@entries = nil
|
20
|
+
@regexp = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def hash_start(key)
|
24
|
+
start_enum key, {}, :hash
|
25
|
+
end
|
26
|
+
|
27
|
+
def array_start(key)
|
28
|
+
start_enum key, [], :array
|
29
|
+
end
|
30
|
+
|
31
|
+
def hash_end(key)
|
32
|
+
end_enum
|
33
|
+
end
|
34
|
+
|
35
|
+
def array_end(key)
|
36
|
+
end_enum
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_value(value, key)
|
40
|
+
if (entry = current_entry).nil?
|
41
|
+
current_path << :nokey
|
42
|
+
entries << {key => value}
|
43
|
+
end_enum
|
44
|
+
else
|
45
|
+
entry[key] = value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_enum
|
50
|
+
enum = nil
|
51
|
+
each "*" do |entry, key|
|
52
|
+
enum ||= begin
|
53
|
+
if key == :nokey
|
54
|
+
entry
|
55
|
+
elsif key.is_a?(String)
|
56
|
+
{}
|
57
|
+
else
|
58
|
+
[]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
enum[key] = entry if key != :nokey
|
62
|
+
end
|
63
|
+
enum
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def types
|
69
|
+
@types ||= []
|
70
|
+
end
|
71
|
+
|
72
|
+
def current_path
|
73
|
+
@current_path ||= []
|
74
|
+
end
|
75
|
+
|
76
|
+
def entries
|
77
|
+
@entries ||= []
|
78
|
+
end
|
79
|
+
|
80
|
+
def current_entry
|
81
|
+
entries[-1]
|
82
|
+
end
|
83
|
+
|
84
|
+
def current_key
|
85
|
+
current_path[-1]
|
86
|
+
end
|
87
|
+
|
88
|
+
def current_type
|
89
|
+
types[-1]
|
90
|
+
end
|
91
|
+
|
92
|
+
def entry?
|
93
|
+
@regexp ||= begin
|
94
|
+
pattern = @pattern.join(%q{\/}).gsub("*", %q{[^\/]+})
|
95
|
+
Regexp.new "^#{pattern}$"
|
96
|
+
end
|
97
|
+
!!current_path.join("/").match(@regexp)
|
98
|
+
end
|
99
|
+
|
100
|
+
def start_enum(key, entry, type)
|
101
|
+
add_to_current_path key
|
102
|
+
if current_entry || entry?
|
103
|
+
add_entry entry
|
104
|
+
end
|
105
|
+
types << type
|
106
|
+
end
|
107
|
+
|
108
|
+
def end_enum
|
109
|
+
entry = entries.pop
|
110
|
+
if entry?
|
111
|
+
@block.call entry, current_key
|
112
|
+
end
|
113
|
+
finalize_entry
|
114
|
+
end
|
115
|
+
|
116
|
+
def add_to_current_path(key)
|
117
|
+
key ||= (current_entry || []).size if current_type == :array
|
118
|
+
current_path << key if key
|
119
|
+
end
|
120
|
+
|
121
|
+
def add_entry(entry)
|
122
|
+
if (parent = current_entry).nil?
|
123
|
+
parent = (current_type == :hash ? {} : [])
|
124
|
+
entries << parent
|
125
|
+
end
|
126
|
+
parent[current_key] = entry
|
127
|
+
entries << entry
|
128
|
+
end
|
129
|
+
|
130
|
+
def finalize_entry
|
131
|
+
current_path.pop
|
132
|
+
types.pop
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
@@ -10,13 +10,13 @@ class Ax < Ox::Sax
|
|
10
10
|
@pattern = pattern.split("/").collect{|x| x == "" ? "*" : x}
|
11
11
|
@block = block
|
12
12
|
|
13
|
+
@stringio.rewind
|
13
14
|
Ox.sax_parse self, @stringio
|
14
15
|
|
15
16
|
ensure
|
16
17
|
@current_path = nil
|
17
18
|
@elements = nil
|
18
|
-
@
|
19
|
-
@last_call = nil
|
19
|
+
@regexp = nil
|
20
20
|
end
|
21
21
|
|
22
22
|
def start_element(name)
|
@@ -28,7 +28,6 @@ class Ax < Ox::Sax
|
|
28
28
|
else
|
29
29
|
return
|
30
30
|
end
|
31
|
-
@last_call = :start_element
|
32
31
|
end
|
33
32
|
|
34
33
|
def attr(name, str)
|
@@ -47,8 +46,6 @@ class Ax < Ox::Sax
|
|
47
46
|
element = finalize_element
|
48
47
|
if entry?
|
49
48
|
@block.call element, current_path[-1]
|
50
|
-
elsif element
|
51
|
-
@last_call = :end_element
|
52
49
|
end
|
53
50
|
current_path.pop
|
54
51
|
end
|
@@ -61,6 +58,8 @@ class Ax < Ox::Sax
|
|
61
58
|
hash
|
62
59
|
end
|
63
60
|
|
61
|
+
alias :to_enum :to_hash
|
62
|
+
|
64
63
|
private
|
65
64
|
|
66
65
|
def current_path
|
@@ -72,11 +71,11 @@ private
|
|
72
71
|
end
|
73
72
|
|
74
73
|
def entry?
|
75
|
-
@
|
74
|
+
@regexp ||= begin
|
76
75
|
pattern = @pattern.join(%q{\/}).gsub("*", %q{[^\/]+})
|
77
76
|
Regexp.new "^#{pattern}$"
|
78
77
|
end
|
79
|
-
!!current_path.join("/").match(@
|
78
|
+
!!current_path.join("/").match(@regexp)
|
80
79
|
end
|
81
80
|
|
82
81
|
def current_element
|
data/lib/magnum-pi/version.rb
CHANGED
data/magnum-pi.gemspec
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
class MiniTest::Test
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
1
|
+
# class MiniTest::Test
|
2
|
+
# def setup
|
3
|
+
# $stringio ||= StringIO.new
|
4
|
+
# $stdout = $stringio
|
5
|
+
# end
|
6
|
+
# def teardown
|
7
|
+
# $stdout = STDOUT
|
8
|
+
# $stringio.truncate $stringio.rewind
|
9
|
+
# end
|
10
|
+
# end
|
@@ -31,7 +31,7 @@ module Unit
|
|
31
31
|
response = mock
|
32
32
|
response.expects(:content).returns('{"name": "Paul Engel"}')
|
33
33
|
@consumer.expects(:request).with(:get, "http://foo.bar", {:foo => "bar"}).returns(response)
|
34
|
-
assert_equal({"name" => "Paul Engel"}, @consumer.get(:foo => "bar"))
|
34
|
+
assert_equal({"name" => "Paul Engel"}, @consumer.get(:foo => "bar").to_enum)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
describe "#post" do
|
@@ -39,7 +39,7 @@ module Unit
|
|
39
39
|
response = mock
|
40
40
|
response.expects(:content).returns('{"name": "Paul Engel"}')
|
41
41
|
@consumer.expects(:request).with(:post, "http://foo.bar", {:foo => "bar"}).returns(response)
|
42
|
-
assert_equal({"name" => "Paul Engel"}, @consumer.post(:foo => "bar"))
|
42
|
+
assert_equal({"name" => "Paul Engel"}, @consumer.post(:foo => "bar").to_enum)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
describe "#download" do
|
@@ -149,7 +149,7 @@ module Unit
|
|
149
149
|
<<-JSON
|
150
150
|
{"foo": "bar"}
|
151
151
|
JSON
|
152
|
-
)
|
152
|
+
).to_enum
|
153
153
|
)
|
154
154
|
@consumer.expects(:api).returns :format => "xml"
|
155
155
|
assert_equal(
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require_relative "../../test_helper"
|
2
|
+
|
3
|
+
module Unit
|
4
|
+
class TestAj < MiniTest::Test
|
5
|
+
|
6
|
+
describe Aj do
|
7
|
+
before do
|
8
|
+
@json = <<-JSON
|
9
|
+
{
|
10
|
+
"data": {
|
11
|
+
"articles": [
|
12
|
+
{
|
13
|
+
"title": "MagnumPI is awesome!!!",
|
14
|
+
"category": "ruby"
|
15
|
+
}, {
|
16
|
+
"title": "Netherlands beats Spain with 1-5 :)",
|
17
|
+
"category": "sport"
|
18
|
+
}
|
19
|
+
]
|
20
|
+
}
|
21
|
+
}
|
22
|
+
JSON
|
23
|
+
end
|
24
|
+
it "parses JSON like Oj" do
|
25
|
+
assert_equal Oj.load(@json), Aj.new(@json).to_enum
|
26
|
+
assert_equal({
|
27
|
+
"data" => {
|
28
|
+
"articles" => [
|
29
|
+
{
|
30
|
+
"title" => "MagnumPI is awesome!!!",
|
31
|
+
"category" => "ruby"
|
32
|
+
}, {
|
33
|
+
"title" => "Netherlands beats Spain with 1-5 :)",
|
34
|
+
"category" => "sport"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
38
|
+
}, Aj.new(@json).to_enum)
|
39
|
+
assert_equal({
|
40
|
+
"name" => "Paul Engel"
|
41
|
+
}, Aj.new('{"name": "Paul Engel"}').to_enum)
|
42
|
+
assert_equal([
|
43
|
+
{"name" => "Paul Engel"},
|
44
|
+
{"name" => "Ken Adams"}
|
45
|
+
], Aj.new('[{"name": "Paul Engel"}, {"name": "Ken Adams"}]').to_enum)
|
46
|
+
end
|
47
|
+
it "can return an array within a JSON document" do
|
48
|
+
result = []
|
49
|
+
Aj.new(@json).each("data/articles") do |entry|
|
50
|
+
result << entry
|
51
|
+
end
|
52
|
+
assert_equal [
|
53
|
+
[
|
54
|
+
{
|
55
|
+
"title" => "MagnumPI is awesome!!!",
|
56
|
+
"category" => "ruby"
|
57
|
+
}, {
|
58
|
+
"title" => "Netherlands beats Spain with 1-5 :)",
|
59
|
+
"category" => "sport"
|
60
|
+
}
|
61
|
+
]
|
62
|
+
], result
|
63
|
+
end
|
64
|
+
it "can iterate through a JSON document" do
|
65
|
+
articles = []
|
66
|
+
Aj.new(@json).each("data/articles/*") do |article|
|
67
|
+
articles << article
|
68
|
+
end
|
69
|
+
assert_equal [
|
70
|
+
{
|
71
|
+
"title" => "MagnumPI is awesome!!!",
|
72
|
+
"category" => "ruby"
|
73
|
+
}, {
|
74
|
+
"title" => "Netherlands beats Spain with 1-5 :)",
|
75
|
+
"category" => "sport"
|
76
|
+
}
|
77
|
+
], articles
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magnum-pi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Engel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ! '>='
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: xml-simple
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ! '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
description: Create an easy interface to talk with APIs
|
140
154
|
email:
|
141
155
|
- pm_engel@icloud.com
|
@@ -166,6 +180,8 @@ files:
|
|
166
180
|
- lib/magnum-pi/gem_ext/mechanize/http.rb
|
167
181
|
- lib/magnum-pi/gem_ext/mechanize/http/agent.rb
|
168
182
|
- lib/magnum-pi/gem_ext/mechanize/util.rb
|
183
|
+
- lib/magnum-pi/gem_ext/oj.rb
|
184
|
+
- lib/magnum-pi/gem_ext/oj/aj.rb
|
169
185
|
- lib/magnum-pi/gem_ext/ox.rb
|
170
186
|
- lib/magnum-pi/gem_ext/ox/ax.rb
|
171
187
|
- lib/magnum-pi/version.rb
|
@@ -178,8 +194,9 @@ files:
|
|
178
194
|
- test/unit/api/test_instance.rb
|
179
195
|
- test/unit/api/test_resources.rb
|
180
196
|
- test/unit/api/test_scheme.rb
|
181
|
-
- test/unit/core_ext/test_ax.rb
|
182
197
|
- test/unit/core_ext/test_deep_clone.rb
|
198
|
+
- test/unit/gem_ext/test_aj.rb
|
199
|
+
- test/unit/gem_ext/test_ax.rb
|
183
200
|
- test/unit/test_api.rb
|
184
201
|
- test/unit/test_dsl.rb
|
185
202
|
- test/unit/test_magnum-pi.rb
|
@@ -214,8 +231,9 @@ test_files:
|
|
214
231
|
- test/unit/api/test_instance.rb
|
215
232
|
- test/unit/api/test_resources.rb
|
216
233
|
- test/unit/api/test_scheme.rb
|
217
|
-
- test/unit/core_ext/test_ax.rb
|
218
234
|
- test/unit/core_ext/test_deep_clone.rb
|
235
|
+
- test/unit/gem_ext/test_aj.rb
|
236
|
+
- test/unit/gem_ext/test_ax.rb
|
219
237
|
- test/unit/test_api.rb
|
220
238
|
- test/unit/test_dsl.rb
|
221
239
|
- test/unit/test_magnum-pi.rb
|