study_the_map 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 -16
- data/bin/study_the_map +1 -1
- data/lib/study_the_map.rb +11 -5
- data/lib/study_the_map/cli.rb +98 -10
- data/lib/study_the_map/lookupids.rb +4 -4
- data/lib/study_the_map/region_scraper.rb +31 -0
- data/lib/study_the_map/regions.rb +8 -32
- data/lib/study_the_map/ski_map.rb +5 -118
- data/lib/study_the_map/ski_map_scraper.rb +43 -0
- data/lib/study_the_map/version.rb +1 -1
- data/study_the_map.gemspec +2 -2
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7adc405e3fb54aea7a9a894124201badadb373e
|
4
|
+
data.tar.gz: d9cf28aaf972aed3852d1fe64de322c6249000f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b81c9fad863d21e8add560968543536af937987a4b599552e2426bce87927bd9b374942a2ff6fa3a05dd3e796c02a35231bdbad3447edb0c98b3940bca44709d
|
7
|
+
data.tar.gz: 4eae5de676b63375910b1a7e41615cba7e5f5d7562f71591e8da0f7c5b2314cb0ca7a455644c07d593b7de5baa1be0932b1d74d9ec9116bff15f513507435f8a
|
data/README.md
CHANGED
@@ -20,20 +20,6 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
## Development
|
26
|
-
|
27
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
28
|
-
|
29
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
30
|
-
|
31
|
-
## Contributing
|
32
|
-
|
33
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/study_the_map. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
34
|
-
|
35
|
-
|
36
|
-
## License
|
37
|
-
|
38
|
-
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
23
|
+
```require 'study_the_map'```
|
39
24
|
|
25
|
+
```App.start```
|
data/bin/study_the_map
CHANGED
data/lib/study_the_map.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
require "bundler/setup"
|
2
2
|
require "launchy"
|
3
3
|
require "rake"
|
4
|
-
require
|
5
|
-
|
6
|
-
require '
|
7
|
-
|
8
|
-
|
4
|
+
require 'pry'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'nokogiri'
|
7
|
+
|
8
|
+
require_relative "../lib/study_the_map/version"
|
9
|
+
require_relative '../lib/study_the_map/cli'
|
10
|
+
require_relative '../lib/study_the_map/lookupids'
|
11
|
+
require_relative '../lib/study_the_map/regions'
|
12
|
+
require_relative '../lib/study_the_map/ski_map'
|
13
|
+
require_relative '../lib/study_the_map/ski_map_scraper'
|
14
|
+
require_relative '../lib/study_the_map/region_scraper'
|
data/lib/study_the_map/cli.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
#CLI controller
|
2
|
-
|
2
|
+
class App
|
3
|
+
def self.start
|
4
|
+
StudyTheMap::CLI.new.call
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
3
8
|
class StudyTheMap::CLI
|
4
9
|
|
5
10
|
def call
|
@@ -10,6 +15,14 @@ class StudyTheMap::CLI
|
|
10
15
|
|
11
16
|
end
|
12
17
|
|
18
|
+
def list_map_years
|
19
|
+
|
20
|
+
@skimaps.area_info.scrape_map_data.each do |map|
|
21
|
+
puts map.search("yearPublished").text
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
13
26
|
def get_map
|
14
27
|
|
15
28
|
resort_name = nil
|
@@ -26,9 +39,11 @@ class StudyTheMap::CLI
|
|
26
39
|
|
27
40
|
get_areas
|
28
41
|
|
29
|
-
elsif
|
42
|
+
elsif RegionScraper.ski_area_list.include?(resort_name)
|
43
|
+
|
44
|
+
@skimaps = SkiMaps.new(resort_name)
|
45
|
+
self.map_count_and_pick(@skimaps.map_count)
|
30
46
|
|
31
|
-
SkiMaps.new(resort_name)
|
32
47
|
|
33
48
|
else
|
34
49
|
|
@@ -37,6 +52,75 @@ class StudyTheMap::CLI
|
|
37
52
|
end
|
38
53
|
end
|
39
54
|
|
55
|
+
def map_count_and_pick(map_count)
|
56
|
+
|
57
|
+
puts "There are #{map_count} maps for this ski area."
|
58
|
+
|
59
|
+
if map_count == "0"
|
60
|
+
|
61
|
+
StudyTheMap::CLI.new.call
|
62
|
+
|
63
|
+
elsif map_count == "1"
|
64
|
+
|
65
|
+
self.pick_map(self.get_map_years.join)
|
66
|
+
|
67
|
+
else
|
68
|
+
|
69
|
+
puts "Please wait while we fetch the maps' years..."
|
70
|
+
puts ""
|
71
|
+
|
72
|
+
self.list_map_years
|
73
|
+
map_years = @skimaps.area_info.scrape_map_years
|
74
|
+
|
75
|
+
input = nil
|
76
|
+
|
77
|
+
until map_years.include?(input)
|
78
|
+
puts ""
|
79
|
+
puts "Please pick a year that is listed."
|
80
|
+
input = gets.strip
|
81
|
+
end
|
82
|
+
|
83
|
+
pick_map(input)
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
def pick_map(year)
|
90
|
+
|
91
|
+
map_data = @skimaps.area_info.scrape_map_data.detect do |map|
|
92
|
+
map.search("yearPublished").text == year
|
93
|
+
end
|
94
|
+
|
95
|
+
begin
|
96
|
+
url = map_data.search("render").attr('url').text
|
97
|
+
rescue Exception
|
98
|
+
url = map_data.search("unprocessed").attr('url').text
|
99
|
+
end
|
100
|
+
|
101
|
+
puts "Would you like to download the Map to your working directory or see it in your browser?"
|
102
|
+
puts "Type 'browser', 'download', or 'exit'"
|
103
|
+
|
104
|
+
input = gets.strip
|
105
|
+
|
106
|
+
case input
|
107
|
+
|
108
|
+
when "download"
|
109
|
+
|
110
|
+
exec "curl -O #{url}"
|
111
|
+
puts "Enjoy your map!"
|
112
|
+
|
113
|
+
when "browser"
|
114
|
+
|
115
|
+
Launchy.open("#{url}")
|
116
|
+
puts "Enjoy your map!"
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
|
40
124
|
def get_areas
|
41
125
|
|
42
126
|
input = nil
|
@@ -74,8 +158,8 @@ class StudyTheMap::CLI
|
|
74
158
|
|
75
159
|
def region
|
76
160
|
|
77
|
-
|
78
|
-
while
|
161
|
+
region_name = nil
|
162
|
+
while region_name != "back"
|
79
163
|
|
80
164
|
puts "-----------------------------------------------------------------------"
|
81
165
|
puts "1. Input a region for a list of ski resorts, or"
|
@@ -85,23 +169,27 @@ class StudyTheMap::CLI
|
|
85
169
|
puts "3. Or 'back' to return to the main menu."
|
86
170
|
puts '-->'
|
87
171
|
|
88
|
-
|
172
|
+
region_name = gets.strip
|
173
|
+
|
174
|
+
if region_name == "back"
|
175
|
+
call
|
176
|
+
end
|
89
177
|
|
90
|
-
if
|
178
|
+
if region_name.size == 1
|
91
179
|
|
92
|
-
Region.starts_with(
|
180
|
+
Region.starts_with(region_name)
|
93
181
|
region
|
94
182
|
|
95
183
|
else
|
96
184
|
|
97
185
|
begin
|
98
186
|
|
99
|
-
region_object = Region.new(
|
187
|
+
region_object = Region.new(region_name)
|
100
188
|
region_object.full_list
|
101
189
|
|
102
190
|
rescue Exception
|
103
191
|
|
104
|
-
if
|
192
|
+
if region_name != "back"
|
105
193
|
puts '-----------------------------------------------------------------------'
|
106
194
|
puts "Not a valid region."
|
107
195
|
puts '-----------------------------------------------------------------------'
|
@@ -1,12 +1,10 @@
|
|
1
|
-
require 'pry'
|
2
|
-
require 'open-uri'
|
3
|
-
require 'nokogiri'
|
4
|
-
|
5
1
|
class LookupIDS
|
6
2
|
|
7
3
|
|
8
4
|
def self.index
|
5
|
+
|
9
6
|
doc = Nokogiri::XML(open("./lib/fixtures/index.xml"))
|
7
|
+
|
10
8
|
end
|
11
9
|
|
12
10
|
def self.find_region_id(region_name)
|
@@ -14,6 +12,7 @@ class LookupIDS
|
|
14
12
|
region_element = self.index.css("regions region").detect do |region|
|
15
13
|
region.text.strip == region_name
|
16
14
|
end
|
15
|
+
|
17
16
|
region_element['id']
|
18
17
|
|
19
18
|
end
|
@@ -23,6 +22,7 @@ class LookupIDS
|
|
23
22
|
ski_area_element = self.index.search("skiArea").detect do |ski_area|
|
24
23
|
ski_area.search("name").text.strip == area_name
|
25
24
|
end
|
25
|
+
|
26
26
|
ski_area_element['id']
|
27
27
|
|
28
28
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class RegionScraper
|
2
|
+
|
3
|
+
def initialize(region_name)
|
4
|
+
@url = "https://skimap.org/Regions/view/#{LookupIDS.find_region_id(region_name)}.xml"
|
5
|
+
end
|
6
|
+
|
7
|
+
def region_info
|
8
|
+
Nokogiri::XML(open(@url))
|
9
|
+
end
|
10
|
+
|
11
|
+
def scrape_ski_areas
|
12
|
+
self.region_info.search("skiArea").collect do |ski_area|
|
13
|
+
"#{ski_area.text}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.regions_list
|
18
|
+
|
19
|
+
LookupIDS.index.css("regions region").collect do |region|
|
20
|
+
region.text.strip
|
21
|
+
end.uniq
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.ski_area_list
|
26
|
+
|
27
|
+
LookupIDS.index.search("skiArea name").map {|ski_area| ski_area.text}
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -1,38 +1,29 @@
|
|
1
|
-
require './lib/study_the_map.rb'
|
2
1
|
|
3
2
|
class Region
|
4
3
|
|
5
|
-
attr_accessor :ski_areas, :region_id
|
4
|
+
attr_accessor :ski_areas , :region_id, :region_info
|
6
5
|
|
7
6
|
def initialize(region)
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
region_data = RegionScraper.new(region)
|
9
|
+
@region_info = region_data.region_info
|
10
|
+
|
11
|
+
self.region_id = @region_info.search("region").attr('id').text
|
12
|
+
|
11
13
|
|
12
14
|
puts "Here are the ski resorts in #{region}:"
|
13
15
|
|
14
|
-
self.ski_areas =
|
15
|
-
"#{ski_area.text}"
|
16
|
-
end
|
16
|
+
self.ski_areas = region_data.scrape_ski_areas
|
17
17
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.starts_with(letter)
|
21
21
|
# regions that start with
|
22
|
-
regions_starts_with_letter =
|
22
|
+
regions_starts_with_letter = RegionScraper.regions_list.select {|region_name| region_name.start_with?(letter.upcase)}
|
23
23
|
regions_starts_with_letter.each.with_index(1) {|region_name, index| puts "#{index}. #{region_name}"}
|
24
24
|
|
25
25
|
end
|
26
26
|
|
27
|
-
def starts_with(letter)
|
28
|
-
|
29
|
-
results = self.ski_areas.select do |area|
|
30
|
-
area.start_with?("#{letter}", "#{letter.upcase}")
|
31
|
-
end
|
32
|
-
|
33
|
-
results.each.with_index(1){|area, i| puts "#{i}. #{area}"}
|
34
|
-
|
35
|
-
end
|
36
27
|
|
37
28
|
def full_list
|
38
29
|
|
@@ -40,19 +31,4 @@ class Region
|
|
40
31
|
|
41
32
|
end
|
42
33
|
|
43
|
-
def self.regions_list
|
44
|
-
|
45
|
-
regions_list_array = []
|
46
|
-
LookupIDS.index.css("regions region").each do |region|
|
47
|
-
regions_list_array << region.text.strip
|
48
|
-
end
|
49
|
-
regions_list_array.uniq
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.ski_area_list
|
54
|
-
|
55
|
-
LookupIDS.index.search("skiArea name").map {|ski_area| ski_area.text}
|
56
|
-
|
57
|
-
end
|
58
34
|
end
|
@@ -1,130 +1,17 @@
|
|
1
|
-
require './lib/study_the_map.rb'
|
1
|
+
# require './lib/study_the_map.rb'
|
2
2
|
|
3
3
|
class SkiMaps
|
4
4
|
|
5
|
-
attr_accessor :area_name, :area_info
|
5
|
+
attr_accessor :area_name, :area_info, :map_count
|
6
6
|
|
7
7
|
def initialize(area_name)
|
8
8
|
|
9
9
|
@area_name = area_name
|
10
|
-
area_doc = Nokogiri::XML(open("https://skimap.org/SkiAreas/view/#{LookupIDS.find_ski_area_id(area_name)}.xml"))
|
11
|
-
|
12
|
-
@area_info = area_doc
|
13
10
|
|
14
|
-
|
11
|
+
@area_info = SkiMapScraper.new(area_name)
|
12
|
+
@map_count = @area_info.map_count
|
15
13
|
|
14
|
+
|
16
15
|
end
|
17
16
|
|
18
|
-
def map_count_and_pick
|
19
|
-
|
20
|
-
map_count = @area_info.search("skiMaps").attr('count').text
|
21
|
-
|
22
|
-
puts "There are #{map_count} maps for this ski area."
|
23
|
-
|
24
|
-
if map_count == "0"
|
25
|
-
|
26
|
-
StudyTheMap::CLI.new.call
|
27
|
-
|
28
|
-
elsif map_count == "1"
|
29
|
-
|
30
|
-
self.pick_map(self.get_map_years.join)
|
31
|
-
|
32
|
-
else
|
33
|
-
|
34
|
-
puts "Please wait while we fetch the maps' years..."
|
35
|
-
puts ""
|
36
|
-
|
37
|
-
self.list_map_years
|
38
|
-
map_years = self.get_map_years
|
39
|
-
|
40
|
-
input = nil
|
41
|
-
|
42
|
-
until map_years.include?(input)
|
43
|
-
puts ""
|
44
|
-
puts "Please pick a year that is listed."
|
45
|
-
input = gets.strip
|
46
|
-
end
|
47
|
-
|
48
|
-
pick_map(input)
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
def get_map_ids
|
55
|
-
|
56
|
-
id_array = []
|
57
|
-
|
58
|
-
@area_info.search("skiMaps skiMap").each do |map|
|
59
|
-
id_array << map.attr('id')
|
60
|
-
end
|
61
|
-
|
62
|
-
id_array
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
def get_map_data
|
67
|
-
|
68
|
-
map_data_array = []
|
69
|
-
|
70
|
-
self.get_map_ids.each do |id|
|
71
|
-
map_data_array << Nokogiri::XML(open("https://skimap.org/SkiMaps/view/#{id}.xml"))
|
72
|
-
end
|
73
|
-
|
74
|
-
map_data_array
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
def list_map_years
|
79
|
-
|
80
|
-
self.get_map_data.each do |map|
|
81
|
-
puts map.search("yearPublished").text
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
|
-
def get_map_years
|
87
|
-
|
88
|
-
map_years_array = []
|
89
|
-
|
90
|
-
self.get_map_data.each do |map|
|
91
|
-
map_years_array << map.search("yearPublished").text
|
92
|
-
end
|
93
|
-
|
94
|
-
map_years_array
|
95
|
-
|
96
|
-
end
|
97
|
-
|
98
|
-
def pick_map(year)
|
99
|
-
|
100
|
-
map_data = self.get_map_data.detect do |map|
|
101
|
-
map.search("yearPublished").text == year
|
102
|
-
end
|
103
|
-
|
104
|
-
begin
|
105
|
-
url = map_data.search("render").attr('url').text
|
106
|
-
rescue Exception
|
107
|
-
url = map_data.search("unprocessed").attr('url').text
|
108
|
-
end
|
109
|
-
|
110
|
-
puts "Would you like to download the Map to your working directory or see it in your browser?"
|
111
|
-
puts "Type 'browser', 'download', or 'exit'"
|
112
|
-
|
113
|
-
input = gets.strip
|
114
|
-
|
115
|
-
case input
|
116
|
-
|
117
|
-
when "download"
|
118
|
-
|
119
|
-
exec "curl -O #{url}"
|
120
|
-
puts "Enjoy your map!"
|
121
|
-
|
122
|
-
when "browser"
|
123
|
-
|
124
|
-
Launchy.open("#{url}")
|
125
|
-
puts "Enjoy your map!"
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
17
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class SkiMapScraper
|
2
|
+
|
3
|
+
def initialize(area_name)
|
4
|
+
@url = "https://skimap.org/SkiAreas/view/#{LookupIDS.find_ski_area_id(area_name)}.xml"
|
5
|
+
end
|
6
|
+
|
7
|
+
def area_info
|
8
|
+
Nokogiri::XML(open(@url))
|
9
|
+
end
|
10
|
+
|
11
|
+
def scrape_map_ids
|
12
|
+
|
13
|
+
id_array = []
|
14
|
+
|
15
|
+
self.area_info.search("skiMaps skiMap").each do |map|
|
16
|
+
id_array << map.attr('id')
|
17
|
+
end
|
18
|
+
|
19
|
+
id_array
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def scrape_map_data
|
24
|
+
|
25
|
+
self.scrape_map_ids.collect do |id|
|
26
|
+
Nokogiri::XML(open("https://skimap.org/SkiMaps/view/#{id}.xml"))
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def scrape_map_years
|
32
|
+
|
33
|
+
self.scrape_map_data.collect do |map|
|
34
|
+
map.search("yearPublished").text
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
def map_count
|
40
|
+
self.area_info.search("skiMaps").attr('count').text
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/study_the_map.gemspec
CHANGED
@@ -24,6 +24,6 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rspec", "~> 3.0"
|
25
25
|
spec.add_development_dependency "pry"
|
26
26
|
|
27
|
-
spec.
|
28
|
-
spec.
|
27
|
+
spec.add_runtime_dependency "launchy"
|
28
|
+
spec.add_runtime_dependency "nokogiri"
|
29
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: study_the_map
|
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
|
- bshap93
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,13 +67,13 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: launchy
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
|
-
type: :
|
76
|
+
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
@@ -81,13 +81,13 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: nokogiri
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
|
-
type: :
|
90
|
+
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
@@ -117,8 +117,10 @@ files:
|
|
117
117
|
- lib/study_the_map.rb
|
118
118
|
- lib/study_the_map/cli.rb
|
119
119
|
- lib/study_the_map/lookupids.rb
|
120
|
+
- lib/study_the_map/region_scraper.rb
|
120
121
|
- lib/study_the_map/regions.rb
|
121
122
|
- lib/study_the_map/ski_map.rb
|
123
|
+
- lib/study_the_map/ski_map_scraper.rb
|
122
124
|
- lib/study_the_map/version.rb
|
123
125
|
- study_the_map.gemspec
|
124
126
|
homepage: https://github.com/bshap93/study_the_map
|