thegamesdb 1.0.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91d3d0b45cd2e27b775840b9e21ca69ac31eff3425da1c20087cd92ff7185037
4
- data.tar.gz: d53c14fa8fdfca34ea4f0284712ad330a56cc3daa3b1a2657aec46a5387bd47c
3
+ metadata.gz: '09c223ffcdbfefc714627f7673aac31836b8d20f76f4aa51f5cdb583ed4aaef6'
4
+ data.tar.gz: 692abf6425da4f35d557fb3dba738b14584680822baf0d21dcf0ccd777045e44
5
5
  SHA512:
6
- metadata.gz: 8ae9f566ec2099c108e58b2aac390f20146990db555d8b5d1ffbb9ebd41336fef77102e8ea3124a870d092fbd431a5e788fc28890fc7437bc8c785f7c919e168
7
- data.tar.gz: 9d4ef8f0d6d96df24d61f7a1395689aa20d6c15aa986bf99395611c4796b1fa261571669e50b3e0d2725f370a2a717b33f0de45e25e42393ad87153edf12e74a
6
+ metadata.gz: a64df3a9904963cac3782dd221eca0e77ece3af43a08fc84e098dd21eb24abc1211dda4b49fec7fe50422117b102c8329df8ed4f8646c7da5bd3292e7ca6bfc3
7
+ data.tar.gz: a141723f13ae4fc5fcfc597fd27def6f2a79eaf9a32e0ad6ecab8c9705af14deea7960857443dae3c084e9bafaba27ad2212a8770292febf4cddc0e010f254c6
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.0
4
+ * Adds `page` parameter to `games_by_platform_id` and includes `boxart`.
5
+ * Adds all available fields from Platforms in `platforms`, updates tests. Changes `:slug` to `:alias` in platforms response, to map to same response from API.
6
+ * Refactored `json_response` to use `includes` and extra data from the API response.
7
+
8
+
3
9
  ## 1.0.0
4
10
 
5
11
  * Updated to new API endpoint, API key is now required to use the gem. Request an API Key here: https://forums.thegamesdb.net/viewforum.php?f=10
@@ -11,14 +11,15 @@ module Gamesdb
11
11
  # Method for listing platform's games
12
12
  # https://api.thegamesdb.net/#/operations/Games/GamesByPlatformID
13
13
  #
14
- # Parameters: platform id (int)
14
+ # Parameters: platform id (int), page (int)
15
15
  #
16
16
  # == Returns:
17
17
  # Array of Hashes with games info
18
18
  #
19
- def self.games_by_platform_id(platform_id)
19
+ def self.games_by_platform_id(platform_id, page = 1)
20
20
  url = 'Games/ByPlatformID'
21
- data = json_response(url, id: platform_id)
21
+ params = {id: platform_id, page: page, include: 'boxart'}
22
+ data = json_response(url, params)
22
23
  process_platform_games(data)
23
24
  end
24
25
 
@@ -32,14 +33,12 @@ module Gamesdb
32
33
  #
33
34
  def self.platforms
34
35
  url = 'Platforms'
35
- data = json_response(url)
36
- platforms = []
36
+ params = { fields: 'icon,console,controller,developer,manufacturer,media,cpu,memory,graphics,sound,maxcontrollers,display,overview,youtube' }
37
+ data = json_response(url, params)
37
38
 
38
- data['platforms'].each do |p|
39
- platform = p.last
40
- platforms << { name: platform['name'], id: platform['id'].to_i, slug: platform['alias'] }
39
+ data['data']['platforms'].map do |p|
40
+ symbolize_keys(p.last)
41
41
  end
42
- platforms
43
42
  end
44
43
 
45
44
  # This API feature returns a set of metadata and artwork data for a
@@ -60,7 +59,7 @@ module Gamesdb
60
59
  }
61
60
  data = json_response(url, params)
62
61
 
63
- response = data['platforms'].values.first
62
+ response = data['data']['platforms'].values.first
64
63
  symbolize_keys(response)
65
64
  end
66
65
 
@@ -82,8 +81,8 @@ module Gamesdb
82
81
  include: 'boxart,platform'
83
82
  }
84
83
  data = json_response(url, params)
85
- return [] if data["count"] == 0
86
- symbolize_keys(data['games'].first)
84
+ return [] if data['data']['count'] == 0
85
+ symbolize_keys(data['data']['games'].first)
87
86
  end
88
87
 
89
88
  # The GetGamesList API search returns a listing of games matched up
@@ -100,7 +99,7 @@ module Gamesdb
100
99
  def self.games_by_name(name)
101
100
  url = 'Games/ByGameName'
102
101
  data = json_response(url, name: name)
103
- data['games'].map { |game| symbolize_keys(game) }
102
+ data['data']['games'].map { |game| symbolize_keys(game) }
104
103
  end
105
104
 
106
105
  # This API feature returns a list of available artwork types and
@@ -120,14 +119,14 @@ module Gamesdb
120
119
  def self.game_images(id)
121
120
  url = 'Games/Images'
122
121
  data = json_response(url, games_id: id)
123
- return [] if data['count'] == 0
122
+ return [] if data['data']['count'] == 0
124
123
 
125
124
  response = {}
126
- response[:base_url] = data['base_url']['original']
127
- response[:logo] = process_logo(data, id)
128
- response[:boxart] = process_covers(data, id)
129
- response[:screenshot] = process_screenshots(data, id)
130
- response[:fanart] = process_fanart(data, id)
125
+ response[:base_url] = data['data']['base_url']['original']
126
+ response[:logo] = process_logo(data['data'], id)
127
+ response[:boxart] = process_covers(data['data'], id)
128
+ response[:screenshot] = process_screenshots(data['data'], id)
129
+ response[:fanart] = process_fanart(data['data'], id)
131
130
  response
