steam-upcoming 0.2.0 → 0.3.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/config/environment.rb +3 -2
- data/lib/steam-upcoming.rb +1 -2
- data/lib/steam-upcoming/cli.rb +18 -15
- data/lib/steam-upcoming/game.rb +7 -2
- data/lib/steam-upcoming/scraper.rb +4 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60f01b9aab0c1d3bacfa0a33fab1b8de15e39770
|
4
|
+
data.tar.gz: b7d96181a097415fa89b3237e37a61cae653815c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cea802dc82d096666bc4e5aacd30e7bf2db61c4023994bf1654f19c75297063dfe8d735df8dc1ec1883715dbd25fee56f1d397cf81440a5b42a49ef3f7460748
|
7
|
+
data.tar.gz: 657b0553e3bb5170b02d7af469bd2a673df95bafd06722b68d959e3da260f412389931ef6cd90e9049e04293c729a1b2a5effbb84fdc3f3b4fe075fd5985137d
|
data/config/environment.rb
CHANGED
@@ -2,6 +2,7 @@ require 'open-uri'
|
|
2
2
|
require 'pry'
|
3
3
|
require 'nokogiri'
|
4
4
|
require "colorize"
|
5
|
-
|
5
|
+
|
6
|
+
require_relative "../lib/steam-upcoming/scraper.rb"
|
6
7
|
require_relative "../lib/steam-upcoming/game.rb"
|
7
|
-
require_relative "../lib/steam-upcoming/
|
8
|
+
require_relative "../lib/steam-upcoming/cli.rb"
|
data/lib/steam-upcoming.rb
CHANGED
data/lib/steam-upcoming/cli.rb
CHANGED
@@ -3,7 +3,6 @@ class SteamUpcoming::CLI
|
|
3
3
|
|
4
4
|
BASE_URL = "http://store.steampowered.com/search/?filter=comingsoon&sort_order=0&filter=comingsoon&page=1"
|
5
5
|
|
6
|
-
|
7
6
|
def initialize
|
8
7
|
@url = "http://store.steampowered.com/search/?filter=comingsoon&sort_order=0&filter=comingsoon&page=1"
|
9
8
|
end
|
@@ -15,21 +14,21 @@ class SteamUpcoming::CLI
|
|
15
14
|
start
|
16
15
|
end
|
17
16
|
|
18
|
-
def make_games(url) #creates the list of
|
17
|
+
def make_games(url) #creates the list of game objects from the chosen URL
|
19
18
|
game_array = SteamUpcoming::Scraper.scrape_index_page(url)
|
20
19
|
SteamUpcoming::Game.create_from_collection(game_array)
|
21
20
|
end
|
22
21
|
|
23
|
-
def pages #generate list of
|
22
|
+
def pages #generate list of page URLs as an array
|
24
23
|
pages = SteamUpcoming::Game.create_pages(SteamUpcoming::Scraper.page_count(BASE_URL))
|
25
24
|
end
|
26
25
|
|
27
26
|
def change_page #allow the users to select another page
|
28
27
|
print "Enter a page number > "
|
29
28
|
input = gets.chomp.strip
|
30
|
-
if @url = pages[input.to_i-1]
|
31
|
-
SteamUpcoming::Game.reset
|
32
|
-
make_games(@url)
|
29
|
+
if @url = pages[input.to_i-1] #use the users input to select the corresponding page URL from the #pages array
|
30
|
+
SteamUpcoming::Game.reset #clear out the class variable so it can be populated with a new list of games
|
31
|
+
make_games(@url) #create the games with the new chosen URL
|
33
32
|
list
|
34
33
|
else
|
35
34
|
puts "#{input}".concat(" is not a valid page number. Please enter a number between 1 and #{pages.count}.").colorize(:red)
|
@@ -62,15 +61,17 @@ class SteamUpcoming::CLI
|
|
62
61
|
end
|
63
62
|
|
64
63
|
def current_page
|
65
|
-
url = @url[-2,2]
|
66
|
-
array = url.split("").map {|x| x.to_i}
|
64
|
+
url = @url[-2,2] #return the last two characters of the URL string
|
65
|
+
array = url.split("").map {|x| x.to_i} #split the two characters into an array
|
67
66
|
array[0] == 0 ? current_page = array[0] + array[1] : current_page = "#{array[0]}".concat("#{array[1]}")
|
67
|
+
#if the first element is a letter (it converts to 0), add it to the second element
|
68
|
+
#if the both elements are numbers, concatenate them and return the new string
|
68
69
|
end
|
69
70
|
|
70
71
|
def start #start the program loop
|
71
72
|
list
|
72
73
|
input = nil
|
73
|
-
while input != "exit"
|
74
|
+
while input != "exit" #loop user input until user types 'exit'
|
74
75
|
puts "\nLearn more about a game by typing a name or number.\n".colorize(:yellow)
|
75
76
|
puts "Enter \'list\'' to list games.".colorize(:light_blue)
|
76
77
|
puts "Enter \'exit\' to exit.".colorize(:light_blue)
|
@@ -80,17 +81,17 @@ class SteamUpcoming::CLI
|
|
80
81
|
if input == "list"
|
81
82
|
list
|
82
83
|
elsif input.to_i == 0 #if input is a name
|
83
|
-
if game = SteamUpcoming::Game.find_by_name(input)
|
84
|
+
if game = SteamUpcoming::Game.find_by_name(input) #find game and list corresponding game
|
84
85
|
list_game(game)
|
85
|
-
elsif input == "exit"
|
86
|
+
elsif input == "exit" #exit the program
|
86
87
|
break
|
87
|
-
elsif input == "page"
|
88
|
+
elsif input == "page" #commence the #change_page method
|
88
89
|
change_page
|
89
90
|
else
|
90
|
-
puts "\'#{input}\'".concat(" is not a valid
|
91
|
+
puts "\'#{input}\'".concat(" is not a valid command.").colorize(:red)
|
91
92
|
end
|
92
|
-
elsif input.to_i > 0 #if a number
|
93
|
-
if game = SteamUpcoming::Game.find(input.to_i)
|
93
|
+
elsif input.to_i > 0 #if a number
|
94
|
+
if game = SteamUpcoming::Game.find(input.to_i) #find number and list corresponding game
|
94
95
|
list_game(game)
|
95
96
|
else
|
96
97
|
puts "\'#{input}\'".concat(" is not a valid number. Please enter a number between 1 and #{SteamUpcoming::Game.all.count}.").colorize(:red)
|
@@ -99,4 +100,6 @@ class SteamUpcoming::CLI
|
|
99
100
|
end
|
100
101
|
puts "\nShutting down...\n".colorize(:red)
|
101
102
|
end
|
103
|
+
|
102
104
|
end
|
105
|
+
|
data/lib/steam-upcoming/game.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# The SteamUpcoming::Game class is responsible for taking informatino scraped from the Steam website
|
2
|
+
# and creating new Game objects with attributes.
|
3
|
+
|
1
4
|
class SteamUpcoming::Game
|
2
5
|
attr_accessor :name, :release_date, :platforms, :url, :about, :tags, :details
|
3
6
|
|
@@ -14,11 +17,11 @@ class SteamUpcoming::Game
|
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
17
|
-
def add_game_attributes(game_attributes_hash) #add attributes to
|
20
|
+
def add_game_attributes(game_attributes_hash) #add attributes to the Game object
|
18
21
|
game_attributes_hash.each {|key, value| self.send(("#{key}="), value)}
|
19
22
|
end
|
20
23
|
|
21
|
-
def self.create_pages(page_count) #
|
24
|
+
def self.create_pages(page_count) #Create the page urls
|
22
25
|
i = 1
|
23
26
|
pages = []
|
24
27
|
while i <= page_count.to_i
|
@@ -28,10 +31,12 @@ class SteamUpcoming::Game
|
|
28
31
|
pages
|
29
32
|
end
|
30
33
|
|
34
|
+
private
|
31
35
|
def self.all #show all games
|
32
36
|
@@all
|
33
37
|
end
|
34
38
|
|
39
|
+
private
|
35
40
|
def self.reset #clear the list of games
|
36
41
|
@@all.clear
|
37
42
|
end
|
@@ -19,14 +19,14 @@ class SteamUpcoming::Scraper
|
|
19
19
|
game_array
|
20
20
|
end
|
21
21
|
|
22
|
-
def self.gather_platforms(parent) #gather a list of platforms, then return an array of
|
22
|
+
def self.gather_platforms(parent) #gather a list of platforms, then return an array of actual platforms
|
23
23
|
platforms = parent.children.map do |platform|
|
24
24
|
platform.attr('class')
|
25
25
|
end
|
26
26
|
platforms.select {|platform| platform != nil}
|
27
27
|
end
|
28
28
|
|
29
|
-
def self.convert_platforms(platform_array) #
|
29
|
+
def self.convert_platforms(platform_array) #convert the platform array items into actual names, because the source is an image, not text
|
30
30
|
platforms = platform_array.map! do |platform|
|
31
31
|
if platform.include?("win")
|
32
32
|
platform = "Windows"
|
@@ -47,7 +47,7 @@ class SteamUpcoming::Scraper
|
|
47
47
|
platforms.select {|platform| platform != nil}
|
48
48
|
end
|
49
49
|
|
50
|
-
def self.scrape_game_page(game_url)
|
50
|
+
def self.scrape_game_page(game_url) #scrape the page and create a hash of game attributes
|
51
51
|
doc = Nokogiri::HTML(open(game_url))
|
52
52
|
about = doc.css(".game_description_snippet")
|
53
53
|
tags = doc.css(".glance_tags a").map {|tag| tag.text}
|
@@ -59,7 +59,7 @@ class SteamUpcoming::Scraper
|
|
59
59
|
}
|
60
60
|
end
|
61
61
|
|
62
|
-
def self.page_count(index_url)
|
62
|
+
def self.page_count(index_url) #scrape the pages to get the total number of pages
|
63
63
|
doc = Nokogiri::HTML(open(index_url))
|
64
64
|
page_count = doc.css(".search_pagination_right").first.children[5].text.to_i
|
65
65
|
end
|