addressing 1.1.0 → 2.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 +4 -4
- data/CHANGELOG.md +27 -0
- data/README.md +3 -2
- data/data/address_formats.dump +0 -0
- data/data/address_formats.json +64 -64
- data/data/country/af.json +1 -1
- data/data/country/ak.json +258 -0
- data/data/country/am.json +18 -18
- data/data/country/ba.json +258 -0
- data/data/country/bn-IN.json +3 -3
- data/data/country/bn.json +3 -3
- data/data/country/bs.json +1 -0
- data/data/country/ca.json +9 -9
- data/data/country/cv.json +258 -0
- data/data/country/cy.json +1 -1
- data/data/country/en-AU.json +16 -16
- data/data/country/en-LT.json +258 -0
- data/data/country/en-LV.json +258 -0
- data/data/country/en-UA.json +258 -0
- data/data/country/fil.json +1 -1
- data/data/country/fr-CA.json +1 -1
- data/data/country/ga.json +17 -17
- data/data/country/gd.json +2 -2
- data/data/country/gl.json +20 -20
- data/data/country/gu.json +12 -12
- data/data/country/hr.json +17 -17
- data/data/country/hy.json +2 -2
- data/data/country/ig.json +30 -30
- data/data/country/is.json +1 -1
- data/data/country/it.json +8 -8
- data/data/country/kk-Arab.json +258 -0
- data/data/country/kok.json +158 -158
- data/data/country/ky.json +3 -3
- data/data/country/lt.json +1 -1
- data/data/country/lv.json +9 -9
- data/data/country/mk.json +1 -1
- data/data/country/ml.json +1 -1
- data/data/country/mn.json +9 -9
- data/data/country/mr.json +1 -1
- data/data/country/or.json +14 -14
- data/data/country/pa.json +7 -7
- data/data/country/qu.json +258 -0
- data/data/country/rm.json +258 -0
- data/data/country/shn.json +258 -0
- data/data/country/sl.json +16 -16
- data/data/country/so.json +2 -2
- data/data/country/sr-Cyrl-BA.json +1 -1
- data/data/country/sr-Cyrl-ME.json +1 -1
- data/data/country/sr-Cyrl-XK.json +1 -1
- data/data/country/sr-Latn-BA.json +1 -1
- data/data/country/sr-Latn-ME.json +1 -1
- data/data/country/sr-Latn-XK.json +1 -1
- data/data/country/sr-Latn.json +1 -1
- data/data/country/sr.json +1 -1
- data/data/country/sw-CD.json +1 -1
- data/data/country/sw.json +1 -1
- data/data/country/ta.json +3 -3
- data/data/country/te.json +11 -11
- data/data/country/vi.json +1 -1
- data/data/country/yue-Hans.json +11 -11
- data/data/country/yue.json +10 -10
- data/data/subdivision/AE.json +1 -1
- data/data/subdivision/CA.json +6 -12
- data/data/subdivision/CO.json +1 -1
- data/data/subdivision/GB.json +675 -0
- data/data/subdivision/GT.json +71 -0
- data/data/subdivision/IT.json +13 -1
- data/data/subdivision/NG.json +1 -1
- data/data/subdivision/RU.json +4 -4
- data/data/subdivision/TH.json +7 -7
- data/data/subdivision/TR.json +1 -1
- data/data/subdivision/VE.json +4 -4
- data/data/subdivision/VN.json +38 -154
- data/lib/addressing/address_format.rb +38 -16
- data/lib/addressing/country.rb +21 -19
- data/lib/addressing/default_formatter.rb +40 -12
- data/lib/addressing/locale.rb +24 -11
- data/lib/addressing/model.rb +9 -10
- data/lib/addressing/subdivision.rb +25 -7
- data/lib/addressing/version.rb +1 -1
- metadata +22 -6
- /data/data/country/{en-ID.json → en-EE.json} +0 -0
- /data/data/country/{en-MV.json → en-GE.json} +0 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"country_code": "GT",
|
|
3
|
+
"subdivisions": {
|
|
4
|
+
"16": {
|
|
5
|
+
"name": "Alta Verapaz"
|
|
6
|
+
},
|
|
7
|
+
"15": {
|
|
8
|
+
"name": "Baja Verapaz"
|
|
9
|
+
},
|
|
10
|
+
"04": {
|
|
11
|
+
"name": "Chimaltenango"
|
|
12
|
+
},
|
|
13
|
+
"20": {
|
|
14
|
+
"name": "Chiquimula"
|
|
15
|
+
},
|
|
16
|
+
"02": {
|
|
17
|
+
"name": "El Progreso"
|
|
18
|
+
},
|
|
19
|
+
"05": {
|
|
20
|
+
"name": "Escuintla"
|
|
21
|
+
},
|
|
22
|
+
"01": {
|
|
23
|
+
"name": "Guatemala"
|
|
24
|
+
},
|
|
25
|
+
"13": {
|
|
26
|
+
"name": "Huehuetenango"
|
|
27
|
+
},
|
|
28
|
+
"18": {
|
|
29
|
+
"name": "Izabal"
|
|
30
|
+
},
|
|
31
|
+
"21": {
|
|
32
|
+
"name": "Jalapa"
|
|
33
|
+
},
|
|
34
|
+
"22": {
|
|
35
|
+
"name": "Jutiapa"
|
|
36
|
+
},
|
|
37
|
+
"17": {
|
|
38
|
+
"name": "Petén"
|
|
39
|
+
},
|
|
40
|
+
"09": {
|
|
41
|
+
"name": "Quetzaltenango"
|
|
42
|
+
},
|
|
43
|
+
"14": {
|
|
44
|
+
"name": "Quiché"
|
|
45
|
+
},
|
|
46
|
+
"11": {
|
|
47
|
+
"name": "Retalhuleu"
|
|
48
|
+
},
|
|
49
|
+
"03": {
|
|
50
|
+
"name": "Sacatepéquez"
|
|
51
|
+
},
|
|
52
|
+
"12": {
|
|
53
|
+
"name": "San Marcos"
|
|
54
|
+
},
|
|
55
|
+
"06": {
|
|
56
|
+
"name": "Santa Rosa"
|
|
57
|
+
},
|
|
58
|
+
"07": {
|
|
59
|
+
"name": "Sololá"
|
|
60
|
+
},
|
|
61
|
+
"10": {
|
|
62
|
+
"name": "Suchitepéquez"
|
|
63
|
+
},
|
|
64
|
+
"08": {
|
|
65
|
+
"name": "Totonicapán"
|
|
66
|
+
},
|
|
67
|
+
"19": {
|
|
68
|
+
"name": "Zacapa"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
data/data/subdivision/IT.json
CHANGED
|
@@ -149,6 +149,10 @@
|
|
|
149
149
|
"code": "FR",
|
|
150
150
|
"name": "Frosinone"
|
|
151
151
|
},
|
|
152
|
+
"OT": {
|
|
153
|
+
"code": "OT",
|
|
154
|
+
"name": "Gallura Nord-Est Sardegna"
|
|
155
|
+
},
|
|
152
156
|
"GE": {
|
|
153
157
|
"code": "GE",
|
|
154
158
|
"name": "Genova"
|
|
@@ -217,6 +221,10 @@
|
|
|
217
221
|
"code": "MT",
|
|
218
222
|
"name": "Matera"
|
|
219
223
|
},
|
|
224
|
+
"VS": {
|
|
225
|
+
"code": "VS",
|
|
226
|
+
"name": "Medio Campidano"
|
|
227
|
+
},
|
|
220
228
|
"ME": {
|
|
221
229
|
"code": "ME",
|
|
222
230
|
"name": "Messina"
|
|
@@ -245,6 +253,10 @@
|
|
|
245
253
|
"code": "NU",
|
|
246
254
|
"name": "Nuoro"
|
|
247
255
|
},
|
|
256
|
+
"OG": {
|
|
257
|
+
"code": "OG",
|
|
258
|
+
"name": "Ogliastra"
|
|
259
|
+
},
|
|
248
260
|
"OR": {
|
|
249
261
|
"code": "OR",
|
|
250
262
|
"name": "Oristano"
|
|
@@ -359,7 +371,7 @@
|
|
|
359
371
|
},
|
|
360
372
|
"SU": {
|
|
361
373
|
"code": "SU",
|
|
362
|
-
"name": "
|
|
374
|
+
"name": "Sulcis Iglesiente"
|
|
363
375
|
},
|
|
364
376
|
"TA": {
|
|
365
377
|
"code": "TA",
|
data/data/subdivision/NG.json
CHANGED
data/data/subdivision/RU.json
CHANGED
|
@@ -240,10 +240,6 @@
|
|
|
240
240
|
"name": "Tyva Republits",
|
|
241
241
|
"local_name": "Республика Тыва"
|
|
242
242
|
},
|
|
243
|
-
"UD": {
|
|
244
|
-
"name": "Udmurtskaja Respublika",
|
|
245
|
-
"local_name": "Республика Удмуртия"
|
|
246
|
-
},
|
|
247
243
|
"KK": {
|
|
248
244
|
"name": "Khakasiya Republits",
|
|
249
245
|
"local_name": "Республика Хакасия"
|
|
@@ -308,6 +304,10 @@
|
|
|
308
304
|
"name": "Tyumenskaya oblast'",
|
|
309
305
|
"local_name": "Тюменская область"
|
|
310
306
|
},
|
|
307
|
+
"UD": {
|
|
308
|
+
"name": "Udmurtskaja Respublika",
|
|
309
|
+
"local_name": "Удмуртская Республика"
|
|
310
|
+
},
|
|
311
311
|
"ULY": {
|
|
312
312
|
"name": "Ulyanovskaya oblast'",
|
|
313
313
|
"local_name": "Ульяновская область"
|
data/data/subdivision/TH.json
CHANGED
|
@@ -26,10 +26,6 @@
|
|
|
26
26
|
"name": "Khon Kaen",
|
|
27
27
|
"local_name": "ขอนแก่น"
|
|
28
28
|
},
|
|
29
|
-
"38": {
|
|
30
|
-
"name": "Bueng Kan",
|
|
31
|
-
"local_name": "จังหวัด บึงกาฬ"
|
|
32
|
-
},
|
|
33
29
|
"22": {
|
|
34
30
|
"name": "Chanthaburi",
|
|
35
31
|
"local_name": "จันทบุรี"
|
|
@@ -51,7 +47,7 @@
|
|
|
51
47
|
"local_name": "ชัยภูมิ"
|
|
52
48
|
},
|
|
53
49
|
"86": {
|
|
54
|
-
"name": "
|
|
50
|
+
"name": "Chumphon",
|
|
55
51
|
"local_name": "ชุมพร"
|
|
56
52
|
},
|
|
57
53
|
"57": {
|
|
@@ -110,6 +106,10 @@
|
|
|
110
106
|
"name": "Nan",
|
|
111
107
|
"local_name": "น่าน"
|
|
112
108
|
},
|
|
109
|
+
"38": {
|
|
110
|
+
"name": "Bueng Kan",
|
|
111
|
+
"local_name": "บึงกาฬ"
|
|
112
|
+
},
|
|
113
113
|
"31": {
|
|
114
114
|
"name": "Buri Ram",
|
|
115
115
|
"local_name": "บุรีรัมย์"
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
"local_name": "พังงา"
|
|
144
144
|
},
|
|
145
145
|
"93": {
|
|
146
|
-
"name": "
|
|
146
|
+
"name": "Phatthalung",
|
|
147
147
|
"local_name": "พัทลุง"
|
|
148
148
|
},
|
|
149
149
|
"66": {
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
"local_name": "สุโขทัย"
|
|
268
268
|
},
|
|
269
269
|
"72": {
|
|
270
|
-
"name": "
|
|
270
|
+
"name": "Suphan Buri",
|
|
271
271
|
"local_name": "สุพรรณบุรี"
|
|
272
272
|
},
|
|
273
273
|
"84": {
|
data/data/subdivision/TR.json
CHANGED
data/data/subdivision/VE.json
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"name": "Dependencias Federales"
|
|
33
33
|
},
|
|
34
34
|
"A": {
|
|
35
|
-
"name": "Distrito
|
|
35
|
+
"name": "Distrito Capital"
|
|
36
36
|
},
|
|
37
37
|
"I": {
|
|
38
38
|
"name": "Falcón"
|
|
@@ -40,6 +40,9 @@
|
|
|
40
40
|
"J": {
|
|
41
41
|
"name": "Guárico"
|
|
42
42
|
},
|
|
43
|
+
"X": {
|
|
44
|
+
"name": "La Guaira"
|
|
45
|
+
},
|
|
43
46
|
"K": {
|
|
44
47
|
"name": "Lara"
|
|
45
48
|
},
|
|
@@ -67,9 +70,6 @@
|
|
|
67
70
|
"T": {
|
|
68
71
|
"name": "Trujillo"
|
|
69
72
|
},
|
|
70
|
-
"X": {
|
|
71
|
-
"name": "La Guaira"
|
|
72
|
-
},
|
|
73
73
|
"U": {
|
|
74
74
|
"name": "Yaracuy"
|
|
75
75
|
},
|
data/data/subdivision/VN.json
CHANGED
|
@@ -2,51 +2,15 @@
|
|
|
2
2
|
"country_code": "VN",
|
|
3
3
|
"locale": "vi",
|
|
4
4
|
"subdivisions": {
|
|
5
|
-
"
|
|
5
|
+
"91": {
|
|
6
6
|
"name": "An Giang Province",
|
|
7
7
|
"local_name": "An Giang"
|
|
8
8
|
},
|
|
9
|
-
"
|
|
10
|
-
"name": "Ba Ria-Vung Tau Province",
|
|
11
|
-
"local_name": "Bà Rịa–Vũng Tàu"
|
|
12
|
-
},
|
|
13
|
-
"55": {
|
|
14
|
-
"name": "Bac Lieu Province",
|
|
15
|
-
"local_name": "Bạc Liêu"
|
|
16
|
-
},
|
|
17
|
-
"54": {
|
|
18
|
-
"name": "Bac Giang Province",
|
|
19
|
-
"local_name": "Bắc Giang"
|
|
20
|
-
},
|
|
21
|
-
"53": {
|
|
22
|
-
"name": "Bac Kan Province",
|
|
23
|
-
"local_name": "Bắc Kạn"
|
|
24
|
-
},
|
|
25
|
-
"56": {
|
|
9
|
+
"24": {
|
|
26
10
|
"name": "Bac Ninh Province",
|
|
27
11
|
"local_name": "Bắc Ninh"
|
|
28
12
|
},
|
|
29
|
-
"
|
|
30
|
-
"name": "Ben Tre Province",
|
|
31
|
-
"local_name": "Bến Tre"
|
|
32
|
-
},
|
|
33
|
-
"57": {
|
|
34
|
-
"name": "Binh Duong Province",
|
|
35
|
-
"local_name": "Bình Dương"
|
|
36
|
-
},
|
|
37
|
-
"31": {
|
|
38
|
-
"name": "Binh Dinh Province",
|
|
39
|
-
"local_name": "Bình Định"
|
|
40
|
-
},
|
|
41
|
-
"58": {
|
|
42
|
-
"name": "Binh Phuoc Province",
|
|
43
|
-
"local_name": "Bình Phước"
|
|
44
|
-
},
|
|
45
|
-
"40": {
|
|
46
|
-
"name": "Binh Thuan Province",
|
|
47
|
-
"local_name": "Bình Thuận"
|
|
48
|
-
},
|
|
49
|
-
"59": {
|
|
13
|
+
"96": {
|
|
50
14
|
"name": "Ca Mau Province",
|
|
51
15
|
"local_name": "Cà Mau"
|
|
52
16
|
},
|
|
@@ -54,71 +18,55 @@
|
|
|
54
18
|
"name": "Cao Bang Province",
|
|
55
19
|
"local_name": "Cao Bằng"
|
|
56
20
|
},
|
|
57
|
-
"
|
|
21
|
+
"92": {
|
|
58
22
|
"name": "Can Tho City",
|
|
59
23
|
"local_name": "Cần Thơ"
|
|
60
24
|
},
|
|
61
|
-
"
|
|
25
|
+
"48": {
|
|
62
26
|
"name": "Da Nang City",
|
|
63
27
|
"local_name": "Đà Nẵng"
|
|
64
28
|
},
|
|
65
|
-
"
|
|
29
|
+
"66": {
|
|
66
30
|
"name": "Dak Lak Province",
|
|
67
31
|
"local_name": "Đắk Lắk"
|
|
68
32
|
},
|
|
69
|
-
"
|
|
70
|
-
"name": "Dak Nong Province",
|
|
71
|
-
"local_name": "Đăk Nông"
|
|
72
|
-
},
|
|
73
|
-
"71": {
|
|
33
|
+
"11": {
|
|
74
34
|
"name": "Dien Bien Province",
|
|
75
35
|
"local_name": "Điện Biên"
|
|
76
36
|
},
|
|
77
|
-
"
|
|
37
|
+
"75": {
|
|
78
38
|
"name": "Dong Nai Province",
|
|
79
39
|
"local_name": "Đồng Nai"
|
|
80
40
|
},
|
|
81
|
-
"
|
|
41
|
+
"82": {
|
|
82
42
|
"name": "Dong Thap Province",
|
|
83
43
|
"local_name": "Đồng Tháp"
|
|
84
44
|
},
|
|
85
|
-
"
|
|
45
|
+
"52": {
|
|
86
46
|
"name": "Gia Lai Province",
|
|
87
47
|
"local_name": "Gia Lai"
|
|
88
48
|
},
|
|
89
|
-
"
|
|
90
|
-
"name": "Ha Giang Province",
|
|
91
|
-
"local_name": "Hà Giang"
|
|
92
|
-
},
|
|
93
|
-
"63": {
|
|
94
|
-
"name": "Ha Nam Province",
|
|
95
|
-
"local_name": "Hà Nam"
|
|
96
|
-
},
|
|
97
|
-
"HN": {
|
|
49
|
+
"01": {
|
|
98
50
|
"name": "Hanoi City",
|
|
99
51
|
"local_name": "Hà Nội"
|
|
100
52
|
},
|
|
101
|
-
"
|
|
53
|
+
"42": {
|
|
102
54
|
"name": "Ha Tinh Province",
|
|
103
55
|
"local_name": "Hà Tĩnh"
|
|
104
56
|
},
|
|
105
|
-
"
|
|
106
|
-
"name": "Hai
|
|
107
|
-
"local_name": "Hải Dương"
|
|
108
|
-
},
|
|
109
|
-
"HP": {
|
|
110
|
-
"name": "Haiphong City",
|
|
57
|
+
"31": {
|
|
58
|
+
"name": "Hai Phong City",
|
|
111
59
|
"local_name": "Hải Phòng"
|
|
112
60
|
},
|
|
113
|
-
"
|
|
114
|
-
"name": "
|
|
115
|
-
"local_name": "
|
|
61
|
+
"79": {
|
|
62
|
+
"name": "Ho Chi Minh City",
|
|
63
|
+
"local_name": "Hồ Chí Minh"
|
|
116
64
|
},
|
|
117
|
-
"
|
|
118
|
-
"name": "
|
|
119
|
-
"local_name": "
|
|
65
|
+
"46": {
|
|
66
|
+
"name": "Hue City",
|
|
67
|
+
"local_name": "Huế"
|
|
120
68
|
},
|
|
121
|
-
"
|
|
69
|
+
"56": {
|
|
122
70
|
"name": "Hung Yen Province",
|
|
123
71
|
"local_name": "Hưng Yên"
|
|
124
72
|
},
|
|
@@ -126,23 +74,15 @@
|
|
|
126
74
|
"name": "Khanh Hoa Province",
|
|
127
75
|
"local_name": "Khánh Hòa"
|
|
128
76
|
},
|
|
129
|
-
"
|
|
130
|
-
"name": "Kien Giang Province",
|
|
131
|
-
"local_name": "Kiên Giang"
|
|
132
|
-
},
|
|
133
|
-
"28": {
|
|
134
|
-
"name": "Kon Tum Province",
|
|
135
|
-
"local_name": "Kon Tum"
|
|
136
|
-
},
|
|
137
|
-
"01": {
|
|
77
|
+
"12": {
|
|
138
78
|
"name": "Lai Chau Province",
|
|
139
79
|
"local_name": "Lai Châu"
|
|
140
80
|
},
|
|
141
|
-
"
|
|
142
|
-
"name": "Lang
|
|
81
|
+
"20": {
|
|
82
|
+
"name": "Lang Son Province",
|
|
143
83
|
"local_name": "Lạng Sơn"
|
|
144
84
|
},
|
|
145
|
-
"
|
|
85
|
+
"68": {
|
|
146
86
|
"name": "Lao Cai Province",
|
|
147
87
|
"local_name": "Lào Cai"
|
|
148
88
|
},
|
|
@@ -150,109 +90,53 @@
|
|
|
150
90
|
"name": "Lam Dong Province",
|
|
151
91
|
"local_name": "Lâm Đồng"
|
|
152
92
|
},
|
|
153
|
-
"
|
|
154
|
-
"name": "Long An Province",
|
|
155
|
-
"local_name": "Long An"
|
|
156
|
-
},
|
|
157
|
-
"67": {
|
|
158
|
-
"name": "Nam Dinh Province",
|
|
159
|
-
"local_name": "Nam Định"
|
|
160
|
-
},
|
|
161
|
-
"22": {
|
|
93
|
+
"40": {
|
|
162
94
|
"name": "Nghe An Province",
|
|
163
95
|
"local_name": "Nghệ An"
|
|
164
96
|
},
|
|
165
|
-
"
|
|
97
|
+
"37": {
|
|
166
98
|
"name": "Ninh Binh Province",
|
|
167
99
|
"local_name": "Ninh Bình"
|
|
168
100
|
},
|
|
169
|
-
"
|
|
170
|
-
"name": "Ninh Thuan Province",
|
|
171
|
-
"local_name": "Ninh Thuận"
|
|
172
|
-
},
|
|
173
|
-
"68": {
|
|
101
|
+
"25": {
|
|
174
102
|
"name": "Phu Tho Province",
|
|
175
103
|
"local_name": "Phú Thọ"
|
|
176
104
|
},
|
|
177
|
-
"
|
|
178
|
-
"name": "Phu Yen Province",
|
|
179
|
-
"local_name": "Phú Yên"
|
|
180
|
-
},
|
|
181
|
-
"24": {
|
|
182
|
-
"name": "Quang Binh Province",
|
|
183
|
-
"local_name": "Quảng Bình"
|
|
184
|
-
},
|
|
185
|
-
"27": {
|
|
186
|
-
"name": "Quang Nam Province",
|
|
187
|
-
"local_name": "Quảng Nam"
|
|
188
|
-
},
|
|
189
|
-
"29": {
|
|
105
|
+
"51": {
|
|
190
106
|
"name": "Quang Ngai Province",
|
|
191
107
|
"local_name": "Quảng Ngãi"
|
|
192
108
|
},
|
|
193
|
-
"
|
|
109
|
+
"22": {
|
|
194
110
|
"name": "Quang Ninh Province",
|
|
195
111
|
"local_name": "Quảng Ninh"
|
|
196
112
|
},
|
|
197
|
-
"
|
|
113
|
+
"44": {
|
|
198
114
|
"name": "Quang Tri Province",
|
|
199
115
|
"local_name": "Quảng Trị"
|
|
200
116
|
},
|
|
201
|
-
"
|
|
202
|
-
"name": "Soc Trang Province",
|
|
203
|
-
"local_name": "Sóc Trăng"
|
|
204
|
-
},
|
|
205
|
-
"05": {
|
|
117
|
+
"14": {
|
|
206
118
|
"name": "Son La Province",
|
|
207
119
|
"local_name": "Sơn La"
|
|
208
120
|
},
|
|
209
|
-
"
|
|
121
|
+
"80": {
|
|
210
122
|
"name": "Tay Ninh Province",
|
|
211
123
|
"local_name": "Tây Ninh"
|
|
212
124
|
},
|
|
213
|
-
"
|
|
214
|
-
"name": "Thai Binh Province",
|
|
215
|
-
"local_name": "Thái Bình"
|
|
216
|
-
},
|
|
217
|
-
"69": {
|
|
125
|
+
"19": {
|
|
218
126
|
"name": "Thai Nguyen Province",
|
|
219
127
|
"local_name": "Thái Nguyên"
|
|
220
128
|
},
|
|
221
|
-
"
|
|
129
|
+
"38": {
|
|
222
130
|
"name": "Thanh Hoa Province",
|
|
223
131
|
"local_name": "Thanh Hóa"
|
|
224
|
-
},
|
|
225
|
-
"
|
|
226
|
-
"name": "Ho Chi Minh City",
|
|
227
|
-
"local_name": "Thành phố Hồ Chí Minh"
|
|
228
|
-
},
|
|
229
|
-
"26": {
|
|
230
|
-
"name": "Thua Thien-Hue Province",
|
|
231
|
-
"local_name": "Thừa Thiên–Huế"
|
|
232
|
-
},
|
|
233
|
-
"46": {
|
|
234
|
-
"name": "Tien Giang Province",
|
|
235
|
-
"local_name": "Tiền Giang"
|
|
236
|
-
},
|
|
237
|
-
"51": {
|
|
238
|
-
"name": "Tra Vinh Province",
|
|
239
|
-
"local_name": "Trà Vinh"
|
|
240
|
-
},
|
|
241
|
-
"07": {
|
|
132
|
+
},
|
|
133
|
+
"08": {
|
|
242
134
|
"name": "Tuyen Quang Province",
|
|
243
135
|
"local_name": "Tuyên Quang"
|
|
244
136
|
},
|
|
245
|
-
"
|
|
137
|
+
"86": {
|
|
246
138
|
"name": "Vinh Long Province",
|
|
247
139
|
"local_name": "Vĩnh Long"
|
|
248
|
-
},
|
|
249
|
-
"70": {
|
|
250
|
-
"name": "Vinh Phuc Province",
|
|
251
|
-
"local_name": "Vĩnh Phúc"
|
|
252
|
-
},
|
|
253
|
-
"06": {
|
|
254
|
-
"name": "Yen Bai Province",
|
|
255
|
-
"local_name": "Yên Bái"
|
|
256
140
|
}
|
|
257
141
|
}
|
|
258
142
|
}
|
|
@@ -8,9 +8,17 @@ module Addressing
|
|
|
8
8
|
#
|
|
9
9
|
# @example Get address format for Brazil
|
|
10
10
|
# format = Addressing::AddressFormat.get('BR')
|
|
11
|
-
# format.used_fields
|
|
12
|
-
# format.required_fields
|
|
11
|
+
# format.used_fields # => ["given_name", "family_name", ...]
|
|
12
|
+
# format.required_fields # => ["address_line1", "locality", ...]
|
|
13
|
+
# format.subdivision_fields # => ["administrative_area", "locality"]
|
|
13
14
|
class AddressFormat
|
|
15
|
+
# The subdivision fields, ordered from the top level down.
|
|
16
|
+
SUBDIVISION_FIELDS = [
|
|
17
|
+
AddressField::ADMINISTRATIVE_AREA,
|
|
18
|
+
AddressField::LOCALITY,
|
|
19
|
+
AddressField::DEPENDENT_LOCALITY
|
|
20
|
+
].freeze
|
|
21
|
+
|
|
14
22
|
class << self
|
|
15
23
|
# Gets the address format for the provided country code.
|
|
16
24
|
#
|
|
@@ -63,13 +71,28 @@ module Addressing
|
|
|
63
71
|
administrative_area_type: "province",
|
|
64
72
|
locality_type: "city",
|
|
65
73
|
dependent_locality_type: "suburb",
|
|
66
|
-
postal_code_type: "postal"
|
|
67
|
-
subdivision_depth: 0
|
|
74
|
+
postal_code_type: "postal"
|
|
68
75
|
}
|
|
69
76
|
end
|
|
70
77
|
end
|
|
71
78
|
|
|
72
|
-
attr_reader :country_code, :locale, :format, :local_format, :required_fields, :uppercase_fields, :default_values, :administrative_area_type, :locality_type, :dependent_locality_type, :postal_code_type, :postal_code_pattern, :postal_code_prefix
|
|
79
|
+
attr_reader :country_code, :locale, :format, :local_format, :required_fields, :uppercase_fields, :default_values, :administrative_area_type, :locality_type, :dependent_locality_type, :postal_code_type, :postal_code_pattern, :postal_code_prefix
|
|
80
|
+
|
|
81
|
+
# The subdivision fields for which there is predefined subdivision data.
|
|
82
|
+
#
|
|
83
|
+
# This is more precise than #used_subdivision_fields, which returns all
|
|
84
|
+
# subdivision fields used by the format regardless of whether data exists.
|
|
85
|
+
#
|
|
86
|
+
# @return [Array<String>] e.g. ["administrative_area", "locality"]
|
|
87
|
+
attr_reader :subdivision_fields
|
|
88
|
+
|
|
89
|
+
# The number of subdivision fields with predefined data used by the format.
|
|
90
|
+
#
|
|
91
|
+
# @deprecated Use #subdivision_fields instead.
|
|
92
|
+
# @return [Integer]
|
|
93
|
+
def subdivision_depth
|
|
94
|
+
(subdivision_fields & used_subdivision_fields).size
|
|
95
|
+
end
|
|
73
96
|
|
|
74
97
|
def initialize(definition = {})
|
|
75
98
|
# Validate the presence of required properties.
|
|
@@ -87,13 +110,16 @@ module Addressing
|
|
|
87
110
|
uppercase_fields: [],
|
|
88
111
|
default_values: {},
|
|
89
112
|
postal_code_pattern: nil,
|
|
90
|
-
postal_code_prefix: nil
|
|
91
|
-
subdivision_depth: 0
|
|
113
|
+
postal_code_prefix: nil
|
|
92
114
|
}.merge(definition)
|
|
93
115
|
|
|
116
|
+
# Backwards compatibility: derive the subdivision fields from a depth.
|
|
117
|
+
definition[:subdivision_fields] ||= SUBDIVISION_FIELDS.first(definition[:subdivision_depth] || 0)
|
|
118
|
+
|
|
94
119
|
AddressField.assert_all_exist(definition[:required_fields])
|
|
95
120
|
AddressField.assert_all_exist(definition[:uppercase_fields])
|
|
96
121
|
AddressField.assert_all_exist(definition[:default_values].keys)
|
|
122
|
+
AddressField.assert_all_exist(definition[:subdivision_fields])
|
|
97
123
|
|
|
98
124
|
@country_code = definition[:country_code]
|
|
99
125
|
@locale = definition[:locale]
|
|
@@ -102,7 +128,7 @@ module Addressing
|
|
|
102
128
|
@required_fields = definition[:required_fields]
|
|
103
129
|
@uppercase_fields = definition[:uppercase_fields]
|
|
104
130
|
@default_values = definition[:default_values]
|
|
105
|
-
@
|
|
131
|
+
@subdivision_fields = definition[:subdivision_fields]
|
|
106
132
|
|
|
107
133
|
if used_fields.include?(AddressField::ADMINISTRATIVE_AREA)
|
|
108
134
|
if definition[:administrative_area_type]
|
|
@@ -144,15 +170,11 @@ module Addressing
|
|
|
144
170
|
end
|
|
145
171
|
|
|
146
172
|
# Gets the list of used subdivision fields.
|
|
173
|
+
#
|
|
174
|
+
# Note that a country might use a subdivision field without having
|
|
175
|
+
# predefined subdivisions for it, see #subdivision_fields.
|
|
147
176
|
def used_subdivision_fields
|
|
148
|
-
|
|
149
|
-
AddressField::ADMINISTRATIVE_AREA,
|
|
150
|
-
AddressField::LOCALITY,
|
|
151
|
-
AddressField::DEPENDENT_LOCALITY
|
|
152
|
-
]
|
|
153
|
-
|
|
154
|
-
# Remove fields not used by the format.
|
|
155
|
-
fields & used_fields
|
|
177
|
+
SUBDIVISION_FIELDS & used_fields
|
|
156
178
|
end
|
|
157
179
|
end
|
|
158
180
|
|