132
131
  end
133
132
 
@@ -192,19 +191,23 @@ module Gamesdb
192
191
  uri.query = URI.encode_www_form(params)
193
192
  request = Net::HTTP.get_response(uri)
194
193
  response = JSON.parse(request.body)
195
- response['data']
194
+ response
196
195
  end
197
196
 
198
197
  # Process games for platform_games
199
198
  def self.process_platform_games(data)
200
199
  games = []
201
200
 
202
- data['games'].each do |elem|
201
+ data['data']['games'].each do |elem|
203
202
  name = elem['game_title']
204
203
  id = elem['id']
205
204
  date = elem['release_date']
206
205
  developers = elem['developers']
207
- games << { name: name, id: id, release_date: date, developers: developers }
206
+ if boxart = data.dig('include', 'boxart', 'data', id.to_s)
207
+ image = data['include']['boxart']['base_url']['original'] +
208
+ boxart.select { |a| a['side'] == 'front' }.first['filename'] || ''
209
+ end
210
+ games << { name: name, id: id, release_date: date, developers: developers, image: image }
208
211
  end
209
212
  games
210
213
  end
@@ -217,21 +220,6 @@ module Gamesdb
217
220
  game
218
221
  end
219
222
 
220
- # Method for processing the fan art and screenshots into a uniform
221
- # collection with url, width, height and thumb url
222
- def self.images_from_nodes(data)
223
- images = []
224
- data.each do |art|
225
- images << {
226
- url: art.original.nodes[0],
227
- width: art.nodes.first.attributes[:width],
228
- height: art.nodes.first.attributes[:height],
229
- thumb: art.thumb.text
230
- }
231
- end
232
- images
233
- end
234
-
235
223
  def self.symbolize_keys(hash)
236
224
  hash.keys.each do |key|
237
225
  hash[key.to_sym] = hash.delete(key)
@@ -1,4 +1,4 @@
1
1
  # Gem version
2
2
  module Gamesdb
3
- VERSION = '1.0.0'.freeze
3
+ VERSION = '1.1.0'.freeze
4
4
  end
@@ -8,6 +8,7 @@ describe 'GamesDB - platforms', :vcr do
8
8
 
9
9
  it 'should get gaming platforms' do
10
10
  @platforms.count.wont_be :<, 0
11
+ @platforms.count.must_equal 109
11
12
  end
12
13
 
13
14
  it 'should have a valid name' do
@@ -18,26 +19,50 @@ describe 'GamesDB - platforms', :vcr do
18
19
  @platforms[0][:id].must_be_kind_of Integer
19
20
  end
20
21
 
21
- it 'should have a valid slug' do
22
- @platforms[0][:slug].must_be_kind_of String
22
+ it 'should have a valid alias' do
23
+ @platforms[0][:alias].must_be_kind_of String
24
+ end
25
+
26
+ it 'should have valid fields for other stuff' do
27
+ nes = @platforms.select { |p| p[:id] == 7 }.first
28
+ nes[:icon].must_be_kind_of String
29
+ nes[:console].must_be_kind_of String
30
+ nes[:controller].must_be_kind_of String
31
+ nes[:developer].must_be_kind_of String
32
+ nes[:manufacturer].must_be_kind_of String
33
+ nes[:maxcontrollers].must_be_kind_of String
34
+ nes[:cpu].must_be_kind_of String
35
+ nes[:memory].must_be_kind_of String
36
+ nes[:sound].must_be_kind_of String
37
+ nes[:display].must_be_kind_of String
38
+ nes[:overview].must_be_kind_of String
23
39
  end
24
40
  end
25
41
 
26
42
  describe 'platform_games' do
27
43
  before do
28
44
  platforms = Gamesdb.platforms
29
- @games_by_id = Gamesdb.games_by_platform_id(platforms[0][:id])
45
+ @first_page = Gamesdb.games_by_platform_id(platforms[0][:id])
46
+ @second_page = Gamesdb.games_by_platform_id(platforms[0][:id], 2)
30
47
  end
31
48
 
32
49
  it 'should return games in platform by id' do
33
- @games_by_id.count.wont_be :<, 0
50
+ @first_page.count.wont_be :<, 0
51
+ @first_page.count.must_equal 20
34
52
  end
53
+
54
+ it 'should return games in the platform for the second page' do
55
+ @second_page.count.wont_be :<, 0
56
+ @second_page.count.must_equal 20
57
+ (@first_page & @second_page).must_equal []
58
+ end
59
+
35
60
  end
36
61
 
37
62
  describe 'platform' do
38
63
  describe 'assigning basic info' do
39
64
  before do
40
- @platform = Gamesdb.platform_by_id 6
65
+ @platform = Gamesdb.platform_by_id(6)
41
66
  end
42
67
 
43
68
  it 'should return valid platform info' do
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: 1.0.0
4
+ version: 1.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: 2019-09-01 00:00:00.000000000 Z
11
+ date: 2019-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -162,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
162
  - !ruby/object:Gem::Version
163
163
  version: '0'
164
164
  requirements: []
165
- rubygems_version: 3.0.3
165
+ rubygems_version: 3.0.6
166
166
  signing_key:
167
167
  specification_version: 4
168
168
  summary: Client for TheGamesDB API (thegamesdb.net).