luchadeer 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|