luchadeer 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +29 -33
  5. data/lib/luchadeer.rb +0 -12
  6. data/lib/luchadeer/api.rb +42 -22
  7. data/lib/luchadeer/client.rb +2 -2
  8. data/lib/luchadeer/error.rb +4 -11
  9. data/lib/luchadeer/resource.rb +14 -2
  10. data/lib/luchadeer/resources.rb +135 -0
  11. data/lib/luchadeer/search.rb +1 -9
  12. data/lib/luchadeer/version.rb +1 -1
  13. data/spec/luchadeer/resources_spec.rb +6 -0
  14. data/spec/luchadeer_spec.rb +3 -6
  15. data/spec/spec_helper.rb +3 -0
  16. data/spec/support/shared_resource.rb +40 -0
  17. data/spec/support/shared_searchable.rb +65 -0
  18. metadata +11 -57
  19. data/lib/luchadeer/api/characters.rb +0 -11
  20. data/lib/luchadeer/api/companies.rb +0 -11
  21. data/lib/luchadeer/api/concepts.rb +0 -11
  22. data/lib/luchadeer/api/franchises.rb +0 -11
  23. data/lib/luchadeer/api/games.rb +0 -11
  24. data/lib/luchadeer/api/locations.rb +0 -11
  25. data/lib/luchadeer/api/objects.rb +0 -11
  26. data/lib/luchadeer/api/people.rb +0 -11
  27. data/lib/luchadeer/api/videos.rb +0 -11
  28. data/lib/luchadeer/character.rb +0 -13
  29. data/lib/luchadeer/company.rb +0 -13
  30. data/lib/luchadeer/concept.rb +0 -13
  31. data/lib/luchadeer/franchise.rb +0 -13
  32. data/lib/luchadeer/game.rb +0 -13
  33. data/lib/luchadeer/location.rb +0 -13
  34. data/lib/luchadeer/object.rb +0 -13
  35. data/lib/luchadeer/person.rb +0 -13
  36. data/lib/luchadeer/video.rb +0 -13
  37. data/spec/luchadeer/api/characters_spec.rb +0 -28
  38. data/spec/luchadeer/api/companies_spec.rb +0 -28
  39. data/spec/luchadeer/api/concepts_spec.rb +0 -28
  40. data/spec/luchadeer/api/franchises_spec.rb +0 -28
  41. data/spec/luchadeer/api/games_spec.rb +0 -28
  42. data/spec/luchadeer/api/locations_spec.rb +0 -28
  43. data/spec/luchadeer/api/objects_spec.rb +0 -28
  44. data/spec/luchadeer/api/people_spec.rb +0 -28
  45. data/spec/luchadeer/api/videos_spec.rb +0 -28
  46. data/spec/luchadeer/character_spec.rb +0 -27
  47. data/spec/luchadeer/company_spec.rb +0 -27
  48. data/spec/luchadeer/concept_spec.rb +0 -27
  49. data/spec/luchadeer/franchise_spec.rb +0 -27
  50. data/spec/luchadeer/game_spec.rb +0 -27
  51. data/spec/luchadeer/location_spec.rb +0 -27
  52. data/spec/luchadeer/object_spec.rb +0 -27
  53. data/spec/luchadeer/person_spec.rb +0 -27
  54. data/spec/luchadeer/video_spec.rb +0 -27
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ Luchadeer::API::RESOURCES.each do |resource|
4
+ describe(resource) { it_behaves_like 'a resource' } # spec/support/shared_resource.rb
5
+ describe(resource) { it_behaves_like 'a searchable resource' } # spec/support/shared_searchable.rb
6
+ end
@@ -5,18 +5,15 @@ describe Luchadeer do
5
5
 
6
6
  describe '.configure' do
7
7
  it 'returns a Luchadeer::Client' do
8
- expect(described_class.configure).to be_instance_of Luchadeer::Client
8
+ expect(described_class.configure).to be_a Luchadeer::Client
9
9
  end
10
10
 
11
11
  it 'passes opts hash to the new client' do
12
- hash = { api_key: api_key }
13
-
14
- expect(described_class.configure(hash).api_key).to eq api_key
12
+ expect(described_class.configure(api_key: api_key).api_key).to eq api_key
15
13
  end
