best-nomad-cities 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 92f33468eac7eb1d083fbc45ebfdf096b2b708b5
4
+ data.tar.gz: 786012d5adac6edb26621490ae510d1ea6cfbf9d
5
+ SHA512:
6
+ metadata.gz: 952cf0dbd1df953edaa10144ac427254fe17ea445e680ce5a768f61eee61c83fa18d00c3885e1d5bf11bb2861576b99fd3b12db8f3d6394baa519327f1b8dfa1
7
+ data.tar.gz: d45c68e71ada9a0819f2f688220be8e88b8155249209dae2566c381e03c0c88391532a341ecb326a607d5c20e7318bcfd703cbad144643bbe0b7e8c0a8c8a7a0
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/best_nomad_cities'
4
+
5
+ BestNomadCities::CLI.new.call
@@ -0,0 +1,7 @@
1
+ require 'nokogiri'
2
+ require 'open-uri'
3
+ require 'pry'
4
+
5
+ require_relative '../lib/best_nomad_cities/scraper'
6
+ require_relative '../lib/best_nomad_cities/city'
7
+ require_relative '../lib/best_nomad_cities/cli'
@@ -0,0 +1,4 @@
1
+ module BestNomadCities
2
+ end
3
+
4
+ require_relative '../config/environment'
@@ -0,0 +1,34 @@
1
+ class BestNomadCities::City
2
+ attr_accessor :name, :rank, :country, :cost, :internet_speed, :weather, :link, :tg_link
3
+
4
+ @@all = []
5
+
6
+ def self.new_from_home_page(city)
7
+ self.new(
8
+ city.css("h2").text,
9
+ city.css("h3").text,
10
+ city.css(".rank").text,
11
+ city.css(".bottom-right").text,
12
+ city.css(".top-right").text,
13
+ "#{city.css(".metric").text} / #{city.css(".imperial").text}",
14
+ city.css('a').attribute('href').value,
15
+ "#{city.css('a').attribute('href').value}/travel-guide"
16
+ )
17
+ end
18
+
19
+ def initialize(name = nil, country = nil, rank = nil, cost = nil, internet_speed = nil, weather = nil, link = nil, tg_link = nil )
20
+ @name = name
21
+ @country = country
22
+ @rank = rank
23
+ @cost = cost
24
+ @internet_speed = internet_speed
25
+ @weather = weather
26
+ @link = link
27
+ @tg_link = tg_link
28
+ @@all << self
29
+ end
30
+
31
+ def self.all
32
+ @@all
33
+ end
34
+ end
@@ -0,0 +1,96 @@
1
+ class BestNomadCities::CLI
2
+ def call
3
+ BestNomadCities::Scraper.new.make_cities
4
+ puts 'Welcome to Best Nomad Cities'
5
+ start
6
+ end
7
+
8
+ def start
9
+ puts ''
10
+ puts 'What would you like to do?'
11
+ puts ''
12
+ puts '1. See a ranked list of nomad cities?'
13
+ puts '2. Search for a city by name?'
14
+ puts '3. Exit'
15
+ puts ''
16
+ choice = gets.strip.to_i
17
+
18
+ if choice == 1
19
+ puts ''
20
+ puts 'How many cities would you like in your list?'
21
+ puts ''
22
+ amount = gets.strip.to_i
23
+ print_cities(amount)
24
+ puts ''
25
+ puts 'Please enter city name or number for more information.'
26
+ search = gets.strip
27
+ search_city_by_name_or_number(search)
28
+ puts ''
29
+ puts 'Would you like to see other cities? (Y or N)'
30
+ puts ''
31
+ y_or_n = gets.strip
32
+ if y_or_n == 'Y'
33
+ start
34
+ else
35
+ puts ''
36
+ puts "'Don't listen to what they say. GO SEE!'"
37
+ exit
38
+ end
39
+ elsif choice == 2
40
+ puts ''
41
+ puts 'Please enter city name.'
42
+ puts ''
43
+ search = gets.strip
44
+ search_city_by_name_or_number(search)
45
+ puts ''
46
+ puts 'Would you like to see other cities? (Y or N)'
47
+ puts ''
48
+ y_or_n = gets.strip
49
+ if y_or_n == 'Y'
50
+ start
51
+ else
52
+ puts ''
53
+ puts "'Don't listen to what they say. GO SEE!'"
54
+ exit
55
+ end
56
+ elsif choice == 3
57
+ puts ''
58
+ puts "'A good traveller has no fixed plans and is not intent on arriving.' - Lao Tzu"
59
+ exit
60
+ else
61
+ puts ''
62
+ puts "If at first you don't succeed, try again."
63
+ start
64
+ end
65
+ end
66
+
67
+ def print_cities(amount)
68
+ puts ''
69
+ puts "---------- Top #{amount} Nomad Cities ----------"
70
+ puts ''
71
+ BestNomadCities::City.all[0, amount].each.with_index(1) do |city, index|
72
+ puts "#{index}. #{city.name}, #{city.country}"
73
+ end
74
+ puts ''
75
+ end
76
+
77
+ def search_city_by_name_or_number(search)
78
+ if search.length > 3
79
+ found_city = BestNomadCities::City.all.detect { |city| city.name.start_with?(search) }
80
+ else
81
+ found_city = BestNomadCities::City.all[search.to_i - 1]
82
+ end
83
+ puts ''
84
+ puts "---------- City: #{found_city.name} ----------"
85
+ puts ''
86
+ puts "Global nomad rank: #{found_city.rank}"
87
+ puts "Country: #{found_city.country}"
88
+ puts "Nomad cost: #{found_city.cost}"
89
+ puts "Internet speed: #{found_city.internet_speed}"
90
+ puts "Weather (now): #{found_city.weather}"
91
+ puts "Link to city page: #{found_city.link}"
92
+ puts "Link to travel guide: #{found_city.tg_link}"
93
+ puts ''
94
+ puts "Hold 'cmd' on Mac to click the links."
95
+ end
96
+ end
@@ -0,0 +1,16 @@
1
+ class BestNomadCities::Scraper
2
+
3
+ def get_home_page
4
+ Nokogiri::HTML(open('fixtures/html/nomadlist.html'))
5
+ end
6
+
7
+ def get_cities
8
+ self.get_home_page.css("div[data-i]")
9
+ end
10
+
11
+ def make_cities
12
+ self.get_cities.each do |city|
13
+ BestNomadCities::City.new_from_home_page(city)
14
+ end
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: best-nomad-cities
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Henno Fourie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-16 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.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
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: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
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: pry
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
+ description: Provides a list of the top Nomad Cities from around the world.
84
+ email: bortch@gmail.com
85
+ executables:
86
+ - best-nomad-cities
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - bin/best-nomad-cities
91
+ - config/environment.rb
92
+ - lib/best_nomad_cities.rb
93
+ - lib/best_nomad_cities/city.rb
94
+ - lib/best_nomad_cities/cli.rb
95
+ - lib/best_nomad_cities/scraper.rb
96
+ homepage: http://rubygems.org/gems/best-nomad-cities
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.6.10
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: Best Nomad Cities
120
+ test_files: []