gogcom 0.0.1 → 0.0.2.pre

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
  SHA1:
3
- metadata.gz: 74c72a8ba9c2b4c5449295cc91b4f1aca82594d4
4
- data.tar.gz: 108ed27e57ba9627439ae2052c03a318a1ff555c
3
+ metadata.gz: 1d1240977c38c857e33ec0cfd413edaf14f33513
4
+ data.tar.gz: e662630e6f6d2981bc2310a05d1e0d39134b9ef8
5
5
  SHA512:
6
- metadata.gz: e574319ae1d012e90a843e3147b9f81297cfeaf5e67cbba2793fcafb1ee0b18c076e61fa74bb15d3f9130fd04a1aa76d22c5edf06ac6bb7a0cd33a2d9bcfa555
7
- data.tar.gz: 561714d03bb66c57ca0fa23821810f375b019a8cf25be19e0787b9e7c0615e4e122c51dfbf04088fc86c54418e2a17c91977eb7a4baf792d6a5a9979dbd41e59
6
+ metadata.gz: fd69b931257d5a6ee027be4c398fd68485e1579176b2bfcee3347e2a42ecdda4f21a98a7dc87807ac75f1b4cf1aa3c241099f291bf74f51e3cdead4a4e557e36
7
+ data.tar.gz: d84736b37f6ee167dc47df9987f1686709592eaf515b1d311df5881a1a70cde58d91591e7263069e687c701422c70940d76fb6413a2fbace238f891354cdcbcc
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- gogcom [![](https://api.travis-ci.org/rb-/gogcom.svg?branch=develop)](https://travis-ci.org/rb-/gogcom)
1
+ gogcom [![Gem Version](https://badge.fury.io/rb/gogcom.svg)](http://badge.fury.io/rb/gogcom) [![](https://api.travis-ci.org/rb-/gogcom.svg?branch=develop)](https://travis-ci.org/rb-/gogcom) [![Dependency Status](https://gemnasium.com/rb-/gogcom.svg)](https://gemnasium.com/rb-/gogcom) [![Coverage Status](https://coveralls.io/repos/rb-/gogcom/badge.png?branch=develop)](https://coveralls.io/r/rb-/gogcom?branch=develop)
2
2
  ============
3
3
 
4
4
  Gogcom is a Ruby library for easy querying gog.com website.
@@ -8,7 +8,7 @@ This library is in early stages and not ready for general use.
8
8
  ## Usage
9
9
 
10
10
  ```
11
- gem 'gogcom', '~> 0.0.1'
11
+ gem 'gogcom', '~> 0.0.2'
12
12
  bundle install
13
13
  ```
14
14
 
@@ -18,17 +18,23 @@ require 'gogcom'
18
18
  game = Gogcom.game("Spelunky")
19
19
 
20
20
  game.title # => "Spelunky"
21
- game.genres # => ["action", "adventure", "platformer"]
21
+ game.genres # => ["Action", "Adventure", "Platformer"]
22
22
  game.download_size # => "143 MB"
23
- game.release_date # => "August 8, 2013"
23
+ game.release_date # => 1375934400 (Unix time)
24
24
  game.price # => "$14.99"
25
- game.avg_rating # => 4.5
26
- game.avg_ratings_count # => 257
27
- game.platforms # => ["Windows (XP, Vista, 7, 8)"]
25
+ game.avg_rating # => "4.6"
26
+ game.avg_ratings_count # => 268
27
+ game.platforms # => ["Windows"]
28
28
  game.languages # => ["English", "French", "Italian", "German", "Spanish"]
29
29
  game.developer # => "Mossmouth"
30
30
  game.publisher # => "Mossmouth"
31
- game.game_modes # => ["single-player", "multi-player", "co-op"]
31
+ game.game_modes # => ["Single-player", "Multi-player", "Co-op"]
32
+
33
+ # Reviews right now are limited to 5 (sorted by most helpful, same as in actual website)
34
+ game.reviews[0].title # => "..."
35
+ game.reviews[0].rating # => "..."
36
+ game.reviews[0].author # => "..."
37
+ game.reviews[0].body # => "..."
32
38
  ```
33
39
 
34
40
  ## License
data/lib/gogcom.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'open-uri'
2
2
  require 'nokogiri'
3
+ require 'json'
3
4
 
4
5
  require 'gogcom/gogcom'
5
6
  require 'gogcom/game'
7
+ require 'gogcom/review'
data/lib/gogcom/game.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Game
2
2
  attr_accessor :title, :genres, :download_size, :release_date, :price, :avg_rating,
3
3
  :avg_ratings_count, :platforms, :languages, :developer, :publisher,
4
- :game_modes
4
+ :game_modes, :reviews
5
5
  end
data/lib/gogcom/gogcom.rb CHANGED
@@ -5,63 +5,71 @@ class Gogcom
5
5
  def self.game(name)
6
6
  name = urlfy_name(name)
7
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])
8
9
 
9
10
  game = Game.new
10
11
 
11
12
  # Game title
12
- title_raw = page.css('title').text
13
- game.title = title_raw.slice(0..(title_raw.index('for download')-2))
13
+ game.title = data["gameProductData"]["title"]
14
14
 
15
15
  # Game genres
16
16
  game.genres = []
17
- genres_raw = page.css('ul.game-specification li')[0].css('.data b')
17
+ genres_raw = data["gameProductData"]["genres"]
18
18
  genres_raw.each do |genre|
19
- game.genres.push(genre.css('a').text)
19
+ game.genres.push(genre["name"])
20
20
  end
21
21
 
22
22
  # Download size
23
- game.download_size = page.css('ul.game-specification li.download_size .data b')[0].text
23
+ game.download_size = data["gameProductData"]["downloadSize"]
24
24
 
25
25
  # Release date
26
- game.release_date = page.css('ul.game-specification li')[3].css('.data')[0].text
26
+ game.release_date = data["gameProductData"]["releaseDate"]
27
27
 
28
28
  # Price
29
- price = page.css('form #game_price').attr('value').text
30
- game.price = "$" + (price.to_f / 100).to_s
29
+ game.price = data["gameProductData"]["price"]["symbol"] + data["gameProductData"]["price"]["amount"]
31
30
 
32
31
  # Average rating
33
- game.avg_rating = 0.0
34
- stuff_raw = page.css('ul.game-specification li')[2].css('.data .usr_rate span')
35
- stuff_raw.each do |star|
36
- if star.attr('class') == 'usr_s_f'
37
- game.avg_rating += 1.0
38
- elsif star.attr('class') == 'usr_s_h'
39
- game.avg_rating += 0.5
40
- end
41
- end
32
+ game.avg_rating = data["gameProductData"]["rating"].to_s.insert(1, ".")
42
33
 
43
34
  # Rating count
44
- avg_ratings_count_raw = page.css('ul.game-specification li')[2].css('.data span')[6].text
45
- game.avg_ratings_count = avg_ratings_count_raw.gsub(/\D/, '').to_i
35
+ game.avg_ratings_count = data["gameProductData"]["votesCount"]
46
36
 
47
37
  # Platforms
48
38
  game.platforms = []
49
- platforms_raw = page.css('ul.game-specification li')[4].css('.data')[0].text
50
- game.platforms = platforms_raw.split(' and ')
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
51
45
 
52
46
  # Languages
53
- languages_raw = page.css('ul.game-specification li')[5].css('.data').text
54
- game.languages = languages_raw.gsub("Audio and text:", "").gsub("Text only:", "")
55
- .gsub(/\s+/, '').gsub('.', ',').split(',')
47
+ game.languages = data["gameProductData"]["languages"]
56
48
 
57
- game.developer = page.css('ul.game-specification li')[6].css('.data a')[0].text # Developer
58
- game.publisher = page.css('ul.game-specification li')[6].css('.data a')[0].text # Publisher
49
+ # Developer & Publisher
50
+ game.developer = data["gameProductData"]["developer"]["name"]
51
+ game.publisher = data["gameProductData"]["publisher"]["name"]
59
52
 
60
53
  # Game modes
61
54
  game.game_modes = []
62
- game_modes_raw = page.css('ul.game-specification li')[7].css('.data')[0].text
63
- game_modes_raw = game_modes_raw.gsub(/\s+/, '') # Remove whitespaces
64
- game.game_modes = game_modes_raw.split(',')
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
65
73
 
66
74
  game
67
75
  end
@@ -0,0 +1,3 @@
1
+ class Review
2
+ attr_accessor :title, :rating, :author, :body
3
+ end
@@ -1,5 +1,3 @@
1
1
  module Gogcom
2
-
3
- VERSION = "0.0.1"
4
-
2
+ VERSION = "0.0.2.pre"
5
3
  end
data/test/helper.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
data/test/test_gogcom.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'minitest/autorun'
2
+ require 'helper'
2
3
  require 'gogcom'
3
4
 
4
5
  class GogcomTest < MiniTest::Test
@@ -12,7 +13,7 @@ class GogcomTest < MiniTest::Test
12
13
  end
13
14
 
14
15
  def test_that_game_has_genres
15
- assert_equal ["strategy", "simulation", "sci-fi"], @game.genres
16
+ assert_equal ["Strategy", "Simulation", "Sci-fi"], @game.genres
16
17
  end
17
18
 
18
19
  def test_that_game_has_download_size
@@ -20,7 +21,7 @@ class GogcomTest < MiniTest::Test
20
21
  end
21
22
 
22
23
  def test_that_game_has_release_date
23
- assert_equal "September 14, 2012", @game.release_date
24
+ assert_equal 1347595200, @game.release_date
24
25
  end
25
26
 
26
27
  def test_that_game_has_price
@@ -36,7 +37,7 @@ class GogcomTest < MiniTest::Test
36
37
  end
37
38
 
38
39
  def test_that_game_has_platforms
39
- assert_equal ["Windows (XP, Vista, 7, 8)", "Mac OS X (10.6.8 or newer)"], @game.platforms
40
+ assert_equal ["Windows", "Mac"], @game.platforms
40
41
  end
41
42
 
42
43
  def test_that_game_has_languages
@@ -52,7 +53,11 @@ class GogcomTest < MiniTest::Test
52
53
  end
53
54
 
54
55
  def test_that_game_has_game_modes
55
- assert_equal ["single-player"], @game.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"
56
61
  end
57
62
 
58
63
  end
metadata CHANGED
@@ -1,29 +1,95 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gogcom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2.pre
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-08-10 00:00:00.000000000 Z
11
+ date: 2014-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.4'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 5.4.1
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '5.4'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 5.4.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
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 10.3.2
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '10.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 10.3.2
13
53
  - !ruby/object:Gem::Dependency
14
54
  name: nokogiri
15
55
  requirement: !ruby/object:Gem::Requirement
16
56
  requirements:
17
- - - '='
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.6'
60
+ - - ">="
18
61
  - !ruby/object:Gem::Version
19
62
  version: 1.6.3.1
20
63
  type: :runtime
21
64
  prerelease: false
22
65
  version_requirements: !ruby/object:Gem::Requirement
23
66
  requirements:
24
- - - '='
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.6'
70
+ - - ">="
25
71
  - !ruby/object:Gem::Version
26
72
  version: 1.6.3.1
73
+ - !ruby/object:Gem::Dependency
74
+ name: json
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.8'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.8.1
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.8'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.8.1
27
93
  description: Provides a simple, easy-to-use interface for gog.com website.
28
94
  email:
29
95
  - r.b@riseup.net
@@ -37,7 +103,9 @@ files:
37
103
  - lib/gogcom.rb
38
104
  - lib/gogcom/game.rb
39
105
  - lib/gogcom/gogcom.rb
106
+ - lib/gogcom/review.rb
40
107
  - lib/gogcom/version.rb
108
+ - test/helper.rb
41
109
  - test/test_gogcom.rb
42
110
  homepage: http://rubygems.org/gems/gogcom
43
111
  licenses:
@@ -54,9 +122,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
54
122
  version: '0'
55
123
  required_rubygems_version: !ruby/object:Gem::Requirement
56
124
  requirements:
57
- - - ">="
125
+ - - ">"
58
126
  - !ruby/object:Gem::Version
59
- version: '0'
127
+ version: 1.3.1
60
128
  requirements: []
61
129
  rubyforge_project:
62
130
  rubygems_version: 2.2.2