recently_ps4_games 0.2.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e0c5a5a232f395ced7e1032e4036d81d26f3db11
4
+ data.tar.gz: f20efd1eaaee29a345add70c15613eae862a1468
5
+ SHA512:
6
+ metadata.gz: 60bd26551ba9b335ba29f89fbfbec3bf67e6205dcf2ee9e36d4d03f6803ab96ddcc7d2e546fdfd78b65abc775e6335c42f597ff1c984cd244262429fc45f11c9
7
+ data.tar.gz: f33fb1bc147c640364739f82e1edf2141efc561704699a653824818213546ad89b9f1494d908faa94aa81b0b78f92ac6f0b73fcbf5d8b2411b5cb79e39e0f5ee
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/recently_ps4_games.rb'
4
+
5
+ RecentlyPs4Games::Cli.new.call
@@ -0,0 +1,75 @@
1
+ class RecentlyPs4Games::Cli
2
+
3
+ def call
4
+ puts "Welcome to recently_ps4_games!!"
5
+ puts "...now makinging games list..."
6
+ make_games # as Game Instance
7
+ interact_with_user # display list, ask input, display details
8
+ puts "Bye!"
9
+ end
10
+
11
+ def make_games
12
+ games_arr = RecentlyPs4Games::Scraper.scrape_game_list
13
+ RecentlyPs4Games::Game.create_by_games_arr(games_arr)
14
+ end
15
+
16
+ def interact_with_user
17
+ display_list
18
+ display_detail(get_detail(ask_what_to_detail))
19
+ interact_with_user unless ask_exit?
20
+ end
21
+
22
+ def display_list
23
+ RecentlyPs4Games::Game.all.each do |game|
24
+ puts "#{game.id}. #{game.title}"
25
+ end
26
+ end
27
+
28
+ def ask_what_to_detail
29
+ puts "What game would you like to get details?"
30
+ puts "Please input NUMBER."
31
+ input = gets.strip.to_i
32
+ until input.between?(1, RecentlyPs4Games::Game.all.size) do
33
+ puts "Please input valid NUMBER."
34
+ input = gets.strip.to_i
35
+ end
36
+ input
37
+ end
38
+
39
+ def get_detail(id)
40
+ game = RecentlyPs4Games::Game.find_by_id(id)
41
+ detail = RecentlyPs4Games::Scraper.scrape_details(game.detail_url)
42
+ game.add_attributes(detail)
43
+ end
44
+
45
+ def display_detail(game)
46
+ puts ""
47
+ puts "-------------------------------"
48
+ puts "\e[1m#{game.id}. #{game.title}\e[0m"
49
+ puts ""
50
+ puts "#{game.discription}"
51
+ puts ""
52
+ puts "\e[2mRelease date : \e[0m #{game.release_date}"
53
+ puts "\e[2mGenre : \e[0m #{game.genre}"
54
+ puts "\e[2mPublisher : \e[0m #{game.publisher}"
55
+ puts "\e[2mDeveloper : \e[0m #{game.developer}"
56
+ puts "-------------------------------"
57
+ puts ""
58
+ end
59
+
60
+ def ask_exit?
61
+ puts "Do you want to exit? (y/n)"
62
+ input = gets.strip
63
+ until input == "y" || input == "n" do
64
+ puts "Do you want to exit? (y/n)"
65
+ puts "Please input 'y' to exit, 'n' to continue."
66
+ input = gets.strip
67
+ end
68
+ if input == "y"
69
+ true
70
+ elsif input == "n"
71
+ false
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,37 @@
1
+ class RecentlyPs4Games::Game
2
+ attr_accessor :id, :title, :detail_url, :discription, :release_date, :genre, :publisher, :developer
3
+
4
+ @@all = []
5
+
6
+ def initialize(game_hash)
7
+ game_hash.each do |k, v|
8
+ self.send("#{k}=", v)
9
+ end
10
+ @@all << self
11
+ @id = @@all.size
12
+ self
13
+ end
14
+
15
+ def self.create_by_games_arr(games_arr)
16
+ games_arr.each do |game|
17
+ self.new(game)
18
+ end
19
+ end
20
+
21
+ def self.find_by_id(id)
22
+ self.all.detect do |game|
23
+ game.id == id
24
+ end
25
+ end
26
+
27
+ def add_attributes(details_hash)
28
+ details_hash.each do |k, v|
29
+ self.send("#{k}=", v)
30
+ end
31
+ self
32
+ end
33
+
34
+ def self.all
35
+ @@all
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ class RecentlyPs4Games::Scraper
2
+
3
+ def self.get_dynamic_page_html
4
+ Selenium::WebDriver::PhantomJS.path = Phantomjs.path
5
+ browser = Watir::Browser.new(:phantomjs)
6
+ browser.goto "https://www.playstation.com/en-us/explore/games/ps4-games/"
7
+ browser.html
8
+ end
9
+
10
+ def self.scrape_game_list
11
+ games_arr = []
12
+ list_page = Nokogiri::HTML(self.get_dynamic_page_html)
13
+ game_grids = list_page.css("div.inlineTabs.section.gameGrid")
14
+ game_grids.each do |game_grid|
15
+ games = game_grid.css("ul.clearfix li.layout-type-1 div.tile.clearfix div.game-tile-details h2 a.title")
16
+ games.each do |game|
17
+ games_arr << {
18
+ title: game.text,
19
+ detail_url: game.attr("href")
20
+ }
21
+ end
22
+ end
23
+ games_arr
24
+ end
25
+
26
+ def self.scrape_details(url)
27
+ detail_page = Nokogiri::HTML(open(url))
28
+ prod_meta = detail_page.css("div.prod-meta")
29
+ release_info = prod_meta.css("ul.release-info li")
30
+
31
+ details = {
32
+ discription: prod_meta.css("p.teaser").text,
33
+ release_date: release_info.css("span.releasedate").text.delete("\n\t"),
34
+ genre: release_info[1].children[2].text.delete("\n\t"),
35
+ publisher: release_info[2].children[1].text.delete("\n\t"),
36
+ developer: release_info[3].children[1].text.delete("\n\t")
37
+ }
38
+
39
+ details
40
+ end
41
+
42
+ end
@@ -0,0 +1,3 @@
1
+ module RecentlyPs4Games
2
+ VERSION = "0.2.0"
3
+ end
@@ -0,0 +1,13 @@
1
+ module RecentlyPs4Games
2
+ end
3
+
4
+ require 'pry'
5
+ require 'open-uri'
6
+ require 'nokogiri'
7
+ require 'watir-webdriver'
8
+ require 'phantomjs'
9
+
10
+ require_relative "recently_ps4_games/cli.rb"
11
+ require_relative "recently_ps4_games/game.rb"
12
+ require_relative "recently_ps4_games/scraper.rb"
13
+ require_relative "recently_ps4_games/version.rb"
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: recently_ps4_games
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - ayafushimi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: watir-webdriver
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.9'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: phantomjs
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: With this gem, you can see the lists of new and upcoming PS4 games and
112
+ inquire the details in CLI.
113
+ email:
114
+ - aya.fushimi@gmail.com
115
+ executables:
116
+ - recently_ps4_games
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - bin/recently_ps4_games
121
+ - lib/recently_ps4_games.rb
122
+ - lib/recently_ps4_games/cli.rb
123
+ - lib/recently_ps4_games/game.rb
124
+ - lib/recently_ps4_games/scraper.rb
125
+ - lib/recently_ps4_games/version.rb
126
+ homepage: https://github.com/ayafushimi/recently_ps4_games_cli_gem
127
+ licenses:
128
+ - MIT
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.6.7
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Recently PS4 Games
150
+ test_files: []