luchadeer 0.2.0 → 0.3.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.
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