magnum-pi 0.1.0
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 +15 -0
- data/.gitignore +7 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.rdoc +5 -0
- data/Gemfile +14 -0
- data/README.rdoc +31 -0
- data/Rakefile +10 -0
- data/VERSION +1 -0
- data/examples/vimeo.rb +43 -0
- data/lib/magnum-pi.rb +14 -0
- data/lib/magnum-pi/api.rb +37 -0
- data/lib/magnum-pi/api/consumer.rb +92 -0
- data/lib/magnum-pi/api/instance.rb +23 -0
- data/lib/magnum-pi/api/resources.rb +17 -0
- data/lib/magnum-pi/api/scheme.rb +47 -0
- data/lib/magnum-pi/dsl.rb +62 -0
- data/lib/magnum-pi/gem_ext.rb +1 -0
- data/lib/magnum-pi/gem_ext/mechanize.rb +1 -0
- data/lib/magnum-pi/gem_ext/mechanize/http.rb +1 -0
- data/lib/magnum-pi/gem_ext/mechanize/http/agent.rb +60 -0
- data/lib/magnum-pi/version.rb +7 -0
- data/magnum-pi.gemspec +27 -0
- data/script/console +11 -0
- data/test/test_helper.rb +11 -0
- data/test/test_helper/coverage.rb +11 -0
- data/test/unit/api/test_consumer.rb +176 -0
- data/test/unit/api/test_instance.rb +53 -0
- data/test/unit/api/test_resources.rb +19 -0
- data/test/unit/api/test_scheme.rb +81 -0
- data/test/unit/test_api.rb +92 -0
- data/test/unit/test_dsl.rb +106 -0
- data/test/unit/test_magnum-pi.rb +29 -0
- metadata +195 -0
@@ -0,0 +1,92 @@
|
|
1
|
+
require_relative "../test_helper"
|
2
|
+
|
3
|
+
module Unit
|
4
|
+
class TestApi < MiniTest::Test
|
5
|
+
|
6
|
+
class SomeAPI
|
7
|
+
extend MagnumPI::API
|
8
|
+
end
|
9
|
+
|
10
|
+
module SomeOtherAPI
|
11
|
+
extend MagnumPI::API
|
12
|
+
end
|
13
|
+
|
14
|
+
describe MagnumPI::API do
|
15
|
+
describe "when extending a class" do
|
16
|
+
it "also includes MagnumPI::API::Instance within the class" do
|
17
|
+
assert_equal true, SomeAPI.included_modules.include?(MagnumPI::API::Instance)
|
18
|
+
end
|
19
|
+
it "also includes MagnumPI::API::Consumer within the class" do
|
20
|
+
assert_equal true, SomeAPI.included_modules.include?(MagnumPI::API::Consumer)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "when extending a module" do
|
25
|
+
it "also extends the module with MagnumPI::API::Consumer" do
|
26
|
+
assert_equal true, (class << SomeOtherAPI; self end).included_modules.include?(MagnumPI::API::Consumer)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe ".api" do
|
31
|
+
describe "without block argument" do
|
32
|
+
it "returns a MagnumPI::API::Scheme instance" do
|
33
|
+
assert_equal MagnumPI::API::Scheme, SomeAPI.api.class
|
34
|
+
end
|
35
|
+
end
|
36
|
+
describe "with block argument" do
|
37
|
+
it "instance evaluates the passed block" do
|
38
|
+
SomeAPI.api do
|
39
|
+
hello "world"
|
40
|
+
end
|
41
|
+
assert_equal "world", SomeAPI.api[:hello]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe ".resources" do
|
47
|
+
describe "without block argument" do
|
48
|
+
it "returns a MagnumPI::API::Resources instance" do
|
49
|
+
assert_equal MagnumPI::API::Resources, SomeAPI.resources.class
|
50
|
+
end
|
51
|
+
end
|
52
|
+
describe "with block argument" do
|
53
|
+
it "instance evaluates the passed block" do
|
54
|
+
SomeAPI.resources do
|
55
|
+
foo "bar"
|
56
|
+
end
|
57
|
+
assert_equal ["bar"], SomeAPI.resources[:foo]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe ".initialize" do
|
63
|
+
before do
|
64
|
+
SomeAPI.class_eval do
|
65
|
+
@api = nil
|
66
|
+
@resources = nil
|
67
|
+
end
|
68
|
+
SomeAPI.api do
|
69
|
+
uri "http://awesome.com/api/v1"
|
70
|
+
format :json
|
71
|
+
api_key String
|
72
|
+
end
|
73
|
+
SomeAPI.resources do
|
74
|
+
foo "bar"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
it "returns an instance with the finalized api config" do
|
78
|
+
api = SomeAPI.new :api_key => "123456789"
|
79
|
+
assert_equal({
|
80
|
+
:uri => "http://awesome.com/api/v1",
|
81
|
+
:format => :json,
|
82
|
+
:api_key => "123456789"
|
83
|
+
}, api.send(:api))
|
84
|
+
assert_equal({
|
85
|
+
:foo => ["bar"]
|
86
|
+
}, api.send(:resources))
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require_relative "../test_helper"
|
2
|
+
|
3
|
+
module Unit
|
4
|
+
class TestDSL < MiniTest::Test
|
5
|
+
|
6
|
+
describe MagnumPI::DSL do
|
7
|
+
describe "#initialize" do
|
8
|
+
it "stores passed valid keys" do
|
9
|
+
dsl = MagnumPI::DSL.new "foo", "bar"
|
10
|
+
assert_equal [:foo, :bar], dsl.instance_eval("@valid_keys")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "instance evaluates a passed block" do
|
14
|
+
MagnumPI::DSL.any_instance.expects(:foo).with("bar")
|
15
|
+
MagnumPI::DSL.new do
|
16
|
+
foo "bar"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
before do
|
22
|
+
@dsl = MagnumPI::DSL.new
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#class" do
|
26
|
+
it "returns MagnumPI::DSL" do
|
27
|
+
assert_equal MagnumPI::DSL, @dsl.class
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#_values" do
|
32
|
+
it "is an internal memoized hash" do
|
33
|
+
assert_equal true, @dsl.instance_eval("_values").is_a?(Hash)
|
34
|
+
assert_equal @dsl.instance_eval("_values").object_id, @dsl.instance_eval("_values").object_id
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#[]" do
|
39
|
+
it "is delegated to values" do
|
40
|
+
@dsl.instance_eval("_values").expects(:[]).with("foo")
|
41
|
+
@dsl["foo"]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#slice" do
|
46
|
+
it "is delegated to values" do
|
47
|
+
@dsl.instance_eval("_values").expects(:slice).with("foo", "bar")
|
48
|
+
@dsl.slice "foo", "bar"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#inspect" do
|
53
|
+
it "is delegated to values" do
|
54
|
+
@dsl.instance_eval("_values").expects(:inspect)
|
55
|
+
@dsl.inspect
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#to_hash" do
|
60
|
+
it "is delegated to values" do
|
61
|
+
@dsl.instance_eval("_values").expects(:to_hash)
|
62
|
+
@dsl.to_hash
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#to_s" do
|
67
|
+
it "is delegated to values" do
|
68
|
+
@dsl.instance_eval("_values").expects(:to_s)
|
69
|
+
@dsl.to_s
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#method_missing" do
|
74
|
+
it "functions as a setter for its internal hash" do
|
75
|
+
assert_equal({}, @dsl.instance_eval("_values"))
|
76
|
+
@dsl.foo "bar"
|
77
|
+
@dsl.hello do; end
|
78
|
+
assert_equal({:foo => ["bar"], :hello => []}, @dsl.instance_eval("_values"))
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "validation" do
|
84
|
+
class DSL < MagnumPI::DSL
|
85
|
+
private
|
86
|
+
def value_error_message(name, value)
|
87
|
+
"BOOM!!"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it "raises an error when using an invalid key" do
|
92
|
+
dsl = MagnumPI::DSL.new :foo, "bar"
|
93
|
+
dsl.foo
|
94
|
+
dsl.bar
|
95
|
+
assert_raises ArgumentError do
|
96
|
+
dsl.baz
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
it "can validate the passed value" do
|
101
|
+
assert_equal "Invalid value for 'foo': [] (BOOM!!)", assert_raises(ArgumentError){ DSL.new.foo }.message
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative "../test_helper"
|
2
|
+
|
3
|
+
module Unit
|
4
|
+
class TestMagnumPI < MiniTest::Test
|
5
|
+
|
6
|
+
class SomeAPI
|
7
|
+
extend MagnumPI
|
8
|
+
end
|
9
|
+
|
10
|
+
describe MagnumPI do
|
11
|
+
it "has the current version" do
|
12
|
+
version = "0.1.0"
|
13
|
+
assert_equal version, MagnumPI::VERSION
|
14
|
+
assert File.read(path "CHANGELOG.rdoc").include?("Version #{version}")
|
15
|
+
assert File.read(path "VERSION").include?(version)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "when extended" do
|
19
|
+
it "also extends base with MagnumPI::API::Consumer" do
|
20
|
+
def SomeAPI.extended_modules
|
21
|
+
(class << self; self end).included_modules
|
22
|
+
end
|
23
|
+
assert_equal true, SomeAPI.extended_modules.include?(MagnumPI::API)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: magnum-pi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Paul Engel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mechanize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: oj
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: xml-simple
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: mocha
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: Create an easy interface to talk with APIs
|
126
|
+
email:
|
127
|
+
- pm_engel@icloud.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- .gitignore
|
133
|
+
- .travis.yml
|
134
|
+
- CHANGELOG.rdoc
|
135
|
+
- Gemfile
|
136
|
+
- README.rdoc
|
137
|
+
- Rakefile
|
138
|
+
- VERSION
|
139
|
+
- examples/vimeo.rb
|
140
|
+
- lib/magnum-pi.rb
|
141
|
+
- lib/magnum-pi/api.rb
|
142
|
+
- lib/magnum-pi/api/consumer.rb
|
143
|
+
- lib/magnum-pi/api/instance.rb
|
144
|
+
- lib/magnum-pi/api/resources.rb
|
145
|
+
- lib/magnum-pi/api/scheme.rb
|
146
|
+
- lib/magnum-pi/dsl.rb
|
147
|
+
- lib/magnum-pi/gem_ext.rb
|
148
|
+
- lib/magnum-pi/gem_ext/mechanize.rb
|
149
|
+
- lib/magnum-pi/gem_ext/mechanize/http.rb
|
150
|
+
- lib/magnum-pi/gem_ext/mechanize/http/agent.rb
|
151
|
+
- lib/magnum-pi/version.rb
|
152
|
+
- magnum-pi.gemspec
|
153
|
+
- script/console
|
154
|
+
- test/test_helper.rb
|
155
|
+
- test/test_helper/coverage.rb
|
156
|
+
- test/unit/api/test_consumer.rb
|
157
|
+
- test/unit/api/test_instance.rb
|
158
|
+
- test/unit/api/test_resources.rb
|
159
|
+
- test/unit/api/test_scheme.rb
|
160
|
+
- test/unit/test_api.rb
|
161
|
+
- test/unit/test_dsl.rb
|
162
|
+
- test/unit/test_magnum-pi.rb
|
163
|
+
homepage: https://github.com/archan937/magnum-pi
|
164
|
+
licenses: []
|
165
|
+
metadata: {}
|
166
|
+
post_install_message:
|
167
|
+
rdoc_options: []
|
168
|
+
require_paths:
|
169
|
+
- lib
|
170
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ! '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ! '>='
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
requirements: []
|
181
|
+
rubyforge_project:
|
182
|
+
rubygems_version: 2.1.11
|
183
|
+
signing_key:
|
184
|
+
specification_version: 4
|
185
|
+
summary: Create an easy interface to talk with APIs
|
186
|
+
test_files:
|
187
|
+
- test/test_helper.rb
|
188
|
+
- test/test_helper/coverage.rb
|
189
|
+
- test/unit/api/test_consumer.rb
|
190
|
+
- test/unit/api/test_instance.rb
|
191
|
+
- test/unit/api/test_resources.rb
|
192
|
+
- test/unit/api/test_scheme.rb
|
193
|
+
- test/unit/test_api.rb
|
194
|
+
- test/unit/test_dsl.rb
|
195
|
+
- test/unit/test_magnum-pi.rb
|