countries_cli 0.1.1 → 0.1.2

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 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