luchadeer 0.3.1 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b22250f9c3271c62347190dfd92e2e7789e39943
4
- data.tar.gz: de1419a049fc0cea1271c07f1d050edd936ca0fc
2
+ SHA256:
3
+ metadata.gz: f24bbcc0abbc0e797271da9f9cd00f0d1f6aa3b6119f1e663c59d1240885031f
4
+ data.tar.gz: c1a173ec9966a10fcff77ec484e9173323047c68fcd39986c3e45b3b9c8f0aab
5
5
  SHA512:
6
- metadata.gz: cfefb61e51e347137953212ad823fb70875e049f8e07f44c5ed10e93a3a93f8a6162702aaf56f2839774c3c10d174ee11e59c78ea63bd64d70668c893c32aa22
7
- data.tar.gz: 982ec4afd6c622a9868af1b05c8cc56b6f59ca15f4ebf62b27a21817063bdecb441aae48ed1e80e1c5b568a283546dfb615aea7160688c2ae05986c478a7fdea
6
+ metadata.gz: 1586bd13f33b1bd9888c4130fec1f32d3cceef388909855ac2f0ba8c51560c58e36aca96b925264824f40f1135cd96bb3ac97dadf48440700258c8a58ab19209
7
+ data.tar.gz: 810e8eecb979e6d1741c4c9e3b1e59fb47cd0ff0010108159a6aa8395e02181ca43d23317232cf3fb5a3625e3aaaa38d0149554e21a4657168d7dd222ac29274
data/.gitignore CHANGED
@@ -12,6 +12,7 @@ test/tmp
12
12
  test/version_tmp
13
13
  tmp
14
14
  .DS_Store
15
+ Gemfile.lock
15
16
 
16
17
  # YARD artifacts
17
18
  .yardoc
@@ -0,0 +1 @@
1
+ 2.1.1
@@ -1,9 +1,9 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 1.9.3
5
- - 2.0.0
6
- - 2.1.0
7
- - 2.1.1
4
+ - 2.2.10
5
+ - 2.3.7
6
+ - 2.4.4
7
+ - 2.5.1
8
8
 
9
9
  script: bundle exec rspec
@@ -9,24 +9,17 @@ require 'luchadeer/middleware/parse_api_error'
9
9
 
10
10
  module Luchadeer
11
11
  class Client
12
+ GIANT_BOMB = 'http://www.giantbomb.com/api'
13
+
12
14
  include Luchadeer::API
13
15
 
14
16
  attr_accessor :api_key
15
- GIANT_BOMB = 'http://www.giantbomb.com/api'
16
17
 
17
18
  def initialize(opts = {})
18
19
  @api_key = opts[:api_key] if opts[:api_key]
19
20
  yield self if block_given?
20
21
  end
21
22
 
22
- def user_agent
23
- "Luchadeer #{Luchadeer::VERSION}"
24
- end
25
-
26
- def api_key?
27
- not (api_key.nil? || api_key == '')
28
- end
29
-
30
23
  def get(path, params = {})
31
24
  request(:get, path, params)
32
25
  end
@@ -34,28 +27,18 @@ module Luchadeer
34
27
  private
35
28
 
36
29
  def connection
37
- @_connection ||= Faraday.new(GIANT_BOMB, connection_options)
38
- end
30
+ @_connection ||= Faraday.new(GIANT_BOMB, headers: headers) do |f|
31
+ f.response :parse_api_error
32
+ f.response :parse_json
33
+ f.response :parse_http_error
34
+ f.response :follow_redirects
39
35
 
40
- def connection_options
41
- {
42
- builder: middleware,
43
- headers: {
44
- accept: 'application/json',
45
- user_agent: user_agent,
46
- }
47
- }
36
+ f.adapter :net_http
37
+ end
48
38
  end
49
39
 
50
- def middleware
51
- Faraday::RackBuilder.new do |builder| # order is important
52
- builder.response :parse_api_error
53
- builder.response :parse_json
54
- builder.response :parse_http_error
55
- builder.response :follow_redirects
56
-
57
- builder.adapter :net_http
58
- end
40
+ def headers
41
+ { accept: 'application/json', user_agent: "Luchadeer v#{Luchadeer::VERSION}" }
59
42
  end
60
43
 
61
44
  def request(method, path, params = {})
@@ -21,7 +21,7 @@ module Luchadeer
21
21
  if follow_redirect?(env, response)
22
22
  raise Luchadeer::Error::RedirectLimitReached, response if follows.zero?
23
23
 
24
- env = update_env(env, request_body, response)
24
+ env = update_env(env, request_body, response)
25
25
  response = follow_redirect(env, follows - 1)
26
26
  end
27
27
  end
@@ -1,3 +1,3 @@
1
1
  module Luchadeer
2
- VERSION = '0.3.1'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ['lib']
19
19
 
20
- spec.add_dependency 'faraday', '~> 0.9.0'
20
+ spec.add_dependency 'faraday', '~> 0.10'
21
21
 
