luchadeer 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 +7 -0
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +60 -0
- data/LICENSE +20 -0
- data/README.md +58 -0
- data/Rakefile +1 -0
- data/lib/luchadeer.rb +32 -0
- data/lib/luchadeer/api.rb +51 -0
- data/lib/luchadeer/api/characters.rb +11 -0
- data/lib/luchadeer/api/companies.rb +11 -0
- data/lib/luchadeer/api/concepts.rb +11 -0
- data/lib/luchadeer/api/franchises.rb +11 -0
- data/lib/luchadeer/api/games.rb +11 -0
- data/lib/luchadeer/api/locations.rb +11 -0
- data/lib/luchadeer/api/objects.rb +11 -0
- data/lib/luchadeer/api/people.rb +11 -0
- data/lib/luchadeer/api/videos.rb +11 -0
- data/lib/luchadeer/character.rb +13 -0
- data/lib/luchadeer/client.rb +73 -0
- data/lib/luchadeer/company.rb +13 -0
- data/lib/luchadeer/concept.rb +13 -0
- data/lib/luchadeer/error.rb +50 -0
- data/lib/luchadeer/franchise.rb +13 -0
- data/lib/luchadeer/game.rb +13 -0
- data/lib/luchadeer/location.rb +13 -0
- data/lib/luchadeer/middleware/follow_redirects.rb +50 -0
- data/lib/luchadeer/middleware/parse_api_error.rb +18 -0
- data/lib/luchadeer/middleware/parse_http_error.rb +18 -0
- data/lib/luchadeer/middleware/parse_json.rb +28 -0
- data/lib/luchadeer/object.rb +13 -0
- data/lib/luchadeer/person.rb +13 -0
- data/lib/luchadeer/resource.rb +37 -0
- data/lib/luchadeer/search.rb +45 -0
- data/lib/luchadeer/version.rb +3 -0
- data/lib/luchadeer/video.rb +13 -0
- data/luchadeer.gemspec +27 -0
- data/spec/luchadeer/api/characters_spec.rb +28 -0
- data/spec/luchadeer/api/companies_spec.rb +28 -0
- data/spec/luchadeer/api/concepts_spec.rb +28 -0
- data/spec/luchadeer/api/franchises_spec.rb +28 -0
- data/spec/luchadeer/api/games_spec.rb +28 -0
- data/spec/luchadeer/api/locations_spec.rb +28 -0
- data/spec/luchadeer/api/objects_spec.rb +28 -0
- data/spec/luchadeer/api/people_spec.rb +28 -0
- data/spec/luchadeer/api/videos_spec.rb +28 -0
- data/spec/luchadeer/api_spec.rb +101 -0
- data/spec/luchadeer/character_spec.rb +27 -0
- data/spec/luchadeer/client_spec.rb +54 -0
- data/spec/luchadeer/company_spec.rb +27 -0
- data/spec/luchadeer/concept_spec.rb +27 -0
- data/spec/luchadeer/error_spec.rb +53 -0
- data/spec/luchadeer/franchise_spec.rb +27 -0
- data/spec/luchadeer/game_spec.rb +27 -0
- data/spec/luchadeer/location_spec.rb +27 -0
- data/spec/luchadeer/object_spec.rb +27 -0
- data/spec/luchadeer/person_spec.rb +27 -0
- data/spec/luchadeer/resource_spec.rb +70 -0
- data/spec/luchadeer/search_spec.rb +69 -0
- data/spec/luchadeer/video_spec.rb +27 -0
- data/spec/luchadeer_spec.rb +24 -0
- data/spec/spec_helper.rb +5 -0
- metadata +216 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::API::Concepts do
|
4
|
+
let(:client) { Luchadeer::Client.new }
|
5
|
+
|
6
|
+
describe '#concepts' do
|
7
|
+
let(:concept_id) { 1 }
|
8
|
+
let(:concept_path) { %r(#{Luchadeer::Client::GIANT_BOMB}/concept/3015-#{concept_id}) }
|
9
|
+
|
10
|
+
it 'requests the right url' do
|
11
|
+
stub = stub_request(:get, concept_path).to_return(body: '{ }')
|
12
|
+
client.concept("#{concept_id}")
|
13
|
+
expect(stub).to have_been_requested
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a Luchadeer::Concept' do
|
17
|
+
stub_request(:get, concept_path).to_return(body: '{ "results": { "key": "value"}}')
|
18
|
+
expect(client.concept("#{concept_id}")).to be_instance_of Luchadeer::Concept
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'caches responses' do
|
22
|
+
stub_request(:get, concept_path).to_return(body: '{ }')
|
23
|
+
expect(client).to receive :cache
|
24
|
+
client.concept("#{concept_id}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::API::Franchises do
|
4
|
+
let(:client) { Luchadeer::Client.new }
|
5
|
+
|
6
|
+
describe '#games' do
|
7
|
+
let(:franchise_id) { 1 }
|
8
|
+
let(:franchise_path) { %r(#{Luchadeer::Client::GIANT_BOMB}/franchise/3025-#{franchise_id}) }
|
9
|
+
|
10
|
+
it 'requests the right url' do
|
11
|
+
stub = stub_request(:get, franchise_path).to_return(body: '{ }')
|
12
|
+
client.franchise("#{franchise_id}")
|
13
|
+
expect(stub).to have_been_requested
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a Luchadeer::Franchise' do
|
17
|
+
stub_request(:get, franchise_path).to_return(body: '{ "results": { "key": "value"}}')
|
18
|
+
expect(client.franchise("#{franchise_id}")).to be_instance_of Luchadeer::Franchise
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'caches responses' do
|
22
|
+
stub_request(:get, franchise_path).to_return(body: '{ }')
|
23
|
+
expect(client).to receive :cache
|
24
|
+
client.franchise("#{franchise_id}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::API::Games do
|
4
|
+
let(:client) { Luchadeer::Client.new }
|
5
|
+
|
6
|
+
describe '#games' do
|
7
|
+
let(:game_id) { 1 }
|
8
|
+
let(:game_path) { %r(#{Luchadeer::Client::GIANT_BOMB}/game/3030-#{game_id}) }
|
9
|
+
|
10
|
+
it 'requests the right url' do
|
11
|
+
stub = stub_request(:get, game_path).to_return(body: '{ }')
|
12
|
+
client.game("#{game_id}")
|
13
|
+
expect(stub).to have_been_requested
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a Luchadeer::Game' do
|
17
|
+
stub_request(:get, game_path).to_return(body: '{ "results": { "key": "value"}}')
|
18
|
+
expect(client.game("#{game_id}")).to be_instance_of Luchadeer::Game
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'caches responses' do
|
22
|
+
stub_request(:get, game_path).to_return(body: '{ }')
|
23
|
+
expect(client).to receive :cache
|
24
|
+
client.game("#{game_id}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::API::Locations do
|
4
|
+
let(:client) { Luchadeer::Client.new }
|
5
|
+
|
6
|
+
describe '#Locations' do
|
7
|
+
let(:location_id) { 1 }
|
8
|
+
let(:location_path) { %r(#{Luchadeer::Client::GIANT_BOMB}/location/3035-#{location_id}) }
|
9
|
+
|
10
|
+
it 'requests the right url' do
|
11
|
+
stub = stub_request(:get, location_path).to_return(body: '{ }')
|
12
|
+
client.location("#{location_id}")
|
13
|
+
expect(stub).to have_been_requested
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a Luchadeer::Location' do
|
17
|
+
stub_request(:get, location_path).to_return(body: '{ "results": { "key": "value"}}')
|
18
|
+
expect(client.location("#{location_id}")).to be_instance_of Luchadeer::Location
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'caches responses' do
|
22
|
+
stub_request(:get, location_path).to_return(body: '{ }')
|
23
|
+
expect(client).to receive :cache
|
24
|
+
client.location("#{location_id}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::API::Objects do
|
4
|
+
let(:client) { Luchadeer::Client.new }
|
5
|
+
|
6
|
+
describe '#games' do
|
7
|
+
let(:object_id) { 1 }
|
8
|
+
let(:object_path) { %r(#{Luchadeer::Client::GIANT_BOMB}/object/3055-#{object_id}) }
|
9
|
+
|
10
|
+
it 'requests the right url' do
|
11
|
+
stub = stub_request(:get, object_path).to_return(body: '{ }')
|
12
|
+
client.object("#{object_id}")
|
13
|
+
expect(stub).to have_been_requested
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a Luchadeer::Object' do
|
17
|
+
stub_request(:get, object_path).to_return(body: '{ "results": { "key": "value"}}')
|
18
|
+
expect(client.object("#{object_id}")).to be_instance_of Luchadeer::Object
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'caches responses' do
|
22
|
+
stub_request(:get, object_path).to_return(body: '{ }')
|
23
|
+
expect(client).to receive :cache
|
24
|
+
client.object("#{object_id}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::API::People do
|
4
|
+
let(:client) { Luchadeer::Client.new }
|
5
|
+
|
6
|
+
describe '#games' do
|
7
|
+
let(:person_id) { 1 }
|
8
|
+
let(:person_path) { %r(#{Luchadeer::Client::GIANT_BOMB}/person/3040-#{person_id}) }
|
9
|
+
|
10
|
+
it 'requests the right url' do
|
11
|
+
stub = stub_request(:get, person_path).to_return(body: '{ }')
|
12
|
+
client.person("#{person_id}")
|
13
|
+
expect(stub).to have_been_requested
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a Luchadeer::Object' do
|
17
|
+
stub_request(:get, person_path).to_return(body: '{ "results": { "key": "value"}}')
|
18
|
+
expect(client.person("#{person_id}")).to be_instance_of Luchadeer::Person
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'caches responses' do
|
22
|
+
stub_request(:get, person_path).to_return(body: '{ }')
|
23
|
+
expect(client).to receive :cache
|
24
|
+
client.person("#{person_id}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::API::Videos do
|
4
|
+
let(:client) { Luchadeer::Client.new }
|
5
|
+
|
6
|
+
describe '#games' do
|
7
|
+
let(:video_id) { 1 }
|
8
|
+
let(:video_path) { %r(#{Luchadeer::Client::GIANT_BOMB}/video/2300-#{video_id}) }
|
9
|
+
|
10
|
+
it 'requests the right url' do
|
11
|
+
stub = stub_request(:get, video_path).to_return(body: '{ }')
|
12
|
+
client.video("#{video_id}")
|
13
|
+
expect(stub).to have_been_requested
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a Luchadeer::Object' do
|
17
|
+
stub_request(:get, video_path).to_return(body: '{ "results": { "key": "value"}}')
|
18
|
+
expect(client.video("#{video_id}")).to be_instance_of Luchadeer::Video
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'caches responses' do
|
22
|
+
stub_request(:get, video_path).to_return(body: '{ }')
|
23
|
+
expect(client).to receive :cache
|
24
|
+
client.video("#{video_id}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::API do
|
4
|
+
let(:client) { Luchadeer::Client.new }
|
5
|
+
let(:key) { 'Chie' }
|
6
|
+
let(:val) { 'Tomoe Gozen' }
|
7
|
+
|
8
|
+
describe '#cache' do
|
9
|
+
context 'when value exists for key' do
|
10
|
+
it 'returns the value for the given key' do
|
11
|
+
client.cache = { key => val }
|
12
|
+
expect(client.cache(key)).to eq val
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when value does not exist for key' do
|
17
|
+
context 'and no block is provided' do
|
18
|
+
it 'raises KeyError' do
|
19
|
+
expect { client.cache(key) }.to raise_error KeyError
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'and block is provided' do
|
24
|
+
it 'assigns the result of the block to the given key' do
|
25
|
+
client.cache(key) { val }
|
26
|
+
expect(client.cache(key)).to eq val
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when refresh is true' do
|
32
|
+
let(:new_val) { 'Suzuka Gongen' }
|
33
|
+
|
34
|
+
it 'assigns the result of the block to the given key' do
|
35
|
+
client.cache(key) { val }
|
36
|
+
client.cache(key, true) { new_val }
|
37
|
+
expect(client.cache(key)).to eq new_val
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'and no block is provided' do
|
41
|
+
it 'raises KeyError' do
|
42
|
+
expect { client.cache(key, true) }.to raise_error KeyError
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#fetch' do
|
48
|
+
it 'uses the cache' do
|
49
|
+
stub_request(:get, %r(http://www.giantbomb.com/api/game-3030/21373))
|
50
|
+
.to_return(body:'{ }')
|
51
|
+
|
52
|
+
client.should_receive :cache
|
53
|
+
client.fetch('game-3030/21373')
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with a single result' do
|
57
|
+
before :each do
|
58
|
+
stub_request(:get, %r(http://www.giantbomb.com/api/game-3030/21373))
|
59
|
+
.to_return(body:'{ "results": { "name": "Narukami" } }')
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'returns an object of the provided class' do
|
63
|
+
expect(client.fetch('game-3030/21373', false, Luchadeer::Game))
|
64
|
+
.to be_instance_of Luchadeer::Game
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'defaults to Luchadeer::Resource' do
|
68
|
+
expect(client.fetch('game-3030/21373')).to be_instance_of Luchadeer::Resource
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'with an array of results' do
|
73
|
+
before :each do
|
74
|
+
stub_request(:get, %r(http://www.giantbomb.com/api/game-3030/21373))
|
75
|
+
.to_return(body:'{ "results": [{ "name": "Narukami" }, { "name": "Hanamura"}] }')
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'returns an array' do
|
79
|
+
expect(client.fetch('game-3030/21373')).to be_instance_of Array
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'returns objects of the provided class' do
|
83
|
+
expect(client.fetch('game-3030/21373', false, Luchadeer::Game)[0])
|
84
|
+
.to be_instance_of Luchadeer::Game
|
85
|
+
expect(client.fetch('game-3030/21373', false, Luchadeer::Game)[1])
|
86
|
+
.to be_instance_of Luchadeer::Game
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'with no results' do
|
91
|
+
it 'returns nil' do
|
92
|
+
stub_request(:get, %r(http://www.giantbomb.com/api/game-3030/21373))
|
93
|
+
.to_return(body:'{ }')
|
94
|
+
|
95
|
+
expect(client.fetch('game-3030/21373')).to be_nil
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::Character do
|
4
|
+
|
5
|
+
it 'is a resource' do
|
6
|
+
expect(described_class.new).to be_a Luchadeer::Resource
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.find' do
|
10
|
+
let(:client) { Luchadeer::Client.new }
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
Luchadeer.client = client
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'forwards to Client#character with arguments' do
|
17
|
+
expect(client).to receive(:character).with(1, true)
|
18
|
+
described_class.find(1, true)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'forwards to Client#character with default refresh' do
|
22
|
+
expect(client).to receive(:character).with(1, false)
|
23
|
+
described_class.find(1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::Client do
|
4
|
+
let(:api_key) { 'luchadeer' }
|
5
|
+
let(:client) { described_class.new(api_key: api_key) }
|
6
|
+
|
7
|
+
describe '#initialize' do
|
8
|
+
it 'yields itself for configuration' do
|
9
|
+
expect { |b| described_class.new(&b) }.to yield_control.once
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#user_agent' do
|
14
|
+
it 'identifies the library' do
|
15
|
+
expect(client.user_agent).to eq "Luchadeer #{Luchadeer::VERSION}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#api_key?' do
|
20
|
+
context 'when API key is present' do
|
21
|
+
it 'returns true' do
|
22
|
+
client.api_key = 'key'
|
23
|
+
expect(client.api_key?).to be_true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when API key is not present' do
|
28
|
+
it 'returns false' do
|
29
|
+
client.api_key = ''
|
30
|
+
expect(client.api_key?).to be_false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#get' do
|
36
|
+
let(:url) { %r(http://laika.io) }
|
37
|
+
|
38
|
+
it 'makes a GET request' do
|
39
|
+
stub = stub_request(:get, url).to_return(body: '{ "asdf": "asdf" }')
|
40
|
+
client.get("http://laika.io")
|
41
|
+
|
42
|
+
expect(stub).to have_been_requested
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'adds default parameters' do
|
46
|
+
stub = stub_request(:get, url).with(format: 'json', api_key: api_key)
|
47
|
+
.to_return(body: '{ "asdf": "asdf" }')
|
48
|
+
|
49
|
+
client.get("http://laika.io")
|
50
|
+
expect(stub).to have_been_requested
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::Company do
|
4
|
+
|
5
|
+
it 'is a resource' do
|
6
|
+
expect(described_class.new).to be_a Luchadeer::Resource
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.find' do
|
10
|
+
let(:client) { Luchadeer::Client.new }
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
Luchadeer.client = client
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'forwards to Client#company with arguments' do
|
17
|
+
expect(client).to receive(:company).with(1, true)
|
18
|
+
described_class.find(1, true)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'forwards to Client#company with default refresh' do
|
22
|
+
expect(client).to receive(:company).with(1, false)
|
23
|
+
described_class.find(1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Luchadeer::Concept do
|
4
|
+
|
5
|
+
it 'is a resource' do
|
6
|
+
expect(described_class.new).to be_a Luchadeer::Resource
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.find' do
|
10
|
+
let(:client) { Luchadeer::Client.new }
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
Luchadeer.client = client
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'forwards to Client#concept with arguments' do
|
17
|
+
expect(client).to receive(:concept).with(1, true)
|
18
|
+
described_class.find(1, true)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'forwards to Client#concept with default refresh' do
|
22
|
+
expect(client).to receive(:concept).with(1, false)
|
23
|
+
described_class.find(1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|