countries_cli 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79f4953d1076809ac1809fe5f801afb92f8307b4
4
- data.tar.gz: 15042fc62974315d674ead0f43e1216586abb96b
3
+ metadata.gz: 2050fe1a4e0b494c19b10d3e3012b08252655184
4
+ data.tar.gz: 792c7edd5c30702b5245cb9d957e693d3e2da4e3
5
5
  SHA512:
6
- metadata.gz: b9375d51f042990934df28d69dca579335c7c0c985d0897f286df1eb15c364ad3598ef19193f85c80f869a2ec3e15c21ec060950ff77c39ac2358ee2e5918a03
7
- data.tar.gz: 38fe584196d70632ee11369675438fa21c67e1d7ecc25f5185a870ac2a130067bfe7d9655a12485da062daf19350fca06b1d9ba4c46422556a4f5605a3cfe3eb
6
+ metadata.gz: 862c49ca41e6b71373083ce373bdc49f134f510da29bd744d663838f39b07d92bee34eace557cccddf9ebb07c7d0e4996806b26cdfaf965b066b459d74065c43
7
+ data.tar.gz: 61a056599c7ba808fbc4cd4ad40dda52e92b2d912b973f9608f6bf25b8e5364abaecbeec758bcf2b80a554ed56c4cca727e1e23be27f7b8c36470285b5d2f086
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- countries_cli (0.1.1)
4
+ countries_cli (0.1.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/bin/country CHANGED
@@ -3,4 +3,5 @@
3
3
  require "bundler/setup"
4
4
  require "Country"
5
5
 
6
- Country::CLI.new.call
6
+ controller = Country::CLI.new
7
+ controller.call
data/lib/Country.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  require_relative "./Country/version"
2
2
  require_relative "./Country/cli"
3
+ require_relative "./Country/country"
3
4
  require "open-uri"
4
5
  require "json"
5
- require "pry"
6
+ require "pry"
7
+
8
+ module Country
9
+
10
+ end
data/lib/Country/cli.rb CHANGED
@@ -1,30 +1,49 @@
1
+ require_relative 'country'
2
+ require 'pry'
3
+ require 'open-uri'
4
+ require 'json'
1
5
  # CLI Controller
2
6
  class Country::CLI
7
+
8
+ def initialize()
9
+ # Get all countries from API in JSON format
10
+ page = open("https://restcountries.eu/rest/v2/all")
11
+ countries = JSON.parse(page.read)
12
+ # Parse JSON to objects
13
+ countries.each do |country|
14
+ Country::COUNTRY.new(country)
15
+ end
16
+ end
3
17
 
4
18
  def call
5
19
  puts "Information about countries around the world!"
6
- user_input = nil
7
- while(user_input != 10)
20
+ display_options
21
+ user_input = gets.chomp.to_i
22
+ while(user_input != 12)
8
23
  case user_input
9
24
  when 1
10
- puts "In development"
25
+ list_all_country_names
11
26
  when 2
12
- puts "In development"
27
+ search_by_name
13
28
  when 3
14
- puts "In development"
29
+ search_by_suffix
15
30
  when 4
16
- puts "In development"
31
+ search_by_currency_name
17
32
  when 5
18
- puts "In development"
33
+ search_by_currency_symbol
19
34
  when 6
20
- puts "In development"
35
+ search_by_language
21
36
  when 7
22
- puts "In development"
37
+ search_by_certain_population
23
38
  when 8
24
- puts "In development"
39
+ list_all_countries_sorted_by_population
25
40
  when 9
26
- puts "In development"
41
+ search_by_capital
27
42
  when 10
43
+ search_by_region
44
+ when 11
45
+ search_by_subregion
46
+ when 12
28
47
  else
29
48
  puts "Option does not exist. Please enter a correct option."
30
49
  end
@@ -35,20 +54,172 @@ class Country::CLI
35
54
  end
36
55
 
37
56
  def display_options
38
- puts "Enter an option (1-10): "
57
+ puts "Enter an option (1-12): "
39
58
  puts "1. All country names"
40
59
  puts "2. Search country by name"
41
60
  puts "3. Search countries that start with given letter"
42
- puts "4. Search countries with given currency symbol"
43
- puts "5. Search countries with given language"
44
- puts "6. Search countries with certain population: highest, lowest, higher or lower than a given"
45
- puts "7. search by capital"
46
- puts "8. search by region"
47
- puts "9. search by subregion"
48
- puts "10. exit"
61
+ puts "4. Search countries with given currency name"
62
+ puts "5. Search countries with given currency symbol"
63
+ puts "6. Search countries with given language"
64
+ puts "7. Search countries with certain population"
65
+ puts "8. All countries sorted by population(ascending or descending)"
66
+ puts "9. Search by capital"
67
+ puts "10. Search by region"
68
+ puts "11. Search by subregion"
69
+ puts "12. Exit"
70
+ end
71
+
72
+ def list_all_country_names
73
+ Country::COUNTRY.all_country_names
74
+ end
75
+
76
+ def search_by_name
77
+ puts "Please enter the name: "
78
+ input = gets.chomp
79
+ country = Country::COUNTRY.search_by_name(input)
80
+ if country
81
+ country.info
82
+ else
83
+ puts "Invalid name. Please list all the countries and choose a name from there."
84
+ end
85
+ end
86
+
87
+ def search_by_suffix
88
+ puts "Please enter the suffix: "
89
+ input = gets.chomp
90
+ country = Country::COUNTRY.search_by_suffix(input)
91
+ if country
92
+ country.info
93
+ else
94
+ puts "Country with given suffix not found."
95
+ end
96
+ end
97
+
98
+ def search_by_currency_symbol
99
+ puts "Please enter the currency symbol: "
100
+ input = gets.chomp
101
+ countries = Country::COUNTRY.search_all_with_currency_symbol(input)
102
+ if countries.count > 0
103
+ countries.each do |country|
104
+ country.info
105
+ puts "\n"
106
+ end
107
+ else
108
+ puts "No countries with given currency symbol were found."
109
+ end
110
+ end
111
+
112
+ def search_by_currency_name
113
+ puts "Please enter the currency name: "
114
+ input = gets.chomp
115
+ countries = Country::COUNTRY.search_all_with_currency_name(input)
116
+ if countries.count > 0
117
+ countries.each do |country|
118
+ country.info
119
+ puts "\n"
120
+ end
121
+ else
122
+ puts "No countries with given currency name were found."
123
+ end
49
124
  end
50
125
 
126
+ def search_by_language
127
+ puts "Please enter a language: "
128
+ input = gets.chomp
129
+ countries = Country::COUNTRY.search_all_with_language(input)
130
+ if countries.count > 0
131
+ countries.each do |country|
132
+ country.info
133
+ puts "\n"
134
+ end
135
+ else
136
+ puts "No countries with given language were found."
137
+ end
138
+ end
139
+
140
+ def search_by_certain_population
141
+ puts "Greater(g) than or lower(l) than?"
142
+ input = gets.chomp
143
+
144
+ if input.downcase == "l" || input.downcase == "lower" || input.downcase == "g" || input.downcase == "greater" || input.downcase == "h" || input.downcoase == "higher"
145
+ puts "Enter population: "
146
+ population = gets.chomp.to_i
147
+ countries = Country::COUNTRY.search_all_with_population(input, population)
148
+ if countries.count > 0
149
+ countries.each do |country|
150
+ country.info
151
+ puts "\n"
152
+ end
153
+ else
154
+ puts "No countries with given language were found."
155
+ end
156
+ else
157
+ puts "Wrong input. Please try again.\n"
158
+ search_by_certain_population
159
+ end
160
+ end
161
+
162
+ def list_all_countries_sorted_by_population
163
+ puts "Ascending(a) or descending(d)?"
164
+ input = gets.chomp
165
+ if input == "d"
166
+ countries_sorted = Country::COUNTRY.all.sort{|country1, country2| country2.population <=> country1.population}
167
+ countries_sorted.each do |country|
168
+ country.info
169
+ end
170
+ elsif input == "a"
171
+ countries_sorted = Country::COUNTRY.all.sort{|country1, country2| country1.population <=> country2.population}
172
+ countries_sorted.each do |country|
173
+ country.info
174
+ puts "\n"
175
+ end
176
+ else
177
+ puts "Did not understand command. Please enter a or d."
178
+ list_all_countries_sorted_by_population
179
+ end
180
+ end
181
+
182
+ def search_by_capital
183
+ puts "Please enter the capital: "
184
+ input = gets.chomp
185
+ country = Country::COUNTRY.search_by_capital(input)
186
+ if country
187
+ country.info
188
+ else
189
+ puts "Invalid capital. Please enter a valid capital."
190
+ end
191
+ end
192
+
193
+ def search_by_region
194
+ puts "Please enter the region: "
195
+ input = gets.chomp
196
+ countries = Country::COUNTRY.search_by_region(input)
197
+ if countries.count > 0
198
+ countries.each do |country|
199
+ country.info
200
+ puts "\n"
201
+ end
202
+ else
203
+ puts "Invalid region. Please enter a valid region."
204
+ end
205
+ end
206
+
207
+ def search_by_subregion
208
+ puts "Please enter the subregion: "
209
+ input = gets.chomp
210
+ countries = Country::COUNTRY.search_by_subregion(input)
211
+ if countries.count > 0
212
+ countries.each do |country|
213
+ country.info
214
+ puts "\n"
215
+ end
216
+ else
217
+ puts "Invalid subregion. Please enter a valid subregion."
218
+ end
219
+ end
220
+
51
221
  def goodbye
52
222
  puts "Exited the gem. Have a nice day! =)"
53
223
  end
54
224
  end
225
+
@@ -0,0 +1,111 @@
1
+ class Country::COUNTRY
2
+
3
+ attr_accessor :name, :currencies, :languages, :flag, :population, :capital, :region, :subregion
4
+
5
+ @@all = []
6
+
7
+ def initialize(attr_hash)
8
+ attr_hash.each do |attribute, value|
9
+ # binding.pry
10
+ if self.respond_to?(attribute)
11
+ self.send(("#{attribute}="), value)
12
+ end
13
+ end
14
+ if self.capital == ""
15
+ self.capital = "n/a"
16
+ end
17
+ if self.region == ""
18
+ self.region = "n/a"
19
+ end
20
+ if self.subregion == ""
21
+ self.subregion = "n/a"
22
+ end
23
+ @@all << self
24
+ end
25
+
26
+ def self.all
27
+ @@all
28
+ end
29
+
30
+ def self.all_country_names
31
+ # binding.pry
32
+ self.all.each_with_index do |country, i|
33
+ puts "#{i+1}. #{country.name}"
34
+ end
35
+ end
36
+
37
+ def self.search_by_name(name)
38
+ self.all.detect{|country| country.name == name}
39
+ end
40
+
41
+ def info
42
+ puts "Name: #{self.name}"
43
+ puts "Capital: #{self.capital}"
44
+ puts "Currencies: #{self.currencies}"
45
+ puts "Languages: #{self.languages}"
46
+ puts "Population: #{self.population}"
47
+ puts "Flag: #{self.flag}"
48
+ puts "Region: #{self.region}"
49
+ puts "Subregion: #{self.subregion}"
50
+ end
51
+
52
+ def self.search_by_suffix(suffix)
53
+ self.all.detect{|country| country.name.match(/^(#{suffix})/)}
54
+ end
55
+
56
+ def self.search_all_with_currency_symbol(currency_symbol)
57
+ self.all.select do |country|
58
+ bool = false
59
+ country.currencies.each do |currency_info|
60
+ if currency_info["symbol"] == currency_symbol
61
+ bool = true
62
+ end
63
+ end
64
+ bool
65
+ end
66
+ end
67
+
68
+ def self.search_all_with_currency_name(currency_name)
69
+ self.all.select do |country|
70
+ bool = false
71
+ country.currencies.each do |currency_info|
72
+ if currency_info["name"] && currency_info["name"].downcase == currency_name.downcase
73
+ bool = true
74
+ end
75
+ end
76
+ bool
77
+ end
78
+ end
79
+
80
+ def self.search_all_with_language(language)
81
+ self.all.select do |country|
82
+ bool = false
83
+ country.languages.each do |language_info|
84
+ if language_info["name"] && (language_info["name"].downcase == language.downcase || language_info["nativeName"].downcase == language.downcase)
85
+ bool = true
86
+ end
87
+ end
88
+ bool
89
+ end
90
+ end
91
+
92
+ def self.search_all_with_population(comparison, population)
93
+ if comparison == "l"
94
+ self.all.select{|country| country.population < population}.sort_by{|country| country.population}
95
+ elsif comparison == "g"
96
+ self.all.select{|country| country.population > population}.sort_by{|country| country.population}
97
+ end
98
+ end
99
+
100
+ def self.search_by_capital(capital)
101
+ self.all.detect{|country| country.capital.downcase == capital.downcase}
102
+ end
103
+
104
+ def self.search_by_region(region)
105
+ self.all.select{|country| country.region.downcase == region.downcase}
106
+ end
107
+
108
+ def self.search_by_subregion(subregion)
109
+ self.all.select{|country| country.subregion.downcase == subregion.downcase}
110
+ end
111
+ end
@@ -1,3 +1,3 @@
1
1
  module Country
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: countries_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenneth Young Castro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-24 00:00:00.000000000 Z
11
+ date: 2019-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler