thegamesdb 2.0.0 → 2.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 +4 -4
- data/.github/workflows/{master.yml → main.yml} +3 -3
- data/.github/workflows/rubocop.yml +3 -3
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +7 -0
- data/lib/thegamesdb/error.rb +12 -0
- data/lib/thegamesdb/games.rb +6 -6
- data/lib/thegamesdb/platforms.rb +3 -3
- data/lib/thegamesdb/utils.rb +66 -0
- data/lib/thegamesdb/version.rb +1 -1
- data/lib/thegamesdb.rb +7 -55
- data/test/client_test.rb +10 -0
- data/test/developers_test.rb +1 -1
- data/test/games_test.rb +2 -2
- data/test/platform_test.rb +2 -2
- data/test/publishers_test.rb +1 -1
- data/thegamesdb.gemspec +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4dff06dfb7c9c5737a8f737a1dcf365cdd3c13ac9f7af2efef21d52548d91f2b
|
4
|
+
data.tar.gz: a6aa0de586fddb22974910bd6937a18e228209adc9555ee795e254e3bcbc6f84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d37e33b44631f031287f6047b79f15fa7d0c112ee1d021724693020e796e9936c2d5b95b2cf0933b4fe0092467bf4c19ca85ca10bf3196382213d6f2f7d21475
|
7
|
+
data.tar.gz: 154aebc525bdec5ae98b1209d42ad1edc1101f354c7a47607405870888d37fd18bc0303da4cb9053cc0ecd8aa02025b5102509d609e8c298859d5669a64f62e0
|
@@ -2,10 +2,10 @@ name: Tests
|
|
2
2
|
on:
|
3
3
|
push:
|
4
4
|
branches:
|
5
|
-
-
|
5
|
+
- main
|
6
6
|
pull_request:
|
7
7
|
branches:
|
8
|
-
-
|
8
|
+
- main
|
9
9
|
jobs:
|
10
10
|
build:
|
11
11
|
env:
|
@@ -14,7 +14,7 @@ jobs:
|
|
14
14
|
strategy:
|
15
15
|
fail-fast: false
|
16
16
|
matrix:
|
17
|
-
ruby: [ '
|
17
|
+
ruby: [ '3.0', '3.1', '3.2', 'jruby', 'truffleruby' ]
|
18
18
|
name: Ruby ${{ matrix.ruby }}
|
19
19
|
steps:
|
20
20
|
- uses: actions/checkout@v2
|
@@ -2,10 +2,10 @@ name: Rubocop
|
|
2
2
|
on:
|
3
3
|
push:
|
4
4
|
branches:
|
5
|
-
-
|
5
|
+
- main
|
6
6
|
pull_request:
|
7
7
|
branches:
|
8
|
-
-
|
8
|
+
- main
|
9
9
|
|
10
10
|
jobs:
|
11
11
|
build:
|
@@ -14,7 +14,7 @@ jobs:
|
|
14
14
|
- uses: actions/checkout@v2
|
15
15
|
- uses: ruby/setup-ruby@v1
|
16
16
|
with:
|
17
|
-
ruby-version:
|
17
|
+
ruby-version: 3.0
|
18
18
|
- run: |
|
19
19
|
bundle install
|
20
20
|
bundle exec rubocop
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 2.1.0
|
4
|
+
|
5
|
+
Now testing Ruby versions 3.0, 3.1, 3.2, JRuby and TruffleRuby.
|
6
|
+
|
7
|
+
- Added some better error handling. Now you can catch from `Gamesdb::Error` if there's any response from the server with status >= 300 (e.g. 403 for wrong API Key). I'll improve on this in future releases.
|
8
|
+
- Refactored main client class and extracted utilitary functions into `Gamesdb::Utils`.
|
9
|
+
|
3
10
|
## 2.0.0
|
4
11
|
|
5
12
|
Refactored code and functionality. The library was refactored in a way you need to instantiate a client with the API key to use it (more info in "Breaking changes"). 100% of the documented API is now supported and implemented.
|
data/lib/thegamesdb/games.rb
CHANGED
@@ -41,9 +41,9 @@ module Gamesdb
|
|
41
41
|
return [] if (data['data']['count']).zero?
|
42
42
|
|
43
43
|
games = data['data']['games']
|
44
|
-
return symbolize_keys(games.first) if games.count == 1
|
44
|
+
return Gamesdb::Utils.symbolize_keys(games.first) if games.count == 1
|
45
45
|
|
46
|
-
games.map { |game| symbolize_keys(game) }
|
46
|
+
games.map { |game| Gamesdb::Utils.symbolize_keys(game) }
|
47
47
|
end
|
48
48
|
# rubocop:enable Metrics/MethodLength
|
49
49
|
|
@@ -95,10 +95,10 @@ module Gamesdb
|
|
95
95
|
|
96
96
|
response = {}
|
97
97
|
response[:base_url] = data['data']['base_url']['original']
|
98
|
-
response[:logo] = process_logo(data['data'], id)
|
99
|
-
response[:boxart] = process_covers(data['data'], id)
|
100
|
-
response[:screenshot] = process_screenshots(data['data'], id)
|
101
|
-
response[:fanart] = process_fanart(data['data'], id)
|
98
|
+
response[:logo] = Gamesdb::Utils.process_logo(data['data'], id)
|
99
|
+
response[:boxart] = Gamesdb::Utils.process_covers(data['data'], id)
|
100
|
+
response[:screenshot] = Gamesdb::Utils.process_screenshots(data['data'], id)
|
101
|
+
response[:fanart] = Gamesdb::Utils.process_fanart(data['data'], id)
|
102
102
|
response
|
103
103
|
end
|
104
104
|
|
data/lib/thegamesdb/platforms.rb
CHANGED
@@ -17,7 +17,7 @@ module Gamesdb
|
|
17
17
|
data = perform_request(url, params)
|
18
18
|
|
19
19
|
data['data']['platforms'].map do |p|
|
20
|
-
symbolize_keys(p.last)
|
20
|
+
Gamesdb::Utils.symbolize_keys(p.last)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -93,9 +93,9 @@ module Gamesdb
|
|
93
93
|
|
94
94
|
response = case platforms
|
95
95
|
when Hash
|
96
|
-
platforms.map { |_k, platform| symbolize_keys(platform) }
|
96
|
+
platforms.map { |_k, platform| Gamesdb::Utils.symbolize_keys(platform) }
|
97
97
|
when Array
|
98
|
-
platforms.map { |platform| symbolize_keys(platform) }
|
98
|
+
platforms.map { |platform| Gamesdb::Utils.symbolize_keys(platform) }
|
99
99
|
end
|
100
100
|
|
101
101
|
return response.first if response.count == 1
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gamesdb
|
4
|
+
# Several reusable functions
|
5
|
+
module Utils
|
6
|
+
class << self
|
7
|
+
def process_logo(data, id)
|
8
|
+
logo = data['images'][id.to_s].select { |a| a['type'] == 'clearlogo' }
|
9
|
+
logo.empty? ? '' : logo.first['filename']
|
10
|
+
end
|
11
|
+
|
12
|
+
def process_fanart(data, id)
|
13
|
+
fanart = select_images(data, id, 'fanart')
|
14
|
+
return [] if fanart.empty?
|
15
|
+
|
16
|
+
fanart.map { |art| build_individual_fanart(art) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def process_covers(data, id)
|
20
|
+
covers = {}
|
21
|
+
boxart = select_images(data, id, 'boxart')
|
22
|
+
return [] if boxart.empty?
|
23
|
+
|
24
|
+
boxart.each do |art|
|
25
|
+
width, height = art['resolution'].split('x') unless art['resolution'].nil?
|
26
|
+
covers[art['side'].to_sym] = art_structure(art, width, height)
|
27
|
+
end
|
28
|
+
covers
|
29
|
+
end
|
30
|
+
|
31
|
+
def build_individual_fanart(art)
|
32
|
+
width, height = art['resolution'].split('x') unless art['resolution'].nil?
|
33
|
+
art_structure(art, width, height)
|
34
|
+
end
|
35
|
+
|
36
|
+
def art_structure(art, width, height)
|
37
|
+
{
|
38
|
+
url: art['filename'],
|
39
|
+
resolution: art['resolution'],
|
40
|
+
width: width,
|
41
|
+
height: height
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def process_screenshots(data, id)
|
46
|
+
select_images(data, id, 'screenshot').map do |b|
|
47
|
+
Gamesdb::Utils.symbolize_keys(b)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def select_images(data, id, image_type)
|
52
|
+
data['images'][id.to_s].select do |a|
|
53
|
+
a['type'] == image_type
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def symbolize_keys(hash)
|
58
|
+
new_hash = {}
|
59
|
+
hash.each_key do |key|
|
60
|
+
new_hash[key.to_sym] = hash.delete(key)
|
61
|
+
end
|
62
|
+
new_hash
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/thegamesdb/version.rb
CHANGED
data/lib/thegamesdb.rb
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'thegamesdb/version'
|
4
4
|
require 'thegamesdb/developers'
|
5
|
+
require 'thegamesdb/error'
|
5
6
|
require 'thegamesdb/games'
|
6
7
|
require 'thegamesdb/genres'
|
7
8
|
require 'thegamesdb/platforms'
|
8
9
|
require 'thegamesdb/publishers'
|
10
|
+
require 'thegamesdb/utils'
|
9
11
|
require 'net/http'
|
10
12
|
require 'json'
|
11
13
|
|
@@ -42,10 +44,11 @@ module Gamesdb
|
|
42
44
|
uri = URI(BASE_URL + url)
|
43
45
|
uri.query = URI.encode_www_form(params)
|
44
46
|
response = JSON.parse(Net::HTTP.get_response(uri).body)
|
47
|
+
http_error(response) if response['code'] >= 300
|
48
|
+
|
45
49
|
refresh_allowances(response)
|
46
50
|
response
|
47
51
|
rescue StandardError => e
|
48
|
-
# TODO: Handle errors
|
49
52
|
raise e
|
50
53
|
end
|
51
54
|
|
@@ -57,52 +60,9 @@ module Gamesdb
|
|
57
60
|
@allowance_refresh_timer = response['allowance_refresh_timer']
|
58
61
|
end
|
59
62
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
def process_fanart(data, id)
|
66
|
-
fanart = select_images(data, id, 'fanart')
|
67
|
-
return [] if fanart.empty?
|
68
|
-
|
69
|
-
fanart.map { |art| build_individual_fanart(art) }
|
70
|
-
end
|
71
|
-
|
72
|
-
def process_covers(data, id)
|
73
|
-
covers = {}
|
74
|
-
boxart = select_images(data, id, 'boxart')
|
75
|
-
return [] if boxart.empty?
|
76
|
-
|
77
|
-
boxart.each do |art|
|
78
|
-
width, height = art['resolution'].split('x') unless art['resolution'].nil?
|
79
|
-
covers[art['side'].to_sym] = art_structure(art, width, height)
|
80
|
-
end
|
81
|
-
covers
|
82
|
-
end
|
83
|
-
|
84
|
-
def build_individual_fanart(art)
|
85
|
-
width, height = art['resolution'].split('x') unless art['resolution'].nil?
|
86
|
-
art_structure(art, width, height)
|
87
|
-
end
|
88
|
-
|
89
|
-
def art_structure(art, width, height)
|
90
|
-
{
|
91
|
-
url: art['filename'],
|
92
|
-
resolution: art['resolution'],
|
93
|
-
width: width,
|
94
|
-
height: height
|
95
|
-
}
|
96
|
-
end
|
97
|
-
|
98
|
-
def process_screenshots(data, id)
|
99
|
-
select_images(data, id, 'screenshot').map { |b| symbolize_keys(b) }
|
100
|
-
end
|
101
|
-
|
102
|
-
def select_images(data, id, image_type)
|
103
|
-
data['images'][id.to_s].select do |a|
|
104
|
-
a['type'] == image_type
|
105
|
-
end
|
63
|
+
# TODO: More granular errors
|
64
|
+
def http_error(response)
|
65
|
+
raise Gamesdb::Error.new(response['code'], response['status'])
|
106
66
|
end
|
107
67
|
|
108
68
|
# Process games for platform_games
|
@@ -134,13 +94,5 @@ module Gamesdb
|
|
134
94
|
end
|
135
95
|
# rubocop:enable Metrics/AbcSize
|
136
96
|
# rubocop:enable Metrics/MethodLength
|
137
|
-
|
138
|
-
def symbolize_keys(hash)
|
139
|
-
new_hash = {}
|
140
|
-
hash.each_key do |key|
|
141
|
-
new_hash[key.to_sym] = hash.delete(key)
|
142
|
-
end
|
143
|
-
new_hash
|
144
|
-
end
|
145
97
|
end
|
146
98
|
end
|
data/test/client_test.rb
CHANGED
@@ -12,5 +12,15 @@ describe 'Gamesdb - client', :vcr do
|
|
12
12
|
client.games_by_id(1527)
|
13
13
|
expect(client.remaining_monthly_allowance).must_equal(monthly - 1)
|
14
14
|
end
|
15
|
+
|
16
|
+
describe 'errors' do
|
17
|
+
let(:client) { Gamesdb::Client.new('invalid_api_key') }
|
18
|
+
|
19
|
+
it 'should raise http error' do
|
20
|
+
assert_raises Gamesdb::Error do
|
21
|
+
client.games_by_id(1904)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
15
25
|
end
|
16
26
|
end
|
data/test/developers_test.rb
CHANGED
@@ -9,7 +9,7 @@ describe 'Gamesdb - developers', :vcr do
|
|
9
9
|
it 'should return the developers' do
|
10
10
|
@developers = client.developers
|
11
11
|
|
12
|
-
expect(@developers.count)
|
12
|
+
expect(@developers.count.positive?)
|
13
13
|
expect(@developers.first.keys).must_equal(['id', 'name'])
|
14
14
|
end
|
15
15
|
end
|
data/test/games_test.rb
CHANGED
@@ -137,7 +137,7 @@ describe 'Gamesdb - games', :vcr do
|
|
137
137
|
{
|
138
138
|
'edit_id' => 2,
|
139
139
|
'game_id' => 38_113,
|
140
|
-
'timestamp' => '2018-06-28
|
140
|
+
'timestamp' => '2018-06-28 15:20:54',
|
141
141
|
'type' => 'boxart',
|
142
142
|
'value' => 'boxart/front/38113-1.jpg'
|
143
143
|
}
|
@@ -146,7 +146,7 @@ describe 'Gamesdb - games', :vcr do
|
|
146
146
|
{
|
147
147
|
'edit_id' => 101,
|
148
148
|
'game_id' => 22_208,
|
149
|
-
'timestamp' => '2018-06-29
|
149
|
+
'timestamp' => '2018-06-29 01:36:38',
|
150
150
|
'type' => 'rating',
|
151
151
|
'value' => 'E - Everyone'
|
152
152
|
}
|
data/test/platform_test.rb
CHANGED
@@ -12,7 +12,7 @@ describe 'GamesDB - platforms', :vcr do
|
|
12
12
|
|
13
13
|
it 'should get gaming platforms' do
|
14
14
|
expect(@platforms.count).wont_be :<, 0
|
15
|
-
expect(@platforms.count).must_equal
|
15
|
+
expect(@platforms.count).must_equal 147
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should have a valid name' do
|
@@ -71,7 +71,7 @@ describe 'GamesDB - platforms', :vcr do
|
|
71
71
|
|
72
72
|
it 'supports comma separated list' do
|
73
73
|
expect(@games1.count).must_equal 20
|
74
|
-
expect(@games2.count).must_equal
|
74
|
+
expect(@games2.count).must_equal 20
|
75
75
|
expect(@games3.count).must_equal 20
|
76
76
|
|
77
77
|
expect(@games3 - @games1).must_equal @games2
|
data/test/publishers_test.rb
CHANGED
@@ -9,7 +9,7 @@ describe 'GamesDB - Publishers', :vcr do
|
|
9
9
|
it 'should return publishers' do
|
10
10
|
publishers = client.publishers
|
11
11
|
|
12
|
-
expect(publishers.count)
|
12
|
+
expect(publishers.count.positive?)
|
13
13
|
expect(publishers.first.keys).must_equal(['id', 'name'])
|
14
14
|
end
|
15
15
|
end
|
data/thegamesdb.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
21
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
22
22
|
spec.require_paths = ['lib']
|
23
|
-
spec.required_ruby_version = '> 2.
|
23
|
+
spec.required_ruby_version = '> 2.7.0'
|
24
24
|
spec.add_development_dependency 'bundler'
|
25
25
|
spec.add_development_dependency 'byebug' unless defined?(JRUBY_VERSION)
|
26
26
|
spec.add_development_dependency 'minitest-reporters'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thegamesdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fernando Briano
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -129,7 +129,7 @@ executables: []
|
|
129
129
|
extensions: []
|
130
130
|
extra_rdoc_files: []
|
131
131
|
files:
|
132
|
-
- ".github/workflows/
|
132
|
+
- ".github/workflows/main.yml"
|
133
133
|
- ".github/workflows/rubocop.yml"
|
134
134
|
- ".gitignore"
|
135
135
|
- ".rubocop.yml"
|
@@ -140,11 +140,13 @@ files:
|
|
140
140
|
- Rakefile
|
141
141
|
- lib/thegamesdb.rb
|
142
142
|
- lib/thegamesdb/developers.rb
|
143
|
+
- lib/thegamesdb/error.rb
|
143
144
|
- lib/thegamesdb/games.rb
|
144
145
|
- lib/thegamesdb/genres.rb
|
145
146
|
- lib/thegamesdb/images.rb
|
146
147
|
- lib/thegamesdb/platforms.rb
|
147
148
|
- lib/thegamesdb/publishers.rb
|
149
|
+
- lib/thegamesdb/utils.rb
|
148
150
|
- lib/thegamesdb/version.rb
|
149
151
|
- test/client_test.rb
|
150
152
|
- test/developers_test.rb
|
@@ -171,14 +173,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
171
173
|
requirements:
|
172
174
|
- - ">"
|
173
175
|
- !ruby/object:Gem::Version
|
174
|
-
version: 2.
|
176
|
+
version: 2.7.0
|
175
177
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
178
|
requirements:
|
177
179
|
- - ">="
|
178
180
|
- !ruby/object:Gem::Version
|
179
181
|
version: '0'
|
180
182
|
requirements: []
|
181
|
-
rubygems_version: 3.
|
183
|
+
rubygems_version: 3.3.7
|
182
184
|
signing_key:
|
183
185
|
specification_version: 4
|
184
186
|
summary: Client for TheGamesDB API (thegamesdb.net).
|