bgg-hotness-cli 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/bgg-hotness-cli.gemspec +1 -1
- data/bin/bgg-hotness-cli +1 -1
- data/lib/bgg-hotness-cli.rb +9 -34
- data/lib/bgg-hotness-cli/cli.rb +31 -0
- data/lib/bgg-hotness-cli/game.rb +32 -64
- data/lib/bgg-hotness-cli/helpers.rb +37 -0
- data/lib/bgg-hotness-cli/page.rb +7 -7
- data/lib/bgg-hotness-cli/scraper.rb +2 -5
- metadata +3 -2
- data/lib/bgg-hotness-cli/wrap.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc2de6031f26fec351be1d1edb8f8501b4fd0b21a08049623adb168a9709ad51
|
4
|
+
data.tar.gz: 7944aab38e12d7eb4bb9c7d1bea9281fa754c71ee89402283bd8f907961c179f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4d8f3d15dc42d93e2be60bd1eb3eff1dc1122f8b9e02f5d83f05046c920d1d7ebd628b385fced9d9cdaadf3a96447bbec358c91433e894db662f9a2a6c54e92
|
7
|
+
data.tar.gz: 0a7956c19df56a732dd735aa793a121a07e5fa580090077d71530ea1bf97c5d5fa28cca441a323c05ab066396aa483c196d998d186147514834c41d160f851ce
|
data/README.md
CHANGED
@@ -31,14 +31,14 @@ gem install bgg-hotness-cli
|
|
31
31
|
|
32
32
|
Run `bin/bgg-hotness-cli` in your terminal for a quickstart.
|
33
33
|
|
34
|
-
Or `require 'bgg-hotness-cli` and create
|
34
|
+
Or `require 'bgg-hotness-cli` and create run with `BggHotnessCLI::CLI.run`.
|
35
35
|
|
36
36
|
For example:
|
37
37
|
|
38
38
|
```ruby
|
39
39
|
irb
|
40
40
|
require 'bgg-hotness-cli'
|
41
|
-
BggHotnessCLI.
|
41
|
+
BggHotnessCLI::CLI.run
|
42
42
|
```
|
43
43
|
|
44
44
|
Once you're in the interface, use ↑/↓ arrows to navigate between options and press Enter to select your choice.
|
data/bgg-hotness-cli.gemspec
CHANGED
data/bin/bgg-hotness-cli
CHANGED
data/lib/bgg-hotness-cli.rb
CHANGED
@@ -1,38 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require_relative './bgg-hotness-cli/wrap.rb'
|
4
|
-
require_relative './bgg-hotness-cli/page.rb'
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'open-uri'
|
5
3
|
require 'launchy'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
def self.goodbye
|
11
|
-
puts
|
12
|
-
puts "Goodbye!"
|
13
|
-
puts
|
14
|
-
return
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.header
|
18
|
-
puts "\e[H\e[2J"
|
19
|
-
puts
|
20
|
-
puts "BGG Hotness CLI"
|
21
|
-
end
|
22
|
-
|
23
|
-
# Runs program by creating empty pages,
|
24
|
-
# doing a scrape of the hot list, adding games to pages,
|
25
|
-
# and printing the first 10 items on the list.
|
26
|
-
def run
|
27
|
-
# Create empty pages
|
28
|
-
Page.make_pages
|
6
|
+
module BggHotnessCLI
|
7
|
+
end
|
29
8
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
# NOTE: #run must be last so other methods can load.
|
38
|
-
end
|
9
|
+
require_relative './bgg-hotness-cli/scraper.rb'
|
10
|
+
require_relative './bgg-hotness-cli/game.rb'
|
11
|
+
require_relative './bgg-hotness-cli/helpers.rb'
|
12
|
+
require_relative './bgg-hotness-cli/page.rb'
|
13
|
+
require_relative './bgg-hotness-cli/cli.rb'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class BggHotnessCLI::CLI
|
2
|
+
# Displays goodbye and ends program
|
3
|
+
def self.goodbye
|
4
|
+
puts
|
5
|
+
puts "Goodbye!"
|
6
|
+
puts
|
7
|
+
return
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.header
|
11
|
+
puts "\e[H\e[2J"
|
12
|
+
puts
|
13
|
+
puts "BGG Hotness CLI"
|
14
|
+
end
|
15
|
+
|
16
|
+
# Runs program by creating empty pages,
|
17
|
+
# doing a scrape of the hot list, adding games to pages,
|
18
|
+
# and printing the first 10 items on the list.
|
19
|
+
def self.run
|
20
|
+
# Create empty pages
|
21
|
+
BggHotnessCLI::Page.make_pages
|
22
|
+
|
23
|
+
# Scrape list, which creates game instances
|
24
|
+
# and adds them to their pages in order.
|
25
|
+
BggHotnessCLI::Scraper.new("https://www.boardgamegeek.com/xmlapi2/hot?boardgame").game_list
|
26
|
+
|
27
|
+
BggHotnessCLI::Page.all[0].display_page
|
28
|
+
end
|
29
|
+
|
30
|
+
# NOTE: #run must be last so other methods can load.
|
31
|
+
end
|
data/lib/bgg-hotness-cli/game.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
class Game
|
1
|
+
class BggHotnessCLI::Game
|
2
2
|
attr_accessor :page, :description, :minplayers, :maxplayers, :minplaytime, :maxplaytime, :minage, :category, :mechanic, :publisher, :designer, :url
|
3
3
|
attr_reader :name, :id, :year, :rank
|
4
4
|
|
@@ -12,14 +12,14 @@ class Game
|
|
12
12
|
# Calculate page index of Page.all[]
|
13
13
|
page_index = ((@rank.to_i - 1) / 10).floor
|
14
14
|
# Put page into its game
|
15
|
-
@page = Page.all[page_index]
|
15
|
+
@page = BggHotnessCLI::Page.all[page_index]
|
16
16
|
# Put game into its page
|
17
|
-
Page.all[page_index].games << self
|
17
|
+
BggHotnessCLI::Page.all[page_index].games << self
|
18
18
|
end
|
19
19
|
|
20
20
|
def header
|
21
21
|
# Print header
|
22
|
-
BggHotnessCLI.header
|
22
|
+
BggHotnessCLI::CLI.header
|
23
23
|
puts
|
24
24
|
puts "#{@rank}. #{@name} (#{@year})"
|
25
25
|
end
|
@@ -30,7 +30,7 @@ class Game
|
|
30
30
|
# If the description is nil, it needs to be scraped.
|
31
31
|
# Otherwise, all data should be in memory, so skip this.
|
32
32
|
if @description.nil?
|
33
|
-
Scraper.new("https://boardgamegeek.com/xmlapi2/thing?id=#{@id}").get_details(self)
|
33
|
+
BggHotnessCLI::Scraper.new("https://boardgamegeek.com/xmlapi2/thing?id=#{@id}").get_details(self)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -65,43 +65,37 @@ class Game
|
|
65
65
|
puts
|
66
66
|
|
67
67
|
# Use print_array method to print arrays (with wrap method)
|
68
|
-
print_array("categories", "category", @category)
|
69
|
-
print_array("mechanics", "mechanic", @mechanic)
|
68
|
+
print_array("categories", "category", @category, @indent)
|
69
|
+
print_array("mechanics", "mechanic", @mechanic, @indent)
|
70
70
|
|
71
71
|
# See what user wants to do next
|
72
72
|
details_input
|
73
73
|
end
|
74
74
|
|
75
|
-
#
|
76
|
-
def
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
puts
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
# print the output with word-wrapping
|
102
|
-
puts wrap(output, @indent)
|
103
|
-
puts
|
104
|
-
end
|
75
|
+
# Displays full description
|
76
|
+
def full_description
|
77
|
+
header
|
78
|
+
|
79
|
+
# Use wrap method to add indentation & word wrap
|
80
|
+
puts "DESCRIPTION:"
|
81
|
+
puts wrap("#{@description}",@indent)
|
82
|
+
puts
|
83
|
+
|
84
|
+
# See what user wants to do next
|
85
|
+
details_input
|
86
|
+
end
|
87
|
+
|
88
|
+
# Displays publisher(s) and designer(s)
|
89
|
+
def publisher_designer
|
90
|
+
header
|
91
|
+
|
92
|
+
# Use print_array method to print arrays (with wrap method)
|
93
|
+
print_array("publishers", "publisher", @publisher, @indent)
|
94
|
+
print_array("designers", "designer", @designer, @indent)
|
95
|
+
puts
|
96
|
+
|
97
|
+
# See what user wants to do next
|
98
|
+
details_input
|
105
99
|
end
|
106
100
|
|
107
101
|
def details_input
|
@@ -150,34 +144,8 @@ class Game
|
|
150
144
|
display_details
|
151
145
|
elsif @input == choices.last
|
152
146
|
# If they quit, run "goodbye" method
|
153
|
-
BggHotnessCLI.goodbye
|
147
|
+
BggHotnessCLI::CLI.goodbye
|
154
148
|
end
|
155
149
|
end
|
156
150
|
|
157
|
-
# Displays full description
|
158
|
-
def full_description
|
159
|
-
header
|
160
|
-
|
161
|
-
# Use wrap method to add indentation & word wrap
|
162
|
-
puts "DESCRIPTION:"
|
163
|
-
puts wrap("#{@description}",@indent)
|
164
|
-
puts
|
165
|
-
|
166
|
-
# See what user wants to do next
|
167
|
-
details_input
|
168
|
-
end
|
169
|
-
|
170
|
-
# Displays publisher(s) and designer(s)
|
171
|
-
def publisher_designer
|
172
|
-
header
|
173
|
-
|
174
|
-
# Use print_array method to print arrays (with wrap method)
|
175
|
-
print_array("publishers", "publisher", @publisher)
|
176
|
-
print_array("designers", "designer", @designer)
|
177
|
-
puts
|
178
|
-
|
179
|
-
# See what user wants to do next
|
180
|
-
details_input
|
181
|
-
end
|
182
|
-
|
183
151
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# via http://www.java2s.com/Code/Ruby/String/WordwrappingLinesofText.htm
|
2
|
+
|
3
|
+
def wrap(s, indent, width=78)
|
4
|
+
s.gsub(/(.{1,#{width}})(\s+|\Z)/, "#{indent}\\1\n")
|
5
|
+
end
|
6
|
+
|
7
|
+
# Prints array with commas as needed
|
8
|
+
def print_array(plural, single, array, indent)
|
9
|
+
# Sometimes new games have empty fields.
|
10
|
+
# Don't do anything if array is empty.
|
11
|
+
if array.size != 0
|
12
|
+
puts array.size > 1 ? "#{plural.upcase}: " : "#{single.upcase}: "
|
13
|
+
|
14
|
+
# Initialize variable for holding output string
|
15
|
+
output = ""
|
16
|
+
array.each_with_index do |item,idx|
|
17
|
+
output += item
|
18
|
+
|
19
|
+
# if there's more than one item and this isn't the last item, add commas
|
20
|
+
if item != array.last && array.size > 1
|
21
|
+
|
22
|
+
# print an & before last item
|
23
|
+
if idx == array.size - 2
|
24
|
+
output += ", & "
|
25
|
+
|
26
|
+
# otherwise, just print a comma and space
|
27
|
+
else
|
28
|
+
output += ", "
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# print the output with word-wrapping
|
34
|
+
puts wrap(output, indent)
|
35
|
+
puts
|
36
|
+
end
|
37
|
+
end
|
data/lib/bgg-hotness-cli/page.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Each page is a list of 10 games.
|
2
2
|
# In total, the app has 5 pages (50 games).
|
3
|
-
class Page
|
3
|
+
class BggHotnessCLI::Page
|
4
4
|
attr_accessor :start_rank, :end_rank, :games, :page_number
|
5
5
|
|
6
6
|
@@all = []
|
@@ -22,7 +22,7 @@ class Page
|
|
22
22
|
# Displays list of games between @start_rank and @end_rank
|
23
23
|
|
24
24
|
# Print header
|
25
|
-
BggHotnessCLI.header
|
25
|
+
BggHotnessCLI::CLI.header
|
26
26
|
puts "The top #{@start_rank}–#{@end_rank} hot games on BGG."
|
27
27
|
puts
|
28
28
|
|
@@ -59,20 +59,20 @@ class Page
|
|
59
59
|
# If user selects next part of the list...
|
60
60
|
if @end_rank == 50
|
61
61
|
# ...if at the end of the list (50), display the first page
|
62
|
-
Page.all[0].display_page
|
62
|
+
BggHotnessCLI::Page.all[0].display_page
|
63
63
|
else
|
64
64
|
# ...otherwise, display the next page
|
65
65
|
# this works because the first page is [0] index,
|
66
66
|
# but it's page # is 1, meaning this will show
|
67
67
|
# the second page (which is at all[1]).
|
68
68
|
# TODO: make this less confusing?
|
69
|
-
Page.all[@page_number].display_page
|
69
|
+
BggHotnessCLI::Page.all[@page_number].display_page
|
70
70
|
end
|
71
71
|
elsif @input == 'quit'
|
72
72
|
# If they quit, run "goodbye" method
|
73
|
-
BggHotnessCLI.goodbye
|
73
|
+
BggHotnessCLI::CLI.goodbye
|
74
74
|
else
|
75
|
-
# Otherwise,
|
75
|
+
# Otherwise, @input is a game. Display its details.
|
76
76
|
@input.display_details
|
77
77
|
end
|
78
78
|
|
@@ -96,7 +96,7 @@ class Page
|
|
96
96
|
_start_rank = 1 # temp local variable
|
97
97
|
_end_rank = 10 # temp local variable
|
98
98
|
5.times do
|
99
|
-
Page.new(_start_rank, _end_rank)
|
99
|
+
BggHotnessCLI::Page.new(_start_rank, _end_rank)
|
100
100
|
_start_rank += 10
|
101
101
|
_end_rank += 10
|
102
102
|
end
|
@@ -1,7 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'open-uri'
|
3
|
-
|
4
|
-
class Scraper
|
1
|
+
class BggHotnessCLI::Scraper
|
5
2
|
|
6
3
|
# Initialize with an API path to open
|
7
4
|
def initialize(path)
|
@@ -20,7 +17,7 @@ class Scraper
|
|
20
17
|
year = item.css('yearpublished')[0]['value']
|
21
18
|
|
22
19
|
# Create a new instance of Game with item data
|
23
|
-
game = Game.new(name, id, year, rank)
|
20
|
+
game = BggHotnessCLI::Game.new(name, id, year, rank)
|
24
21
|
end
|
25
22
|
|
26
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bgg-hotness-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "'Josh Ellis'"
|
@@ -101,10 +101,11 @@ files:
|
|
101
101
|
- bin/setup
|
102
102
|
- img/start-page.jpg
|
103
103
|
- lib/bgg-hotness-cli.rb
|
104
|
+
- lib/bgg-hotness-cli/cli.rb
|
104
105
|
- lib/bgg-hotness-cli/game.rb
|
106
|
+
- lib/bgg-hotness-cli/helpers.rb
|
105
107
|
- lib/bgg-hotness-cli/page.rb
|
106
108
|
- lib/bgg-hotness-cli/scraper.rb
|
107
|
-
- lib/bgg-hotness-cli/wrap.rb
|
108
109
|
homepage: https://github.com/imjoshellis/bgg-hotness-cli
|
109
110
|
licenses:
|
110
111
|
- MIT
|