study_the_map 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/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bin/study_the_map +6 -0
- data/lib/fixtures/index.xml +28153 -0
- data/lib/study_the_map/cli.rb +95 -0
- data/lib/study_the_map/lookupids.rb +31 -0
- data/lib/study_the_map/regions.rb +58 -0
- data/lib/study_the_map/ski_map.rb +83 -0
- data/lib/study_the_map/version.rb +3 -0
- data/lib/study_the_map.rb +8 -0
- data/study_the_map.gemspec +29 -0
- metadata +149 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
#CLI controller
|
2
|
+
require "./lib/study_the_map.rb"
|
3
|
+
class StudyTheMap::CLI
|
4
|
+
|
5
|
+
def call
|
6
|
+
get_areas
|
7
|
+
goodbye
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_map
|
11
|
+
resort_name = nil
|
12
|
+
while resort_name != 'back'
|
13
|
+
puts "1. Please enter the name of the ski area you would like the map for:"
|
14
|
+
puts '-----------------------------------------------------------------------'
|
15
|
+
puts "2. Or type 'back' to go back to the main menu."
|
16
|
+
puts '-->'
|
17
|
+
|
18
|
+
resort_name = gets.strip
|
19
|
+
if resort_name == 'back'
|
20
|
+
get_areas
|
21
|
+
elsif Region.ski_area_list.include?(resort_name)
|
22
|
+
SkiMaps.new(resort_name)
|
23
|
+
else
|
24
|
+
puts "Invalid ski area name"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_areas
|
31
|
+
|
32
|
+
input = nil
|
33
|
+
while input != 'exit'
|
34
|
+
puts "1. Select a region (type 'region') or Ski Resort (type 'resort') to study associated ski trail maps!"
|
35
|
+
puts '-----------------------------------------------------------------------'
|
36
|
+
puts "2. Or check out the world map to find resorts and trails: (type 'world')"
|
37
|
+
puts '-----------------------------------------------------------------------'
|
38
|
+
puts "3. Enter the area you would like to search:"
|
39
|
+
puts '-->'
|
40
|
+
|
41
|
+
input = gets.strip.downcase
|
42
|
+
case input
|
43
|
+
when "region"
|
44
|
+
region
|
45
|
+
when "world"
|
46
|
+
Launchy.open("http://openskimap.org/")
|
47
|
+
when "resort"
|
48
|
+
get_map
|
49
|
+
else
|
50
|
+
puts "Please enter 'region', 'resort', or 'world'"
|
51
|
+
puts '-----------------------------------------------------------------------'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
def region
|
58
|
+
region = nil
|
59
|
+
while region != "back"
|
60
|
+
puts "-----------------------------------------------------------------------"
|
61
|
+
puts "1. Input a region for a list of ski resorts, or"
|
62
|
+
puts '-----------------------------------------------------------------------'
|
63
|
+
puts "2. Request a list of regions by typing the letter the region you're looking for starts with,"
|
64
|
+
puts '-----------------------------------------------------------------------'
|
65
|
+
puts "3. Or 'back' to return to the main menu."
|
66
|
+
puts '-->'
|
67
|
+
|
68
|
+
region = gets.strip
|
69
|
+
|
70
|
+
if region.size == 1
|
71
|
+
Region.starts_with(region)
|
72
|
+
region
|
73
|
+
else
|
74
|
+
|
75
|
+
begin
|
76
|
+
region_object = Region.new(region)
|
77
|
+
region_object.full_list
|
78
|
+
rescue Exception
|
79
|
+
if region != "back"
|
80
|
+
puts '-----------------------------------------------------------------------'
|
81
|
+
puts "Not a valid region."
|
82
|
+
puts '-----------------------------------------------------------------------'
|
83
|
+
end
|
84
|
+
region
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def goodbye
|
93
|
+
puts "Come back anytime for more maps!"
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'pry'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
class LookupIDS
|
6
|
+
|
7
|
+
|
8
|
+
def self.index
|
9
|
+
doc = Nokogiri::XML(open("./lib/fixtures/index.xml"))
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.find_region_id(region_name)
|
13
|
+
|
14
|
+
region_element = self.index.css("regions region").detect do |region|
|
15
|
+
region.text.strip == region_name
|
16
|
+
end
|
17
|
+
region_element['id']
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.find_ski_area_id(area_name)
|
22
|
+
|
23
|
+
ski_area_element = self.index.search("skiArea").detect do |ski_area|
|
24
|
+
ski_area.search("name").text.strip == area_name
|
25
|
+
end
|
26
|
+
ski_area_element['id']
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require './lib/study_the_map.rb'
|
2
|
+
|
3
|
+
class Region
|
4
|
+
|
5
|
+
attr_accessor :ski_areas, :region_id
|
6
|
+
|
7
|
+
def initialize(region)
|
8
|
+
|
9
|
+
doc = Nokogiri::XML(open("https://skimap.org/Regions/view/#{LookupIDS.find_region_id(region)}.xml"))
|
10
|
+
self.region_id = doc.search("region").attr('id').text
|
11
|
+
|
12
|
+
puts "Here are the ski resorts in #{region}:"
|
13
|
+
|
14
|
+
self.ski_areas = doc.search("skiArea").collect do |ski_area|
|
15
|
+
"#{ski_area.text}"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.starts_with(letter)
|
21
|
+
# regions that start with
|
22
|
+
regions_starts_with_letter = self.regions_list.select {|region_name| region_name.start_with?(letter.upcase)}
|
23
|
+
regions_starts_with_letter.each.with_index(1) {|region_name, index| puts "#{index}. #{region_name}"}
|
24
|
+
|
25
|
+
end
|
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
|
+
|
37
|
+
def full_list
|
38
|
+
|
39
|
+
self.ski_areas.each.with_index(1){|area, i| puts "#{i}. #{area}"}
|
40
|
+
|
41
|
+
end
|
42
|
+
|
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
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require './lib/study_the_map.rb'
|
2
|
+
|
3
|
+
class SkiMaps
|
4
|
+
|
5
|
+
attr_accessor :area_name, :area_info
|
6
|
+
|
7
|
+
def initialize(area_name)
|
8
|
+
@area_name = area_name
|
9
|
+
area_doc = Nokogiri::XML(open("https://skimap.org/SkiAreas/view/#{LookupIDS.find_ski_area_id(area_name)}.xml"))
|
10
|
+
@area_info = area_doc
|
11
|
+
map_count = area_doc.search("skiMaps").attr('count').text
|
12
|
+
puts "There are #{map_count} maps for this ski area."
|
13
|
+
if map_count == "0"
|
14
|
+
StudyTheMap::CLI.new.call
|
15
|
+
elsif map_count == "1"
|
16
|
+
self.pick_map(self.get_map_years.join)
|
17
|
+
else
|
18
|
+
puts "Please wait while we fetch the maps' years..."
|
19
|
+
puts ""
|
20
|
+
self.list_map_years
|
21
|
+
map_years = self.get_map_years
|
22
|
+
input = nil
|
23
|
+
until map_years.include?(input)
|
24
|
+
puts ""
|
25
|
+
puts "Please pick a year that is listed."
|
26
|
+
input = gets.strip
|
27
|
+
end
|
28
|
+
self.pick_map(input)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_map_ids
|
33
|
+
id_array = []
|
34
|
+
@area_info.search("skiMaps skiMap").each do |map|
|
35
|
+
id_array << map.attr('id')
|
36
|
+
end
|
37
|
+
id_array
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_map_data
|
41
|
+
map_data_array = []
|
42
|
+
self.get_map_ids.each do |id|
|
43
|
+
map_data_array << Nokogiri::XML(open("https://skimap.org/SkiMaps/view/#{id}.xml"))
|
44
|
+
end
|
45
|
+
map_data_array
|
46
|
+
end
|
47
|
+
|
48
|
+
def list_map_years
|
49
|
+
self.get_map_data.each do |map|
|
50
|
+
puts map.search("yearPublished").text
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_map_years
|
55
|
+
map_years_array = []
|
56
|
+
self.get_map_data.each do |map|
|
57
|
+
map_years_array << map.search("yearPublished").text
|
58
|
+
end
|
59
|
+
map_years_array
|
60
|
+
end
|
61
|
+
|
62
|
+
def pick_map(year)
|
63
|
+
map_data = self.get_map_data.detect do |map|
|
64
|
+
map.search("yearPublished").text == year
|
65
|
+
end
|
66
|
+
begin
|
67
|
+
url = map_data.search("render").attr('url').text
|
68
|
+
rescue Exception
|
69
|
+
url = map_data.search("unprocessed").attr('url').text
|
70
|
+
end
|
71
|
+
puts "Would you like to download the Map to your working directory or see it in your browser?"
|
72
|
+
puts "Type 'browser', 'download', or 'exit'"
|
73
|
+
input = gets.strip
|
74
|
+
case input
|
75
|
+
when "download"
|
76
|
+
exec "curl -O #{url}"
|
77
|
+
puts "Enjoy your map!"
|
78
|
+
when "browser"
|
79
|
+
Launchy.open("#{url}")
|
80
|
+
puts "Enjoy your map!"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require "launchy"
|
3
|
+
require "rake"
|
4
|
+
require "./lib/study_the_map/version.rb"
|
5
|
+
require_relative './study_the_map/cli'
|
6
|
+
require './lib/study_the_map/lookupids.rb'
|
7
|
+
require './lib/study_the_map/regions.rb'
|
8
|
+
require './lib/study_the_map/ski_map.rb'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'study_the_map/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "study_the_map"
|
8
|
+
spec.version = StudyTheMap::VERSION
|
9
|
+
spec.authors = ["bshap93"]
|
10
|
+
spec.email = ["benihana858@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = "A Ski Map Fetcher"
|
13
|
+
spec.description = "This gem will gather skiing trail maps from skimap.org, allowing you to find and download maps from sites for resorts across the world."
|
14
|
+
spec.homepage = "https://github.com/bshap93/study_the_map"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
25
|
+
spec.add_development_dependency "pry"
|
26
|
+
|
27
|
+
spec.add_development_dependency "nokogiri"
|
28
|
+
spec.add_development_dependency "launchy"
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: study_the_map
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- bshap93
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-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.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
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: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: launchy
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: This gem will gather skiing trail maps from skimap.org, allowing you
|
98
|
+
to find and download maps from sites for resorts across the world.
|
99
|
+
email:
|
100
|
+
- benihana858@gmail.com
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- ".rspec"
|
107
|
+
- ".travis.yml"
|
108
|
+
- CODE_OF_CONDUCT.md
|
109
|
+
- Gemfile
|
110
|
+
- LICENSE.txt
|
111
|
+
- README.md
|
112
|
+
- Rakefile
|
113
|
+
- bin/console
|
114
|
+
- bin/setup
|
115
|
+
- bin/study_the_map
|
116
|
+
- lib/fixtures/index.xml
|
117
|
+
- lib/study_the_map.rb
|
118
|
+
- lib/study_the_map/cli.rb
|
119
|
+
- lib/study_the_map/lookupids.rb
|
120
|
+
- lib/study_the_map/regions.rb
|
121
|
+
- lib/study_the_map/ski_map.rb
|
122
|
+
- lib/study_the_map/version.rb
|
123
|
+
- study_the_map.gemspec
|
124
|
+
homepage: https://github.com/bshap93/study_the_map
|
125
|
+
licenses:
|
126
|
+
- MIT
|
127
|
+
metadata: {}
|
128
|
+
post_install_message:
|
129
|
+
rdoc_options: []
|
130
|
+
require_paths:
|
131
|
+
- lib
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 2.4.5.1
|
145
|
+
signing_key:
|
146
|
+
specification_version: 4
|
147
|
+
summary: A Ski Map Fetcher
|
148
|
+
test_files: []
|
149
|
+
has_rdoc:
|