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.
@@ -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