16
14
 
17
15
  it 'passes the given block to the new client' do
18
- proc = Proc.new { |c| c.api_key = api_key }
19
-
16
+ proc = ->(c) { c.api_key = api_key }
20
17
  expect(described_class.configure(&proc).api_key).to eq api_key
21
18
  end
22
19
  end
data/spec/spec_helper.rb CHANGED
@@ -3,3 +3,6 @@ Coveralls.wear!
3
3
 
4
4
  require 'luchadeer'
5
5
  require 'webmock/rspec'
6
+
7
+ require 'support/shared_resource'
8
+ require 'support/shared_searchable'
@@ -0,0 +1,40 @@
1
+ shared_examples 'a resource' do
2
+ let(:singular) { described_class::SINGULAR }
3
+ let(:plural) { described_class::PLURAL }
4
+ let(:client) { Luchadeer::Client.new }
5
+
6
+ before :each do
7
+ Luchadeer.client = client
8
+ end
9
+
10
+ it 'is a Luchadeer::Resource' do
11
+ expect(described_class.new).to be_a Luchadeer::Resource
12
+ end
13
+
14
+ describe '.find' do
15
+ it "forwards to the client find method with arguments" do
16
+ expect(client).to receive(singular).with(1, true)
17
+ described_class.find(1, true)
18
+ end
19
+
20
+ it "forwards to the client find method with default refresh" do
21
+ expect(client).to receive(singular).with(1, false)
22
+ described_class.find(1)
23
+ end
24
+ end
25
+
26
+ describe '.search' do
27
+ let(:query) { 'chie' }
28
+
29
+ it "forwards to the client search method with arguments" do
30
+ expect(client).to receive(plural).with(query, true)
31
+ described_class.search(query, true)
32
+ end
33
+
34
+ it "forwards to the client search method with default refresh" do
35
+ expect(client).to receive(plural).with(query, false)
36
+ described_class.search(query)
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,65 @@
1
+ # Invoke this shared example group with a let statement passed in a block:
2
+ # let(:described_class) { ... }, the Luchadeer resource class that maps to the resource
3
+
4
+ shared_examples 'a searchable resource' do
5
+ let(:client) { Luchadeer::Client.new }
6
+
7
+ describe 'find method' do
8
+ let(:find) { described_class::SINGULAR }
9
+ let(:id) { 14850 }
10
+ let(:path) { %r(#{Luchadeer::Client::GIANT_BOMB}/#{find}/#{described_class::RESOURCE_ID}-#{id}) }
11
+
12
+ it 'requests the right url' do
13
+ stub = stub_request(:get, path).to_return(body: '{ }')
14
+ client.send(find, "#{id}")
15
+ expect(stub).to have_been_requested
16
+ end
17
+
18
+ it 'returns the proper type of resource' do
19
+ stub_request(:get, path).to_return(body: '{ "results": { "key": "value"}}')
20
+ expect(client.send(find, "#{id}")).to be_instance_of described_class
21
+ end
22
+
23
+ it 'caches responses' do
24
+ stub_request(:get, path).to_return(body: '{ }')
25
+ expect(client).to receive :cache
26
+ client.send(find, "#{id}")
27
+ end
28
+ end
29
+
30
+ describe 'search method' do
31
+ let(:search) { described_class::PLURAL }
32
+ let(:query) { 'chie' }
33
+ let(:path) { %r(#{Luchadeer::Client::GIANT_BOMB}/#{search}) }
34
+
35
+ context 'when invoked with a query' do
36
+ it 'requests the right url' do
37
+ stub = stub_request(:get, path)
38
+ .with(query: hash_including(filter: "name:#{query}"))
39
+ .to_return(body: '{ }')
40
+ client.send(search, query)
41
+ expect(stub).to have_been_requested
42
+ end
43
+ end
44
+
45
+ context 'when invoked without a query' do
46
+ it 'requests the right url' do
47
+ stub = stub_request(:get, path).to_return(body: '{ }')
48
+ client.send(search)
49
+ expect(stub).to have_been_requested
50
+ end
51
+ end
52
+
53
+ it 'returns the proper type of resource' do
54
+ stub_request(:get, path).to_return(body: '{ "results": { "key": "value"}}')
55
+ expect(client.send(search, query)).to be_instance_of described_class
56
+ end
57
+
58
+ it 'caches responses' do
59
+ stub_request(:get, path).to_return(body: '{ }')
60
+ expect(client).to receive :cache
61
+ client.send(search, query)
62
+ end
63
+ end
64
+
65
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: luchadeer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Friedman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-24 00:00:00.000000000 Z
11
+ date: 2014-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -111,59 +111,27 @@ files:
111
111
  - Rakefile
112
112
  - lib/luchadeer.rb
113
113
  - lib/luchadeer/api.rb
114
- - lib/luchadeer/api/characters.rb
115
- - lib/luchadeer/api/companies.rb
116
- - lib/luchadeer/api/concepts.rb
117
- - lib/luchadeer/api/franchises.rb
118
- - lib/luchadeer/api/games.rb
119
- - lib/luchadeer/api/locations.rb
120
- - lib/luchadeer/api/objects.rb
121
- - lib/luchadeer/api/people.rb
122
- - lib/luchadeer/api/videos.rb
123
- - lib/luchadeer/character.rb
124
114
  - lib/luchadeer/client.rb
125
- - lib/luchadeer/company.rb
126
- - lib/luchadeer/concept.rb
127
115
  - lib/luchadeer/error.rb
128
- - lib/luchadeer/franchise.rb
129
- - lib/luchadeer/game.rb
130
- - lib/luchadeer/location.rb
131
116
  - lib/luchadeer/middleware/follow_redirects.rb
132
117
  - lib/luchadeer/middleware/parse_api_error.rb
133
118
  - lib/luchadeer/middleware/parse_http_error.rb
134
119
  - lib/luchadeer/middleware/parse_json.rb
135
- - lib/luchadeer/object.rb
136
- - lib/luchadeer/person.rb
137
120
  - lib/luchadeer/resource.rb
121
+ - lib/luchadeer/resources.rb
138
122
  - lib/luchadeer/search.rb
139
123
  - lib/luchadeer/version.rb
140
- - lib/luchadeer/video.rb
141
124
  - luchadeer.gemspec
142
- - spec/luchadeer/api/characters_spec.rb
143
- - spec/luchadeer/api/companies_spec.rb
144
- - spec/luchadeer/api/concepts_spec.rb
145
- - spec/luchadeer/api/franchises_spec.rb
146
- - spec/luchadeer/api/games_spec.rb
147
- - spec/luchadeer/api/locations_spec.rb
148
- - spec/luchadeer/api/objects_spec.rb
149
- - spec/luchadeer/api/people_spec.rb
150
- - spec/luchadeer/api/videos_spec.rb
151
125
  - spec/luchadeer/api_spec.rb
152
- - spec/luchadeer/character_spec.rb
153
126
  - spec/luchadeer/client_spec.rb
154
- - spec/luchadeer/company_spec.rb
155
- - spec/luchadeer/concept_spec.rb
156
127
  - spec/luchadeer/error_spec.rb
157
- - spec/luchadeer/franchise_spec.rb
158
- - spec/luchadeer/game_spec.rb
159
- - spec/luchadeer/location_spec.rb
160
- - spec/luchadeer/object_spec.rb
161
- - spec/luchadeer/person_spec.rb
162
128
  - spec/luchadeer/resource_spec.rb
129
+ - spec/luchadeer/resources_spec.rb
163
130
  - spec/luchadeer/search_spec.rb
164
- - spec/luchadeer/video_spec.rb
165
131
  - spec/luchadeer_spec.rb
166
132
  - spec/spec_helper.rb
133
+ - spec/support/shared_resource.rb
134
+ - spec/support/shared_searchable.rb
167
135
  homepage: https://github.com/paulfri/luchadeer
168
136
  licenses:
169
137
  - MIT
@@ -184,33 +152,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
152
  version: '0'
185
153
  requirements: []
186
154
  rubyforge_project:
187
- rubygems_version: 2.2.0
155
+ rubygems_version: 2.2.2
188
156
  signing_key:
189
157
  specification_version: 4
190
158
  summary: The bombingest Giant Bomb API client library for Ruby.
191
159
  test_files:
192
- - spec/luchadeer/api/characters_spec.rb
193
- - spec/luchadeer/api/companies_spec.rb
194
- - spec/luchadeer/api/concepts_spec.rb
195
- - spec/luchadeer/api/franchises_spec.rb
196
- - spec/luchadeer/api/games_spec.rb
197
- - spec/luchadeer/api/locations_spec.rb
198
- - spec/luchadeer/api/objects_spec.rb
199
- - spec/luchadeer/api/people_spec.rb
200
- - spec/luchadeer/api/videos_spec.rb
201
160
  - spec/luchadeer/api_spec.rb
202
- - spec/luchadeer/character_spec.rb
203
161
  - spec/luchadeer/client_spec.rb
204
- - spec/luchadeer/company_spec.rb
205
- - spec/luchadeer/concept_spec.rb
206
162
  - spec/luchadeer/error_spec.rb
207
- - spec/luchadeer/franchise_spec.rb
208
- - spec/luchadeer/game_spec.rb
209
- - spec/luchadeer/location_spec.rb
210
- - spec/luchadeer/object_spec.rb
211
- - spec/luchadeer/person_spec.rb
212
163
  - spec/luchadeer/resource_spec.rb
164
+ - spec/luchadeer/resources_spec.rb
213
165
  - spec/luchadeer/search_spec.rb
214
- - spec/luchadeer/video_spec.rb
215
166
  - spec/luchadeer_spec.rb
216
167
  - spec/spec_helper.rb
168
+ - spec/support/shared_resource.rb
169
+ - spec/support/shared_searchable.rb
170
+ has_rdoc:
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module Characters
4
-
5
- def character(id, refresh = false)
6
- fetch("character/3005-#{id}", refresh, Luchadeer::Character)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module Companies
4
-
5
- def company(id, refresh = false)
6
- fetch("company/3010-#{id}", refresh, Luchadeer::Company)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module Concepts
4
-
5
- def concept(id, refresh = false)
6
- fetch("concept/3015-#{id}", refresh, Luchadeer::Concept)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module Franchises
4
-
5
- def franchise(id, refresh = false)
6
- fetch("franchise/3025-#{id}", refresh, Luchadeer::Franchise)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module Games
4
-
5
- def game(id, refresh = false)
6
- fetch("game/3030-#{id}", refresh, Luchadeer::Game)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module Locations
4
-
5
- def location(id, refresh = false)
6
- fetch("location/3035-#{id}", refresh, Luchadeer::Location)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module Objects
4
-
5
- def object(id, refresh = false)
6
- fetch("object/3055-#{id}", refresh, Luchadeer::Object)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module People
4
-
5
- def person(id, refresh = false)
6
- fetch("person/3040-#{id}", refresh, Luchadeer::Person)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Luchadeer
2
- module API
3
- module Videos
4
-
5
- def video(id, refresh = false)
6
- fetch("video/2300-#{id}", refresh, Luchadeer::Video)
7
- end
8
-
9
- end
10
- end
11
- end
@@ -1,13 +0,0 @@
1
- require 'luchadeer/resource'
2
-
3
- module Luchadeer
4
- class Character < Resource
5
-
6
- class << self
7
- def find(id, refresh = false)
8
- Luchadeer.client.character(id, refresh)
9
- end
10
- end
11
-
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require 'luchadeer/resource'
2
-
3
- module Luchadeer
4
- class Company < Resource
5
-
6
- class << self
7
- def find(id, refresh = false)
8
- Luchadeer.client.company(id, refresh)
9
- end
10
- end
11
-
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require 'luchadeer/resource'
2
-
3
- module Luchadeer
4
- class Concept < Resource
5
-
6
- class << self
7
- def find(id, refresh = false)
8
- Luchadeer.client.concept(id, refresh)
9
- end
10
- end
11
-
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require 'luchadeer/resource'
2
-
3
- module Luchadeer
4
- class Franchise < Resource
5
-
6
- class << self
7
- def find(id, refresh = false)
8
- Luchadeer.client.franchise(id, refresh)
9
- end
10
- end
11
-
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require 'luchadeer/resource'
2
-
3
- module Luchadeer
4
- class Game < Resource
5
-
6
- class << self
7
- def find(id, refresh = false)
8
- Luchadeer.client.game(id, refresh)
9
- end
10
- end
11
-
12
- end
13
- end