snow_report 0.1.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 +7 -0
- data/bin/snow-report +6 -0
- data/lib/snow_report.rb +12 -0
- data/lib/snow_report/cli.rb +100 -0
- data/lib/snow_report/mountains.rb +32 -0
- data/lib/snow_report/scraper.rb +23 -0
- metadata +120 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 93995cc63682cdf07323d7f8d2d7e6b8c2587e519f8e4896bc3ec5b2514188d7
|
|
4
|
+
data.tar.gz: 9ac9f655cb6c949dd1601dc6b04c28e190e9660604fb938c8eb162550c572051
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 45662a6f22ea309f8c7cd332733d80e675cae862636f6d2df40862a4960ca803a655c619694e067530c0068a5d91da1cf9b836b23d47c4b875ac3f85e66167e7
|
|
7
|
+
data.tar.gz: 2dc8636c6a8a0d4fa846f94d304bf6ff7802dfd066f7b1353211c4e03b9f57019b852b2620764c66fc54c29c8010d097046e3d5e5e24130656e01cb8ad356ce4
|
data/bin/snow-report
ADDED
data/lib/snow_report.rb
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
class SnowReport::CLI
|
|
2
|
+
|
|
3
|
+
def start
|
|
4
|
+
rocky_mtn_array = SnowReport::Scraper.scrape_from_web("https://onthesnow.com/rocky-mountain/skireport.html")
|
|
5
|
+
SnowReport::Mountains.new_by_collection(rocky_mtn_array)
|
|
6
|
+
west_coast_array = SnowReport::Scraper.scrape_from_web("https://onthesnow.com/west-coast/skireport.html")
|
|
7
|
+
SnowReport::Mountains.new_by_collection(west_coast_array)
|
|
8
|
+
run
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def main_menu
|
|
12
|
+
puts "Welcome to Snow Report!"
|
|
13
|
+
puts "Here are possible ways to view snow reports:"
|
|
14
|
+
puts " COMMAND ......... OUTPUT"
|
|
15
|
+
puts " snowfall ........ Top 20 resorts by 72-hr snowfall"
|
|
16
|
+
puts " depth ........... Top 20 resorts by base depth"
|
|
17
|
+
puts " runs ............ Top 20 resorts by open runs"
|
|
18
|
+
puts " [state] ......... List of resorts in that state"
|
|
19
|
+
puts " [resort] ........ All data for that resort"
|
|
20
|
+
puts " exit ............ Quit program"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def run
|
|
24
|
+
main_menu
|
|
25
|
+
command = nil
|
|
26
|
+
until command == "exit"
|
|
27
|
+
command = gets.downcase.chomp
|
|
28
|
+
if command == "snowfall"
|
|
29
|
+
#sort by snowfall method
|
|
30
|
+
snowfall
|
|
31
|
+
elsif command == "depth"
|
|
32
|
+
# sort by depth method
|
|
33
|
+
depth
|
|
34
|
+
elsif command == "runs"
|
|
35
|
+
# sort by runs method
|
|
36
|
+
runs
|
|
37
|
+
elsif command == "menu"
|
|
38
|
+
main_menu
|
|
39
|
+
elsif SnowReport::Mountains.find_resort(command)
|
|
40
|
+
print_resort(command)
|
|
41
|
+
elsif SnowReport::Mountains.find_all_in_state(command)
|
|
42
|
+
list_from_state(command)
|
|
43
|
+
else
|
|
44
|
+
puts "Not a valid input ... try again or type 'menu' to see available commands" unless command == "exit"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def snowfall
|
|
51
|
+
puts "----------"
|
|
52
|
+
snowfall_data = SnowReport::Mountains.all
|
|
53
|
+
snowfall_data.sort_by! {|obj| -obj.snowfall.to_i}
|
|
54
|
+
snowfall_data.each_with_index do |resort, i|
|
|
55
|
+
if i < 20
|
|
56
|
+
puts "#{i+1}. #{resort.name} - #{resort.state} - #{resort.snowfall} inches"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def depth
|
|
62
|
+
puts "----------"
|
|
63
|
+
depth_data = SnowReport::Mountains.all
|
|
64
|
+
depth_data.sort_by! {|obj| -obj.base_depth.to_i}
|
|
65
|
+
depth_data.each_with_index do |resort, i|
|
|
66
|
+
if i < 20
|
|
67
|
+
puts "#{i+1}. #{resort.name} - #{resort.state} - #{resort.base_depth} inches"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def runs
|
|
73
|
+
puts "----------"
|
|
74
|
+
runs_data = SnowReport::Mountains.all
|
|
75
|
+
runs_data.sort_by! {|obj| -obj.runs_open[0].to_i}
|
|
76
|
+
runs_data.each_with_index do |resort, i|
|
|
77
|
+
if i < 20
|
|
78
|
+
puts "#{i+1}. #{resort.name} - #{resort.state} - #{resort.runs_open.join("/")}"
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def list_from_state(state)
|
|
84
|
+
puts "----------"
|
|
85
|
+
states_resorts = SnowReport::Mountains.find_all_in_state(state)
|
|
86
|
+
states_resorts.each do |resort|
|
|
87
|
+
puts "#{resort.name} - Base depth: #{resort.base_depth}\" - 72hr Snowfall: #{resort.snowfall}\" - Runs Open: #{resort.runs_open.join("/")}"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def print_resort(resort)
|
|
92
|
+
res = SnowReport::Mountains.find_resort(resort)
|
|
93
|
+
puts "----------"
|
|
94
|
+
puts "#{res.name}, #{res.state}"
|
|
95
|
+
puts "Base Depth: #{res.base_depth} inches"
|
|
96
|
+
puts "72hr Snowfall: #{res.snowfall} inches"
|
|
97
|
+
puts "Runs Open: #{res.runs_open.join("/")}"
|
|
98
|
+
puts "Full Report: https://onthesnow.com" + "#{res.link}"
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
class SnowReport::Mountains
|
|
2
|
+
attr_accessor :name, :state, :snowfall, :link, :runs_open, :base_depth
|
|
3
|
+
@@all = []
|
|
4
|
+
def initialize(attributes)
|
|
5
|
+
attributes.each {|key, value| self.send("#{key}=", value)}
|
|
6
|
+
@@all << self
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.all
|
|
10
|
+
@@all
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.new_by_attributes(hash)
|
|
14
|
+
SnowReport::Mountains.new(hash)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.new_by_collection(array)
|
|
18
|
+
array.each {|hash| self.new_by_attributes(hash)}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.find_all_in_state(state)
|
|
22
|
+
states_resorts = SnowReport::Mountains.all.select {|obj| obj.state.downcase == state}
|
|
23
|
+
if states_resorts.size == 0
|
|
24
|
+
return nil
|
|
25
|
+
end
|
|
26
|
+
states_resorts
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.find_resort(resort)
|
|
30
|
+
SnowReport::Mountains.all.detect {|obj| obj.name.downcase == resort}
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
class SnowReport::Scraper
|
|
3
|
+
def self.scrape_from_web(url)
|
|
4
|
+
html = open(url)
|
|
5
|
+
doc = Nokogiri::HTML(html)
|
|
6
|
+
mountains = []
|
|
7
|
+
table = doc.css(".resortList tr")
|
|
8
|
+
table.each_with_index do |row, i|
|
|
9
|
+
if i > 1 && i < table.size - 6
|
|
10
|
+
mountain_hash = {
|
|
11
|
+
:name => row.css(".name").text,
|
|
12
|
+
:state => row.css(".rRegion").text.split(",")[0],
|
|
13
|
+
:snowfall => row.css(".rLeft.b b")[1].text.chomp("\""),
|
|
14
|
+
:base_depth => row.css(".rMid.c b").text.strip.split(" - ")[0].chomp("\""),
|
|
15
|
+
:link => row.css(".rMid.c a").attribute("href").value, #(needs full web link)
|
|
16
|
+
:runs_open => row.css("td.rMid")[3].text.strip.split("/")
|
|
17
|
+
}
|
|
18
|
+
mountains << mountain_hash
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
mountains
|
|
22
|
+
end
|
|
23
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: snow_report
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- thurman024
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2018-02-08 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bundler
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.16'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.16'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '10.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '10.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '3.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '3.0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: pry
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: nokogiri
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
description:
|
|
84
|
+
email:
|
|
85
|
+
- 33437392+thurman024@users.noreply.github.com
|
|
86
|
+
executables:
|
|
87
|
+
- snow-report
|
|
88
|
+
extensions: []
|
|
89
|
+
extra_rdoc_files: []
|
|
90
|
+
files:
|
|
91
|
+
- bin/snow-report
|
|
92
|
+
- lib/snow_report.rb
|
|
93
|
+
- lib/snow_report/cli.rb
|
|
94
|
+
- lib/snow_report/mountains.rb
|
|
95
|
+
- lib/snow_report/scraper.rb
|
|
96
|
+
homepage: https://github.com/thurman024/snow_report
|
|
97
|
+
licenses:
|
|
98
|
+
- MIT
|
|
99
|
+
metadata: {}
|
|
100
|
+
post_install_message:
|
|
101
|
+
rdoc_options: []
|
|
102
|
+
require_paths:
|
|
103
|
+
- lib
|
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
|
+
requirements:
|
|
106
|
+
- - ">="
|
|
107
|
+
- !ruby/object:Gem::Version
|
|
108
|
+
version: '0'
|
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
|
+
requirements:
|
|
111
|
+
- - ">="
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
version: '0'
|
|
114
|
+
requirements: []
|
|
115
|
+
rubyforge_project:
|
|
116
|
+
rubygems_version: 2.7.4
|
|
117
|
+
signing_key:
|
|
118
|
+
specification_version: 4
|
|
119
|
+
summary: Provides snow condition data for various US ski resorts
|
|
120
|
+
test_files: []
|