urbans 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,37 @@
1
+ id:
2
+ provinces:
3
+ id:
4
+ pv_ach: Aceh
5
+ pv_bli: Bali
6
+ pv_bn: Banten
7
+ pv_bk: Bengkulu
8
+ pv_go: Gorontalo
9
+ pv_ja: DKI Jakarta
10
+ pv_jm: Jambi
11
+ pv_jb: Jawa Barat
12
+ pv_jt: Jawa Tengah
13
+ pv_je: Jawa Timur
14
+ pv_kb: Kalimantan Barat
15
+ pv_ks: Kalimantan Selatan
16
+ pv_kt: Kalimantan Tengah
17
+ pv_kr: Kalimantan Timur
18
+ pv_ku: Kalimantan Utara
19
+ pv_bg: Kepulauan Bangka Belitung
20
+ pv_ri: Riau
21
+ pv_rl: Kepulauan Riau
22
+ pv_la: Lampung
23
+ pv_ma: Maluku
24
+ pv_mu: Maluku Utara
25
+ pv_nt: Nusa Tenggara Timur
26
+ pv_nb: Nusa Tenggara Barat
27
+ pv_pa: Papua
28
+ pv_pb: Papua Barat
29
+ pv_sb: Sulawesi Barat
30
+ pv_ss: Sulawesi Selatan
31
+ pv_st: Sulawesi Tengah
32
+ pv_sg: Sulawesi Tenggara
33
+ pv_su: Sulawesi Utara
34
+ pv_smb: Sumatera Barat
35
+ pv_sms: Sumatera Selatan
36
+ pv_smu: Sumatera Utara
37
+ pv_yo: DI Yogyakarta
@@ -0,0 +1,2 @@
1
+ class Urbans::Error < StandardError
2
+ end
@@ -0,0 +1,101 @@
1
+ class Urbans::City
2
+ attr_accessor :__id__
3
+ attr_accessor :id
4
+ attr_accessor :names
5
+ attr_accessor :province_id, :country_id
6
+
7
+ def initialize
8
+ self.names = {}
9
+ end
10
+
11
+ def self.all! _country_id, _province_id, _locale=Urbans.locale
12
+ cities = []
13
+
14
+ country_id = _country_id.to_s.downcase.to_sym
15
+ province_id = _province_id.to_s.downcase.to_sym
16
+ locale = _locale.to_s.downcase.to_sym
17
+
18
+ Urbans::CITIES[country_id] ||= {}
19
+
20
+ from_file(country_id, locale).each do |_current_province_id, province_cities|
21
+ current_province_id = _current_province_id.to_s.downcase.to_sym
22
+ Urbans::CITIES[country_id][current_province_id] ||= {}
23
+
24
+ province_cities.each do |_city_id, city_name|
25
+ city_id = _city_id.to_s.downcase.to_sym
26
+
27
+ city = Urbans::CITIES[country_id][current_province_id][city_id]
28
+ unless city
29
+ city = Urbans::City.new
30
+ city.__id__ = _city_id
31
+ city.id = "#{country_id}.#{current_province_id}.#{city_id}"
32
+ city.country_id = country_id
33
+ city.province_id = current_province_id
34
+ Urbans::CITIES[country_id][current_province_id][city_id] = city
35
+ end
36
+ city.names[locale] = city_name
37
+
38
+ cities << city if current_province_id == province_id
39
+ end
40
+ end
41
+ cities
42
+ end
43
+
44
+ def self.get arg
45
+ _country_id = _province_id = _city_id = nil
46
+
47
+ if arg.is_a?(Hash)
48
+ _country_id, _province_id, _city_id = arg.fetch(:country), arg.fetch(:province), arg[:city]
49
+ elsif arg.is_a?(String)
50
+ _arg = arg.split(".")
51
+ _country_id, _province_id, _city_id = _arg[0], _arg[1], _arg[2]
52
+ end
53
+
54
+ if _city_id.nil?
55
+ return all! _country_id, _province_id
56
+ end
57
+
58
+ country_id = _country_id.to_s.downcase.to_sym
59
+ province_id = _province_id.to_s.downcase.to_sym
60
+ city_id = _city_id.to_s.downcase.to_sym
61
+
62
+ if Urbans::CITIES[country_id].nil? || Urbans::CITIES[country_id][province_id].nil? ||
63
+ Urbans::CITIES[country_id][province_id][city_id].nil?
64
+ all! country_id, province_id, Urbans.locale
65
+ end
66
+
67
+ city = Urbans::CITIES[country_id][province_id][city_id]
68
+ city
69
+ end
70
+
71
+ def name _locale=Urbans.locale
72
+ locale = _locale.to_s.downcase.to_sym
73
+
74
+ if names[locale].nil?
75
+ cities_by_province = self.class.from_file(country_id, locale)[province_id.to_s.downcase]
76
+ city_local_name = cities_by_province[__id__]
77
+ names[locale] = city_local_name
78
+ end
79
+
80
+ names[locale]
81
+ end
82
+
83
+ def country
84
+ Urbans.country.get country_id
85
+ end
86
+
87
+ def province
88
+ Urbans.province.get country: country_id, province: province_id
89
+ end
90
+
91
+ def <=> another
92
+ self.name <=> another.name
93
+ end
94
+
95
+ def self.from_file _country_id, _locale
96
+ locale = _locale.to_s.downcase
97
+ country_id = _country_id.to_s.downcase
98
+ from_file = YAML.load_file(Urbans::URBAN_PATH + "urbans/data/#{locale}.#{country_id}.cities.yml")
99
+ from_file[locale]["cities"][country_id]
100
+ end
101
+ end
@@ -0,0 +1,89 @@
1
+ class Urbans::Country
2
+ # raw id from file, useful only for things to do that is related with file
3
+ attr_accessor :__id__
4
+
5
+ # what the user need to know about the id
6
+ attr_accessor :id
7
+
8
+ # by locale => id: {id: Indonesia, en: Indonesia}
9
+ attr_accessor :names
10
+
11
+ def initialize
12
+ self.names = {}
13
+ end
14
+
15
+ # return all loaded countries
16
+ def self.all locale=Urbans.locale
17
+ return Urbans::COUNTRIES.values
18
+ end
19
+
20
+ def self.all! locale=Urbans.locale
21
+ countries = []
22
+ from_file(locale).each do |country_id, country_data|
23
+ country = Urbans::COUNTRIES[country_id.to_s.downcase.to_sym]
24
+ if country.nil?
25
+ country = Urbans::Country.new
26
+ country.__id__ = country_id
27
+ country.id = country_id.to_s.downcase
28
+ country.names[locale] = country_data["name"]
29
+ Urbans::COUNTRIES[country.id.to_sym] = country
30
+ end
31
+ countries << country
32
+ end
33
+ countries
34
+ end
35
+
36
+ # return instance of a country
37
+ def self.get country_id
38
+ if country_id.is_a?(Hash)
39
+ country_id = country_id[:country]
40
+ end
41
+
42
+ country = Urbans::COUNTRIES[country_id.to_sym]
43
+ if country.nil?
44
+ locale = Urbans.locale
45
+ country_from_file = from_file(locale)[country_id.to_s.upcase]
46
+
47
+ # create a new country instance
48
+ country = Urbans::Country.new
49
+ # ID of a country in file is always in uppercase
50
+ country.__id__ = country_id.to_s.upcase
51
+ country.id = country_id.to_s.downcase
52
+ country.names[locale.to_sym] = country_from_file["name"]
53
+
54
+ # keep in hash
55
+ Urbans::COUNTRIES[country_id.to_sym] = country
56
+ else
57
+ return country
58
+ end
59
+ end
60
+
61
+ def provinces
62
+ Urbans.province.get country: id
63
+ end
64
+
65
+ def cities_by_province
66
+
67
+ end
68
+
69
+ def name _locale=Urbans.locale
70
+ locale = _locale.is_a?(Symbol) ? _locale : _locale.to_s.downcase.to_sym
71
+
72
+ if names[locale].nil?
73
+ # try to load
74
+ local_name = self.class.from_file(locale)[__id__]["name"]
75
+ names[locale] = local_name
76
+ end
77
+
78
+ names[locale]
79
+ end
80
+
81
+ def <=> another
82
+ self.name <=> another.name
83
+ end
84
+
85
+ def self.from_file locale
86
+ from_file = YAML.load_file(Urbans::URBAN_PATH + "Urbans/data/#{locale}.countries.yml")
87
+ from_file[locale.to_s]["countries"]
88
+ end
89
+ end
@@ -0,0 +1,90 @@
1
+ class Urbans::Province
2
+ attr_accessor :__id__
3
+ attr_accessor :id
4
+ attr_accessor :names
5
+ attr_accessor :country_id
6
+
7
+ def initialize
8
+ self.names = {}
9
+ end
10
+
11
+ def self.all! _country_id, _locale=Urbans.locale
12
+ provinces = []
13
+
14
+ country_id = _country_id.to_s.downcase.to_sym
15
+ locale = _locale.to_s.downcase.to_sym
16
+
17
+ from_file(country_id, locale).each do |_province_id, province_name|
18
+ province_id = _province_id.to_s.downcase.to_sym
19
+
20
+ Urbans::PROVINCES[country_id] ||= {}
21
+ province = Urbans::PROVINCES[country_id][province_id]
22
+ if province.nil?
23
+ province = Urbans::Province.new
24
+ province.__id__ = _province_id
25
+ province.id = "#{country_id}.#{province_id}"
26
+ province.names[locale] = province_name
27
+ province.country_id = country_id
28
+ Urbans::PROVINCES[country_id][province_id] = province
29
+ end
30
+ provinces << province
31
+ end
32
+ provinces
33
+ end
34
+
35
+ # get specific province
36
+ def self.get arg
37
+ _country_id = _province_id = nil
38
+ if arg.is_a?(Hash)
39
+ _country_id, _province_id = arg.fetch(:country), arg[:province]
40
+ elsif arg.is_a?(String)
41
+ _arg = arg.split(".")
42
+ _country_id, _province_id = _arg[0], _arg[1]
43
+ end
44
+
45
+ if _province_id.nil?
46
+ return all! _country_id
47
+ end
48
+
49
+ country_id = _country_id.to_s.downcase.to_sym
50
+ province_id = _province_id.to_s.downcase.to_sym
51
+
52
+ if Urbans::PROVINCES[country_id].nil? || Urbans::PROVINCES[country_id][province_id].nil?
53
+ all! country_id, Urbans.locale
54
+ end
55
+
56
+ province = Urbans::PROVINCES[country_id][province_id]
57
+ province
58
+ end
59
+
60
+ def name _locale=Urbans.locale
61
+ locale = _locale.to_s.downcase.to_sym
62
+
63
+ if names[locale].nil?
64
+ province_local_name = self.class.from_file(country_id, locale)[__id__]
65
+ names[locale] = province_local_name
66
+ end
67
+
68
+ names[locale]
69
+ end
70
+
71
+ def country
72
+ Urbans.country.get country_id
73
+ end
74
+
75
+ def cities
76
+ Urbans.city.get country: country_id, province: __id__
77
+ end
78
+
79
+ # for sorting
80
+ def <=> another
81
+ self.name <=> another.name
82
+ end
83
+
84
+ def self.from_file _country_id, _locale
85
+ locale = _locale.to_s.downcase
86
+ country_id = _country_id.to_s.downcase
87
+ from_file = YAML.load_file(Urbans::URBAN_PATH + "urbans/data/#{locale}.#{country_id}.provinces.yml")
88
+ from_file[locale]["provinces"][country_id]
89
+ end
90
+ end
@@ -0,0 +1,3 @@
1
+ module Urbans
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: urbans
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Pahlevi
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-09-27 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
+ description: Urbans allows you to query for cities, provinces, or countries
56
+ email:
57
+ - adam.pahlevi@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".travis.yml"
65
+ - CODE_OF_CONDUCT.md
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/console
71
+ - bin/setup
72
+ - lib/urbans.rb
73
+ - lib/urbans/configurer.rb
74
+ - lib/urbans/data/en.countries.yml
75
+ - lib/urbans/data/en.id.cities.yml
76
+ - lib/urbans/data/en.id.provinces.yml
77
+ - lib/urbans/data/id.countries.yml
78
+ - lib/urbans/data/id.id.cities.yml
79
+ - lib/urbans/data/id.id.provinces.yml
80
+ - lib/urbans/exceptions/urban_error.rb
81
+ - lib/urbans/foundations/city.rb
82
+ - lib/urbans/foundations/country.rb
83
+ - lib/urbans/foundations/province.rb
84
+ - lib/urbans/version.rb
85
+ - urbans.gemspec
86
+ homepage: https://github.com/saveav/urbans
87
+ licenses:
88
+ - MIT
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubyforge_project:
106
+ rubygems_version: 2.4.5
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Urbans allows you to query for cities, provinces, or countries
110
+ test_files: []
111
+ has_rdoc: