gogcom 0.0.21 → 0.0.22
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/README.md +1 -1
- data/Rakefile +3 -1
- data/lib/gogcom.rb +11 -2
- data/lib/gogcom/func.rb +8 -0
- data/lib/gogcom/game.rb +118 -2
- data/lib/gogcom/review.rb +4 -2
- data/lib/gogcom/version.rb +2 -2
- data/test/helper.rb +8 -1
- data/test/test_func.rb +7 -0
- data/test/test_game.rb +68 -0
- data/test/test_gogcom.rb +5 -62
- metadata +22 -18
- data/lib/gogcom/gogcom.rb +0 -84
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 564984945b4cc083fdbae86e8c3e7c269e77b4dd
|
4
|
+
data.tar.gz: 682e889b6a8120ed92ad097417611d8228acdc33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c171a490c1765bc723023320012996f81147e0852e63e0433cbb26b92de6726484a305aaded8d43ea5fab96520afc0d0132248200f5e13a4cd31c8d16ddddc4
|
7
|
+
data.tar.gz: 2f64a3db71ee98eb52ef91ccd04b83873f6f1096942acf9d80cd144848f63bf852a1cc958329f029a113d4eb336d04f5b905f4aced9e0d75460f490d95afda2e
|
data/README.md
CHANGED
data/Rakefile
CHANGED
data/lib/gogcom.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
|
+
module Gogcom
|
2
|
+
class << self
|
3
|
+
def game(name)
|
4
|
+
Gogcom::Game.get(name)
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
1
9
|
require 'open-uri'
|
2
10
|
require 'nokogiri'
|
3
11
|
require 'json'
|
4
12
|
|
5
|
-
require 'gogcom/
|
6
|
-
require 'gogcom/game'
|
13
|
+
require 'gogcom/func'
|
7
14
|
require 'gogcom/review'
|
15
|
+
require 'gogcom/game'
|
16
|
+
require 'gogcom/version'
|
data/lib/gogcom/func.rb
ADDED
data/lib/gogcom/game.rb
CHANGED
@@ -1,5 +1,121 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Gogcom
|
2
|
+
class Game
|
3
|
+
attr_accessor :title, :genres, :download_size, :release_date, :price, :avg_rating,
|
3
4
|
:avg_ratings_count, :platforms, :languages, :developer, :publisher,
|
4
5
|
:game_modes, :reviews
|
6
|
+
|
7
|
+
def self.get_data(game_name)
|
8
|
+
name = Gogcom::Func.urlfy(game_name)
|
9
|
+
page = Nokogiri::HTML(open("http://www.gog.com/game/" + name))
|
10
|
+
data = JSON.parse(page.css('script')[0].text.gsub(/^\s+|\s+$/, "")
|
11
|
+
.gsub("var gogData = ", "")[0..-2])
|
12
|
+
data
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.get_title(data)
|
16
|
+
data["gameProductData"]["title"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.get_genres(data)
|
20
|
+
genres = []
|
21
|
+
genres_raw = data["gameProductData"]["genres"]
|
22
|
+
genres_raw.each do |genre|
|
23
|
+
genres.push(genre["name"])
|
24
|
+
end
|
25
|
+
|
26
|
+
genres
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.get_download_size(data)
|
30
|
+
data["gameProductData"]["downloadSize"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.get_release_date(data)
|
34
|
+
data["gameProductData"]["releaseDate"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.get_price(data)
|
38
|
+
data["gameProductData"]["price"]["symbol"] + data["gameProductData"]["price"]["amount"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.get_avg_rating(data)
|
42
|
+
data["gameProductData"]["rating"].to_s.insert(1, ".")
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.get_avg_ratings_count(data)
|
46
|
+
data["gameProductData"]["votesCount"]
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.get_platforms(data)
|
50
|
+
platforms = []
|
51
|
+
platforms_raw = data["gameProductData"]["worksOn"]
|
52
|
+
platforms_raw.each do |platform|
|
53
|
+
if(platform[1])
|
54
|
+
platforms.push(platform[0])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
platforms
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.get_languages(data)
|
62
|
+
data["gameProductData"]["languages"]
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.get_developer(data)
|
66
|
+
data["gameProductData"]["developer"]["name"]
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.get_publisher(data)
|
70
|
+
data["gameProductData"]["publisher"]["name"]
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.get_modes(data)
|
74
|
+
game_modes = []
|
75
|
+
modes_raw = data["gameProductData"]["modes"]
|
76
|
+
modes_raw.each do |mode|
|
77
|
+
game_modes.push(mode["title"])
|
78
|
+
end
|
79
|
+
|
80
|
+
game_modes
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.get_reviews(data)
|
84
|
+
reviews = []
|
85
|
+
reviews_raw = data["reviews"]["pages"][0]
|
86
|
+
reviews_raw.each do |review|
|
87
|
+
r = Review.new
|
88
|
+
|
89
|
+
r.title = review["title"]
|
90
|
+
r.rating = review["rating"].to_s.insert(1, ".")
|
91
|
+
r.author = review["author"]["name"]
|
92
|
+
r.body = review["description"]
|
93
|
+
|
94
|
+
reviews.push(r)
|
95
|
+
end
|
96
|
+
|
97
|
+
reviews
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.get(game_name)
|
101
|
+
data = self.get_data(game_name)
|
102
|
+
game = Game.new
|
103
|
+
|
104
|
+
game.title = get_title(data)
|
105
|
+
game.genres = get_genres(data)
|
106
|
+
game.download_size = get_download_size(data)
|
107
|
+
game.release_date = get_release_date(data)
|
108
|
+
game.price = get_price(data)
|
109
|
+
game.avg_rating = get_avg_rating(data)
|
110
|
+
game.avg_ratings_count = get_avg_ratings_count(data)
|
111
|
+
game.platforms = get_platforms(data)
|
112
|
+
game.languages = get_languages(data)
|
113
|
+
game.developer = get_developer(data)
|
114
|
+
game.publisher = get_publisher(data)
|
115
|
+
game.game_modes = get_modes(data)
|
116
|
+
game.reviews = get_reviews(data)
|
117
|
+
|
118
|
+
game
|
119
|
+
end
|
120
|
+
end
|
5
121
|
end
|
data/lib/gogcom/review.rb
CHANGED
data/lib/gogcom/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module
|
2
|
-
|
1
|
+
module Gogcom
|
2
|
+
VERSION = "0.0.22"
|
3
3
|
end
|
data/test/helper.rb
CHANGED
data/test/test_func.rb
ADDED
data/test/test_game.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class GogcomTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@data = Gogcom::Game.get_data("Faster Than Light")
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_get_data
|
9
|
+
assert @data.is_a?(Hash)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_get_title
|
13
|
+
assert_equal Gogcom::Game.get_title(@data), "FTL: Advanced Edition"
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_get_genres
|
17
|
+
assert_equal Gogcom::Game.get_genres(@data), ["Strategy", "Simulation", "Sci-fi"]
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_download_size
|
21
|
+
assert_equal Gogcom::Game.get_download_size(@data), "205 MB"
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_release_date
|
25
|
+
assert_equal Gogcom::Game.get_release_date(@data), 1347595200
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_price
|
29
|
+
assert_match /^\$\d+(\.\d{2})?$/, Gogcom::Game.get_price(@data)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_avg_ratings
|
33
|
+
assert_match /\d.\d/, Gogcom::Game.get_avg_rating(@data).to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_avg_ratings_count
|
37
|
+
assert_kind_of Integer, Gogcom::Game.get_avg_ratings_count(@data)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_platforms
|
41
|
+
assert_equal Gogcom::Game.get_platforms(@data), ["Windows", "Mac"]
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_languages
|
45
|
+
assert_equal Gogcom::Game.get_languages(@data), ["English"]
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_developer
|
49
|
+
assert_equal Gogcom::Game.get_developer(@data), "Subset Games"
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_publisher
|
53
|
+
assert_equal Gogcom::Game.get_publisher(@data), "Subset Games"
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_modes
|
57
|
+
assert_equal Gogcom::Game.get_modes(@data), ["Single-player"]
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_reviews
|
61
|
+
assert Gogcom::Game.get_reviews(@data).is_a?(Array)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_get
|
65
|
+
game = Gogcom::Game.get("Spelunky")
|
66
|
+
assert_kind_of Object, game
|
67
|
+
end
|
68
|
+
end
|
data/test/test_gogcom.rb
CHANGED
@@ -1,63 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@game = Gogcom.game("Faster Than Light")
|
8
|
-
end
|
9
|
-
|
10
|
-
# Game
|
11
|
-
def test_that_game_has_title
|
12
|
-
assert_equal "FTL: Advanced Edition", @game.title
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_that_game_has_genres
|
16
|
-
assert_equal ["Strategy", "Simulation", "Sci-fi"], @game.genres
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_that_game_has_download_size
|
20
|
-
assert_equal "205 MB", @game.download_size
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_that_game_has_release_date
|
24
|
-
assert_equal 1347595200, @game.release_date
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_that_game_has_price
|
28
|
-
assert_match /^\$\d+(\.\d{2})?$/, @game.price
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_that_game_has_avg_rating
|
32
|
-
assert_match /\d.\d/, @game.avg_rating.to_s
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_that_game_has_avg_ratings_number
|
36
|
-
assert_kind_of Integer, @game.avg_ratings_count
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_that_game_has_platforms
|
40
|
-
assert_equal ["Windows", "Mac"], @game.platforms
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_that_game_has_languages
|
44
|
-
assert_equal ["English"], @game.languages
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_that_game_has_developer
|
48
|
-
assert_equal "Subset Games", @game.developer
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_that_game_has_publisher
|
52
|
-
assert_equal "Subset Games", @game.publisher
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_that_game_has_game_modes
|
56
|
-
assert_equal ["Single-player"], @game.game_modes
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_that_game_has_reviews
|
60
|
-
assert !@game.reviews.empty?, "Reviews array is empty"
|
61
|
-
end
|
62
|
-
|
1
|
+
class GogcomTest < Minitest::Test
|
2
|
+
def test_game
|
3
|
+
game = Gogcom.game("Spelunky")
|
4
|
+
assert_kind_of Object, game
|
5
|
+
end
|
63
6
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gogcom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rolandas Barysas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|
@@ -30,6 +30,20 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 0.7.1
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '10.3'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '10.3'
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: minitest
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -37,9 +51,6 @@ dependencies:
|
|
37
51
|
- - "~>"
|
38
52
|
- !ruby/object:Gem::Version
|
39
53
|
version: '5.4'
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 5.4.1
|
43
54
|
type: :development
|
44
55
|
prerelease: false
|
45
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -47,29 +58,20 @@ dependencies:
|
|
47
58
|
- - "~>"
|
48
59
|
- !ruby/object:Gem::Version
|
49
60
|
version: '5.4'
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 5.4.1
|
53
61
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
62
|
+
name: simplecov
|
55
63
|
requirement: !ruby/object:Gem::Requirement
|
56
64
|
requirements:
|
57
65
|
- - "~>"
|
58
66
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 10.3.2
|
67
|
+
version: '0.9'
|
63
68
|
type: :development
|
64
69
|
prerelease: false
|
65
70
|
version_requirements: !ruby/object:Gem::Requirement
|
66
71
|
requirements:
|
67
72
|
- - "~>"
|
68
73
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 10.3.2
|
74
|
+
version: '0.9'
|
73
75
|
- !ruby/object:Gem::Dependency
|
74
76
|
name: nokogiri
|
75
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,11 +123,13 @@ files:
|
|
121
123
|
- README.md
|
122
124
|
- Rakefile
|
123
125
|
- lib/gogcom.rb
|
126
|
+
- lib/gogcom/func.rb
|
124
127
|
- lib/gogcom/game.rb
|
125
|
-
- lib/gogcom/gogcom.rb
|
126
128
|
- lib/gogcom/review.rb
|
127
129
|
- lib/gogcom/version.rb
|
128
130
|
- test/helper.rb
|
131
|
+
- test/test_func.rb
|
132
|
+
- test/test_game.rb
|
129
133
|
- test/test_gogcom.rb
|
130
134
|
homepage: http://rubygems.org/gems/gogcom
|
131
135
|
licenses:
|
data/lib/gogcom/gogcom.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
class Gogcom
|
2
|
-
|
3
|
-
GOG_GAME_BASE_URL = "http://www.gog.com/game/"
|
4
|
-
|
5
|
-
def self.game(name)
|
6
|
-
name = urlfy_name(name)
|
7
|
-
page = Nokogiri::HTML(open(GOG_GAME_BASE_URL + name))
|
8
|
-
data = JSON.parse(page.css('script')[0].text.gsub(/^\s+|\s+$/, "").gsub("var gogData = ", "")[0..-2])
|
9
|
-
|
10
|
-
game = Game.new
|
11
|
-
|
12
|
-
# Game title
|
13
|
-
game.title = data["gameProductData"]["title"]
|
14
|
-
|
15
|
-
# Game genres
|
16
|
-
game.genres = []
|
17
|
-
genres_raw = data["gameProductData"]["genres"]
|
18
|
-
genres_raw.each do |genre|
|
19
|
-
game.genres.push(genre["name"])
|
20
|
-
end
|
21
|
-
|
22
|
-
# Download size
|
23
|
-
game.download_size = data["gameProductData"]["downloadSize"]
|
24
|
-
|
25
|
-
# Release date
|
26
|
-
game.release_date = data["gameProductData"]["releaseDate"]
|
27
|
-
|
28
|
-
# Price
|
29
|
-
game.price = data["gameProductData"]["price"]["symbol"] + data["gameProductData"]["price"]["amount"]
|
30
|
-
|
31
|
-
# Average rating
|
32
|
-
game.avg_rating = data["gameProductData"]["rating"].to_s.insert(1, ".")
|
33
|
-
|
34
|
-
# Rating count
|
35
|
-
game.avg_ratings_count = data["gameProductData"]["votesCount"]
|
36
|
-
|
37
|
-
# Platforms
|
38
|
-
game.platforms = []
|
39
|
-
platforms_raw = data["gameProductData"]["worksOn"]
|
40
|
-
platforms_raw.each do |platform|
|
41
|
-
if(platform[1])
|
42
|
-
game.platforms.push(platform[0])
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Languages
|
47
|
-
game.languages = data["gameProductData"]["languages"]
|
48
|
-
|
49
|
-
# Developer & Publisher
|
50
|
-
game.developer = data["gameProductData"]["developer"]["name"]
|
51
|
-
game.publisher = data["gameProductData"]["publisher"]["name"]
|
52
|
-
|
53
|
-
# Game modes
|
54
|
-
game.game_modes = []
|
55
|
-
modes_raw = data["gameProductData"]["modes"]
|
56
|
-
modes_raw.each do |mode|
|
57
|
-
game.game_modes.push(mode["title"])
|
58
|
-
end
|
59
|
-
|
60
|
-
# Reviews
|
61
|
-
game.reviews = []
|
62
|
-
reviews_raw = data["reviews"]["pages"][0]
|
63
|
-
reviews_raw.each do |review|
|
64
|
-
r = Review.new
|
65
|
-
|
66
|
-
r.title = review["title"]
|
67
|
-
r.rating = review["rating"].to_s.insert(1, ".")
|
68
|
-
r.author = review["author"]["name"]
|
69
|
-
r.body = review["description"]
|
70
|
-
|
71
|
-
game.reviews.push(r)
|
72
|
-
end
|
73
|
-
|
74
|
-
game
|
75
|
-
end
|
76
|
-
|
77
|
-
# Converts Game: Name 2 to game_name_2
|
78
|
-
# @param: game name {string}
|
79
|
-
# @return: converted game name {string}
|
80
|
-
def self.urlfy_name(name)
|
81
|
-
name = name.gsub(/[^0-9A-Za-z\s]/, '').gsub(/\s/, '_').downcase
|
82
|
-
return name
|
83
|
-
end
|
84
|
-
end
|