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.
@@ -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,3 @@
1
+ module StudyTheMap
2
+ VERSION = "0.1.0"
3
+ 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: