top-travel-destinations-cli-gem 1.2.0 → 1.3.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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +6 -5
- data/config/environment.rb +2 -1
- data/lib/top_travel_destinations/cli.rb +49 -19
- data/lib/top_travel_destinations/destination.rb +23 -0
- data/lib/top_travel_destinations/region.rb +48 -9
- data/lib/top_travel_destinations/scraper.rb +4 -4
- data/lib/top_travel_destinations/version.rb +1 -1
- data/top-travel-destinations-cli-gem-1.2.0.gem +0 -0
- metadata +4 -3
- data/pkg/top-travel-destinations-cli-gem-1.2.0.gem +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 41c5b40a871276d4b88a3596a8ad47927f4e05db
|
|
4
|
+
data.tar.gz: d98d9d4c25ba8a46f7a1531df6520fb2b6440c54
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ddac693af27ea32d6c9a9c642f41f7b9619592a1fa68cb350cbe40b51ea7d8890c951ff5903e13fa8c1b748cc83cfe9e5058e1ee9d1b44753ed91d5fb13ca988
|
|
7
|
+
data.tar.gz: 7479d3c7c958a724e847a40204d20b5b948e52cc274e9ff76d59914ef12dde84ce8ee317bd4598288489ce9867693a18f0cdaf4577c7aaf1cd50031df37ab8d1
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# TopTravelDestinations
|
|
2
2
|
|
|
3
|
-
Welcome to the Top Travel Destinations CLI gem! This gem was inspired by a love for traveling the world and learning about new cultures and experiences. The gem uses information from the TripAdvisor Travelers' Choice Destinations website (http://www.tripadvisor.com/TravelersChoice-Destinations) to provide you with easy-access to
|
|
3
|
+
Welcome to the Top Travel Destinations CLI gem! This gem was inspired by a love for traveling the world and learning about new cultures and experiences. The gem uses information from the TripAdvisor Travelers' Choice Destinations website (http://www.tripadvisor.com/TravelersChoice-Destinations) to provide you with easy-access to three levels of information: (1) the regions of the world; (2) the top destinations of that region; and (3) a description of each top destination, as provided by TripAdvisor. The world is your oyster. Safe travels and thank you for using the Top Travel Destinations CLI gem.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -22,10 +22,11 @@ Or install it yourself as:
|
|
|
22
22
|
|
|
23
23
|
The Top Travel Destinations CLI gem has simple instructions:
|
|
24
24
|
1) At the "Here are the Regions of the World" prompt, enter an alphanumeric number (i.e., 1-9) to select a region.
|
|
25
|
-
2)
|
|
26
|
-
3)
|
|
27
|
-
(a)'
|
|
28
|
-
(b) '
|
|
25
|
+
2) At the "Here are the Top Travel Destinations For the Region" prompt, enter an alphanumeric number to select a destination.
|
|
26
|
+
3) Other options for viewing various menus, include:
|
|
27
|
+
(a) 'regions' to return to the list of regions;
|
|
28
|
+
(b) 'destinations' to return to the list of destinations for a region;
|
|
29
|
+
(c) 'exit' to leave the gem.
|
|
29
30
|
|
|
30
31
|
## Development
|
|
31
32
|
|
data/config/environment.rb
CHANGED
|
@@ -5,4 +5,5 @@ require 'open-uri'
|
|
|
5
5
|
require_relative "../lib/top_travel_destinations/version"
|
|
6
6
|
require_relative '../lib/top_travel_destinations/cli'
|
|
7
7
|
require_relative '../lib/top_travel_destinations/scraper'
|
|
8
|
-
require_relative '../lib/top_travel_destinations/region'
|
|
8
|
+
require_relative '../lib/top_travel_destinations/region'
|
|
9
|
+
require_relative '../lib/top_travel_destinations/destination'
|
|
@@ -2,9 +2,8 @@ class TopTravelDestinations::CLI
|
|
|
2
2
|
|
|
3
3
|
def call
|
|
4
4
|
welcome_screen
|
|
5
|
-
|
|
5
|
+
make_regions_and_destinations
|
|
6
6
|
list_regions
|
|
7
|
-
select_region
|
|
8
7
|
end
|
|
9
8
|
|
|
10
9
|
def welcome_screen
|
|
@@ -21,9 +20,10 @@ class TopTravelDestinations::CLI
|
|
|
21
20
|
puts " `-....-'"
|
|
22
21
|
end
|
|
23
22
|
|
|
24
|
-
def
|
|
25
|
-
|
|
26
|
-
TopTravelDestinations::Region.create_from_array(
|
|
23
|
+
def make_regions_and_destinations
|
|
24
|
+
regions_array = TopTravelDestinations::Region.get_regions
|
|
25
|
+
TopTravelDestinations::Region.create_from_array(regions_array)
|
|
26
|
+
#Destination instances are instantiated within the Region Class, after each Region instance is instantiated
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def list_regions
|
|
@@ -32,40 +32,69 @@ class TopTravelDestinations::CLI
|
|
|
32
32
|
TopTravelDestinations::Region.all.each_with_index do |region, index|
|
|
33
33
|
puts "#{index+1}. #{region.name}"
|
|
34
34
|
end
|
|
35
|
+
select_region
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
def select_region
|
|
38
|
-
input = nil
|
|
39
|
-
while input != "exit"
|
|
39
|
+
#input = nil
|
|
40
|
+
#while input != "exit"
|
|
40
41
|
puts "\n"
|
|
41
|
-
puts "Enter the number of the region for which you would like the Top Travel Destinations."
|
|
42
|
-
puts "Enter '
|
|
42
|
+
puts "Enter the number of the region (1-#{TopTravelDestinations::Region.all.count}) for which you would like the Top Travel Destinations."
|
|
43
|
+
puts "Enter 'regions' to see the regions again OR type 'exit'."
|
|
43
44
|
input = gets.strip.downcase
|
|
44
45
|
if (1..TopTravelDestinations::Region.all.count).to_a.include?(input.to_i)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
elsif input == "
|
|
46
|
+
region_index = input.to_i-1
|
|
47
|
+
list_destinations(region_index)
|
|
48
|
+
elsif input == "regions"
|
|
48
49
|
list_regions
|
|
50
|
+
select_region
|
|
49
51
|
elsif input == "exit"
|
|
50
52
|
goodbye
|
|
51
53
|
else
|
|
52
54
|
puts "\n"
|
|
53
55
|
puts "Please input a valid command."
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
select_region
|
|
57
|
+
end #end if statement
|
|
58
|
+
#end #end while loop
|
|
56
59
|
end #end method
|
|
57
60
|
|
|
58
|
-
def
|
|
59
|
-
|
|
60
|
-
region_instance = TopTravelDestinations::Region.all[index_value]
|
|
61
|
+
def list_destinations(region_index)
|
|
62
|
+
region = TopTravelDestinations::Region.all[region_index]
|
|
61
63
|
puts "\n"
|
|
62
|
-
puts "
|
|
64
|
+
puts "Here are the Top #{region.destinations.count} Travel Destinations For the #{region.name} Region:"
|
|
63
65
|
counter = 1
|
|
64
|
-
|
|
66
|
+
region.destination_names.each do |destination|
|
|
65
67
|
puts "#{counter}. #{destination}"
|
|
66
68
|
counter +=1
|
|
67
69
|
end
|
|
70
|
+
select_destination(region_index)
|
|
68
71
|
end
|
|
72
|
+
|
|
73
|
+
def select_destination(region_index)
|
|
74
|
+
region = TopTravelDestinations::Region.all[region_index]
|
|
75
|
+
puts "\n"
|
|
76
|
+
puts "Enter the number of the Top #{region.name} Travel Destination (1-#{region.destinations.count}) for which you would like a description."
|
|
77
|
+
puts "Enter 'destinations' to see the list of #{region.name} destinations again OR 'regions' to go back to the regions OR 'exit'."
|
|
78
|
+
input = gets.strip.downcase
|
|
79
|
+
if input == "regions"
|
|
80
|
+
list_regions
|
|
81
|
+
elsif input == "destinations"
|
|
82
|
+
list_destinations(region_index)
|
|
83
|
+
elsif input == "exit"
|
|
84
|
+
goodbye
|
|
85
|
+
elsif (1..region.destinations.count).to_a.include?(input.to_i)
|
|
86
|
+
destination_index = input.to_i-1
|
|
87
|
+
puts "\n"
|
|
88
|
+
puts "Destination: #{region.destinations[destination_index].name}, Region: #{region.name}"
|
|
89
|
+
puts "\n"
|
|
90
|
+
puts "Summary: #{region.destinations[destination_index].description}"
|
|
91
|
+
select_destination(region_index)
|
|
92
|
+
else
|
|
93
|
+
puts "\n"
|
|
94
|
+
puts "Please input a valid command."
|
|
95
|
+
select_destination(region_index)
|
|
96
|
+
end #end if statement
|
|
97
|
+
end #end method
|
|
69
98
|
|
|
70
99
|
def goodbye
|
|
71
100
|
puts "\n"
|
|
@@ -80,6 +109,7 @@ class TopTravelDestinations::CLI
|
|
|
80
109
|
_/____/
|
|
81
110
|
|
|
82
111
|
DOC
|
|
112
|
+
puts " Information from TripAdvisor"
|
|
83
113
|
end
|
|
84
114
|
|
|
85
115
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class TopTravelDestinations::Destination
|
|
2
|
+
|
|
3
|
+
#creates "belongs to" relationship to instance of Region
|
|
4
|
+
attr_accessor :name, :region, :description
|
|
5
|
+
|
|
6
|
+
@@all = []
|
|
7
|
+
|
|
8
|
+
def initialize(destination_hash)
|
|
9
|
+
self.create_attributes_from_hash(destination_hash)
|
|
10
|
+
self.class.all << self
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def create_attributes_from_hash(destination_hash)
|
|
14
|
+
destination_hash.each do |key, value|
|
|
15
|
+
self.send(("#{key}="), value)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.all
|
|
20
|
+
@@all
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -11,8 +11,8 @@ class TopTravelDestinations::Region
|
|
|
11
11
|
self.class.all << self
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def self.create_from_array(
|
|
15
|
-
|
|
14
|
+
def self.create_from_array(regions_array)
|
|
15
|
+
regions_array.each do |region_hash|
|
|
16
16
|
TopTravelDestinations::Region.new(region_hash)
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -31,18 +31,57 @@ class TopTravelDestinations::Region
|
|
|
31
31
|
@@all
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
def self.get_regions
|
|
35
|
+
TopTravelDestinations::Scraper.scrape_regions_array
|
|
36
|
+
end
|
|
37
|
+
|
|
34
38
|
def get_destinations
|
|
39
|
+
destinations_array = self.scrape_destinations_array
|
|
40
|
+
self.add_destinations(destinations_array)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def scrape_destinations_array
|
|
35
44
|
html = open(self.region_url)
|
|
36
45
|
doc = Nokogiri::HTML(html)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
|
|
47
|
+
destinations_array = []
|
|
48
|
+
|
|
49
|
+
doc.css("div#WINNERVIEWER").children.each do |destination|
|
|
50
|
+
name = destination.search("div.mainName a").text
|
|
51
|
+
description = destination.search("div.descr_lb").text
|
|
52
|
+
|
|
53
|
+
if name != "" && description !=""
|
|
54
|
+
destinations_array << {
|
|
55
|
+
:name => name,
|
|
56
|
+
:description => description}
|
|
57
|
+
end
|
|
58
|
+
end #end iterator
|
|
59
|
+
destinations_array
|
|
60
|
+
end #end method
|
|
61
|
+
|
|
62
|
+
#creates "has many" relationship to instance of Region
|
|
63
|
+
def add_destinations(destinations_array)
|
|
64
|
+
destinations_array.each do |destination_hash|
|
|
65
|
+
destination = TopTravelDestinations::Destination.new(destination_hash)
|
|
66
|
+
self.destinations << destination
|
|
67
|
+
destination.region = self
|
|
68
|
+
end
|
|
42
69
|
end
|
|
43
70
|
|
|
44
|
-
def
|
|
45
|
-
|
|
71
|
+
def destination_names
|
|
72
|
+
destinations_names_array = []
|
|
73
|
+
self.destinations.each do |destination|
|
|
74
|
+
destinations_names_array << destination.name
|
|
75
|
+
end
|
|
76
|
+
destinations_names_array
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def destination_descriptions
|
|
80
|
+
destinations_descriptions_array = []
|
|
81
|
+
self.destinations.each do |destination|
|
|
82
|
+
destinations_descriptions_array << destination.description
|
|
83
|
+
end
|
|
84
|
+
destinations_descriptions_array
|
|
46
85
|
end
|
|
47
86
|
|
|
48
87
|
end
|
|
@@ -5,17 +5,17 @@ class TopTravelDestinations::Scraper
|
|
|
5
5
|
html = open(index_url)
|
|
6
6
|
doc = Nokogiri::HTML(html)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
regions_array = []
|
|
9
9
|
|
|
10
|
-
doc.search("
|
|
10
|
+
doc.search("div.cont a").collect do |regionnode|
|
|
11
11
|
name = regionnode.text
|
|
12
12
|
sub_url = regionnode.attribute("href").value
|
|
13
|
-
|
|
13
|
+
regions_array << {
|
|
14
14
|
:name => name,
|
|
15
15
|
:region_url => "https://www.tripadvisor.com#{sub_url}"
|
|
16
16
|
}
|
|
17
17
|
end #end iterator
|
|
18
|
-
|
|
18
|
+
regions_array
|
|
19
19
|
end #end method
|
|
20
20
|
|
|
21
21
|
end #end Class
|
|
Binary file
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: top-travel-destinations-cli-gem
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Antonio David
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-03-
|
|
11
|
+
date: 2016-03-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -99,12 +99,13 @@ files:
|
|
|
99
99
|
- bin/top-travel-destinations
|
|
100
100
|
- config/environment.rb
|
|
101
101
|
- lib/top_travel_destinations/cli.rb
|
|
102
|
+
- lib/top_travel_destinations/destination.rb
|
|
102
103
|
- lib/top_travel_destinations/region.rb
|
|
103
104
|
- lib/top_travel_destinations/scraper.rb
|
|
104
105
|
- lib/top_travel_destinations/version.rb
|
|
105
|
-
- pkg/top-travel-destinations-cli-gem-1.2.0.gem
|
|
106
106
|
- top-travel-destinations-cli-gem-1.0.0.gem
|
|
107
107
|
- top-travel-destinations-cli-gem-1.1.0.gem
|
|
108
|
+
- top-travel-destinations-cli-gem-1.2.0.gem
|
|
108
109
|
- top_travel_destinations.gemspec
|
|
109
110
|
homepage: https://github.com/agdavid/top-travel-destinations-cli-gem
|
|
110
111
|
licenses:
|
|
Binary file
|