bgg-hotness-cli 0.1.3 → 0.1.4
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 +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
|