22
22
  spec.add_development_dependency 'bundler', '~> 1.5'
23
23
  spec.add_development_dependency 'rake'
@@ -10,41 +10,21 @@ describe Luchadeer::Client do
10
10
  end
11
11
  end
12
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
13
  describe '#get' do
36
14
  let(:url) { %r(http://laika.io) }
15
+ let(:empty_body) { '{ }' }
37
16
 
38
17
  it 'makes a GET request' do
39
- stub = stub_request(:get, url).to_return(body: '{ "asdf": "asdf" }')
18
+ stub = stub_request(:get, url).to_return(body: empty_body)
40
19
  client.get("http://laika.io")
41
20
 
42
21
  expect(stub).to have_been_requested
43
22
  end
44
23
 
45
24
  it 'adds default parameters' do
46
- stub = stub_request(:get, url).with(format: 'json', api_key: api_key)
47
- .to_return(body: '{ "asdf": "asdf" }')
25
+ stub = stub_request(:get, url)
26
+ .with(query: { format: 'json', api_key: api_key })
27
+ .to_return(body: empty_body)
48
28
 
49
29
  client.get("http://laika.io")
50
30
  expect(stub).to have_been_requested
@@ -56,4 +36,23 @@ describe Luchadeer::Client do
56
36
  end
57
37
  end
58
38
 
39
+ describe '#connection' do
40
+ describe 'user agent header' do
41
+ it 'identifies the library' do
42
+ expect(client.send(:connection).headers[:user_agent]).to eq "Luchadeer v#{Luchadeer::VERSION}"
43
+ end
44
+ end
45
+
46
+ describe 'middleware stack' do
47
+ it 'includes all custom middleware and the Net::HTTP adapter' do
48
+ expect(client.send(:connection).builder.handlers).to include \
49
+ Luchadeer::Middleware::ParseAPIError,
50
+ Luchadeer::Middleware::ParseJSON,
51
+ Luchadeer::Middleware::ParseHTTPError,
52
+ Luchadeer::Middleware::FollowRedirects,
53
+ Faraday::Adapter::NetHttp
54
+ end
55
+ end
56
+ end
57
+
59
58
  end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Luchadeer::Middleware::FollowRedirects do
4
+ let(:response) { 'yay!' }
5
+
6
+ # adapted from:
7
+ # https://github.com/lostisland/faraday_middleware/blob/5a19d04a77650405a97ea0abc6152d23134b624e/spec/follow_redirects_spec.rb
8
+ [301, 302, 303, 307].each do |status|
9
+ it "follows redirects for responses with status #{status}" do
10
+ connection = Faraday.new do |f|
11
+ f.use described_class
12
+ f.adapter :test do |stub|
13
+ stub.get('/redirect') { [status, { 'Location' => '/found' }, ''] }
14
+ stub.get('/found') { [200, { 'Content-Type' => 'text/plain' }, response] }
15
+ end
16
+ end
17
+
18
+ expect(connection.get('/redirect').body).to eq response
19
+ end
20
+ end
21
+
22
+ it 'raises a RedirectLimitReached after three redirects' do
23
+ connection = Faraday.new do |f|
24
+ f.use described_class
25
+ f.adapter :test do |stub|
26
+ stub.get('/') { [301, {'Location' => '/redirect'}, ''] }
27
+ stub.get('/redirect') { [301, {'Location' => '/redirect2'}, ''] }
28
+ stub.get('/redirect2') { [301, {'Location' => '/redirect3'}, ''] }
29
+ stub.get('/redirect3') { [301, {'Location' => '/found'}, ''] }
30
+ stub.get('/found') { [200, {'Content-Type' => 'text/plain'}, 'fin'] }
31
+ end
32
+ end
33
+
34
+ expect { connection.get('/') }.to raise_error(Luchadeer::Error::RedirectLimitReached)
35
+ end
36
+
37
+ end
@@ -55,7 +55,7 @@ describe Luchadeer::Resource do
55
55
 
56
56
  it 'fetches details and returns the new object' do
57
57
  stub_request(:get, %r(#{url})).to_return(body: '{ "results": { "detailed?": true } }')
58
- expect(resource.detail.detailed?).to be_true
58
+ expect(resource.detail.detailed?).to be true
59
59
  end
60
60
  end
61
61
 
@@ -174,15 +174,15 @@ describe Luchadeer::Search do
174
174
  search
175
175
  end
176
176
 
177
- its([0]) { should be_instance_of Luchadeer::Character }
178
- its([1]) { should be_instance_of Luchadeer::Company }
179
- its([2]) { should be_instance_of Luchadeer::Concept }
180
- its([3]) { should be_instance_of Luchadeer::Franchise }
181
- its([4]) { should be_instance_of Luchadeer::Game }
182
- its([5]) { should be_instance_of Luchadeer::Location }
183
- its([6]) { should be_instance_of Luchadeer::Object }
184
- its([7]) { should be_instance_of Luchadeer::Person }
185
- its([8]) { should be_instance_of Luchadeer::Video }
177
+ it { expect(subject[0]).to be_instance_of Luchadeer::Character }
178
+ it { expect(subject[1]).to be_instance_of Luchadeer::Company }
179
+ it { expect(subject[2]).to be_instance_of Luchadeer::Concept }
180
+ it { expect(subject[3]).to be_instance_of Luchadeer::Franchise }
181
+ it { expect(subject[4]).to be_instance_of Luchadeer::Game }
182
+ it { expect(subject[5]).to be_instance_of Luchadeer::Location }
183
+ it { expect(subject[6]).to be_instance_of Luchadeer::Object }
184
+ it { expect(subject[7]).to be_instance_of Luchadeer::Person }
185
+ it { expect(subject[8]).to be_instance_of Luchadeer::Video }
186
186
  end
187
187
 
188
188
  context 'when the resource type isn\'t mapped' do
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.3.1
4
+ version: 0.4.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-03-02 00:00:00.000000000 Z
11
+ date: 2018-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.0
19
+ version: '0.10'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.0
26
+ version: '0.10'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -103,9 +103,9 @@ extra_rdoc_files: []
103
103
  files:
104
104
  - ".gitignore"
105
105
  - ".rspec"
106
+ - ".ruby-version"
106
107
  - ".travis.yml"
107
108
  - Gemfile
108
- - Gemfile.lock
109
109
  - LICENSE
110
110
  - README.md
111
111
  - Rakefile
@@ -125,6 +125,7 @@ files:
125
125
  - spec/luchadeer/api_spec.rb
126
126
  - spec/luchadeer/client_spec.rb
127
127
  - spec/luchadeer/error_spec.rb
128
+ - spec/luchadeer/middleware/follow_redirects_spec.rb
128
129
  - spec/luchadeer/resource_spec.rb
129
130
  - spec/luchadeer/resources_spec.rb
130
131
  - spec/luchadeer/search_spec.rb
@@ -152,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
153
  version: '0'
153
154
  requirements: []
154
155
  rubyforge_project:
155
- rubygems_version: 2.2.2
156
+ rubygems_version: 2.7.6
156
157
  signing_key:
157
158
  specification_version: 4
158
159
  summary: The bombingest Giant Bomb API client library for Ruby.
@@ -160,6 +161,7 @@ test_files:
160
161
  - spec/luchadeer/api_spec.rb
161
162
  - spec/luchadeer/client_spec.rb
162
163
  - spec/luchadeer/error_spec.rb
164
+ - spec/luchadeer/middleware/follow_redirects_spec.rb
163
165
  - spec/luchadeer/resource_spec.rb
164
166
  - spec/luchadeer/resources_spec.rb
165
167
  - spec/luchadeer/search_spec.rb
@@ -167,4 +169,3 @@ test_files:
167
169
  - spec/spec_helper.rb
168
170
  - spec/support/shared_resource.rb
169
171
  - spec/support/shared_searchable.rb
170
- has_rdoc:
@@ -1,60 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- luchadeer (0.3.1)
5
- faraday (~> 0.9.0)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- addressable (2.3.5)
11
- coveralls (0.7.0)
12
- multi_json (~> 1.3)
13
- rest-client
14
- simplecov (>= 0.7)
15
- term-ansicolor
16
- thor
17
- crack (0.4.2)
18
- safe_yaml (~> 1.0.0)
19
- diff-lcs (1.2.5)
20
- docile (1.1.3)
21
- faraday (0.9.0)
22
- multipart-post (>= 1.2, < 3)
23
- mime-types (2.1)
24
- multi_json (1.8.4)
25
- multipart-post (2.0.0)
26
- rake (10.1.1)
27
- rest-client (1.6.7)
28
- mime-types (>= 1.16)
29
- rspec (2.14.1)
30
- rspec-core (~> 2.14.0)
31
- rspec-expectations (~> 2.14.0)
32
- rspec-mocks (~> 2.14.0)
33
- rspec-core (2.14.7)
34
- rspec-expectations (2.14.5)
35
- diff-lcs (>= 1.1.3, < 2.0)
36
- rspec-mocks (2.14.5)
37
- safe_yaml (1.0.1)
38
- simplecov (0.8.2)
39
- docile (~> 1.1.0)
40
- multi_json
41
- simplecov-html (~> 0.8.0)
42
- simplecov-html (0.8.0)
43
- term-ansicolor (1.3.0)
44
- tins (~> 1.0)
45
- thor (0.18.1)
46
- tins (1.0.0)
47
- webmock (1.17.2)
48
- addressable (>= 2.2.7)
49
- crack (>= 0.3.2)
50
-
51
- PLATFORMS
52
- ruby
53
-
54
- DEPENDENCIES
55
- bundler (~> 1.5)
56
- coveralls
57
- luchadeer!
58
- rake
59
- rspec
60
- webmock