address_composer 1.0.1 → 2.0.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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +1 -1
  3. data/.gitmodules +1 -0
  4. data/.rubocop.yml +4 -20
  5. data/Gemfile.lock +57 -32
  6. data/README.md +26 -0
  7. data/address-formatting/.github/workflows/ci.yml +25 -0
  8. data/address-formatting/README.md +19 -13
  9. data/address-formatting/bin/coverage.pl +8 -2
  10. data/address-formatting/bin/run_tests.t +36 -10
  11. data/address-formatting/conf/abbreviations/ca.yaml +18 -1
  12. data/address-formatting/conf/abbreviations/cs.yaml +0 -3
  13. data/address-formatting/conf/abbreviations/da.yaml +1 -1
  14. data/address-formatting/conf/abbreviations/en.yaml +7 -1
  15. data/address-formatting/conf/abbreviations/es.yaml +21 -3
  16. data/address-formatting/conf/abbreviations/et.yaml +0 -3
  17. data/address-formatting/conf/abbreviations/eu.yaml +0 -1
  18. data/address-formatting/conf/abbreviations/fi.yaml +0 -3
  19. data/address-formatting/conf/abbreviations/fr.yaml +1 -1
  20. data/address-formatting/conf/abbreviations/gl.yaml +14 -0
  21. data/address-formatting/conf/abbreviations/it.yaml +1 -1
  22. data/address-formatting/conf/abbreviations/nl.yaml +17 -0
  23. data/address-formatting/conf/abbreviations/no.yaml +0 -4
  24. data/address-formatting/conf/abbreviations/pl.yaml +2 -2
  25. data/address-formatting/conf/abbreviations/pt.yaml +18 -0
  26. data/address-formatting/conf/abbreviations/ro.yaml +8 -2
  27. data/address-formatting/conf/abbreviations/sl.yaml +24 -0
  28. data/address-formatting/conf/abbreviations/{se.yaml → sv.yaml} +1 -5
  29. data/address-formatting/conf/abbreviations/tr.yaml +0 -4
  30. data/address-formatting/conf/abbreviations/{vn.yaml → vi.yaml} +1 -3
  31. data/address-formatting/conf/components.yaml +15 -4
  32. data/address-formatting/conf/countries/worldwide.yaml +401 -272
  33. data/address-formatting/conf/country2lang.yaml +33 -32
  34. data/address-formatting/conf/country_codes.yaml +216 -214
  35. data/address-formatting/conf/county_codes.yaml +19 -9
  36. data/address-formatting/conf/state_codes.yaml +91 -49
  37. data/address-formatting/cpanfile +10 -0
  38. data/address-formatting/testcases/abbreviations/de.yaml +27 -0
  39. data/address-formatting/testcases/abbreviations/en.yaml +15 -0
  40. data/address-formatting/testcases/abbreviations/fr.yaml +12 -0
  41. data/address-formatting/testcases/countries/al.yaml +17 -3
  42. data/address-formatting/testcases/countries/au.yaml +29 -3
  43. data/address-formatting/testcases/countries/be.yaml +17 -2
  44. data/address-formatting/testcases/countries/bg.yaml +1 -1
  45. data/address-formatting/testcases/countries/br.yaml +36 -2
  46. data/address-formatting/testcases/countries/ca.yaml +60 -18
  47. data/address-formatting/testcases/countries/cl.yaml +3 -2
  48. data/address-formatting/testcases/countries/cn.yaml +21 -8
  49. data/address-formatting/testcases/countries/co.yaml +19 -0
  50. data/address-formatting/testcases/countries/cu.yaml +24 -10
  51. data/address-formatting/testcases/countries/de.yaml +70 -13
  52. data/address-formatting/testcases/countries/eg.yaml +6 -6
  53. data/address-formatting/testcases/countries/eh.yaml +2 -2
  54. data/address-formatting/testcases/countries/es.yaml +12 -0
  55. data/address-formatting/testcases/countries/fr.yaml +30 -13
  56. data/address-formatting/testcases/countries/gb.yaml +63 -4
  57. data/address-formatting/testcases/countries/hu.yaml +3 -4
  58. data/address-formatting/testcases/countries/ie.yaml +43 -1
  59. data/address-formatting/testcases/countries/in.yaml +14 -1
  60. data/address-formatting/testcases/countries/ir.yaml +19 -8
  61. data/address-formatting/testcases/countries/it.yaml +30 -2
  62. data/address-formatting/testcases/countries/kg.yaml +1 -1
  63. data/address-formatting/testcases/countries/kr.yaml +13 -5
  64. data/address-formatting/testcases/countries/ml.yaml +9 -9
  65. data/address-formatting/testcases/countries/mu.yaml +17 -1
  66. data/address-formatting/testcases/countries/nz.yaml +11 -0
  67. data/address-formatting/testcases/countries/pa.yaml +17 -0
  68. data/address-formatting/testcases/countries/ph.yaml +64 -3
  69. data/address-formatting/testcases/countries/pt.yaml +17 -0
  70. data/address-formatting/testcases/countries/py.yaml +1 -1
  71. data/address-formatting/testcases/countries/ru.yaml +3 -3
  72. data/address-formatting/testcases/countries/sg.yaml +16 -0
  73. data/address-formatting/testcases/countries/sj.yaml +1 -1
  74. data/address-formatting/testcases/countries/sk.yaml +20 -2
  75. data/address-formatting/testcases/countries/sn.yaml +16 -0
  76. data/address-formatting/testcases/countries/tc.yaml +12 -0
  77. data/address-formatting/testcases/countries/th.yaml +1 -1
  78. data/address-formatting/testcases/countries/tk.yaml +1 -1
  79. data/address-formatting/testcases/countries/tw.yaml +7 -7
  80. data/address-formatting/testcases/countries/tz.yaml +1 -7
  81. data/address-formatting/testcases/countries/us.yaml +3 -5
  82. data/address-formatting/testcases/countries/uy.yaml +1 -1
  83. data/address-formatting/testcases/countries/vn.yaml +2 -1
  84. data/address-formatting/testcases/countries/xc.yaml +14 -0
  85. data/address-formatting/testcases/countries/xk.yaml +20 -0
  86. data/address_composer.gemspec +11 -9
  87. data/lib/address_composer/version.rb +1 -1
  88. data/lib/address_composer.rb +92 -14
  89. metadata +83 -34
  90. data/.travis.yml +0 -7
  91. data/address-formatting/.travis.yml +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c044946e2cf8967b36aa267c126579b5bcbf4e529abed3a121bac815265fb6f
4
- data.tar.gz: 4849d192a1073e378624714e536e964846aff9e9297fc5a32ea96238e5abdbc0
3
+ metadata.gz: e248820d945fb5dcea60dc9ac1f25252345709c80f3d7dfcde6874573f522473
4
+ data.tar.gz: ccebf64be28ed5bd201c321f8e875385e950a510fa9aa4f55f438bb1e95c52be
5
5
  SHA512:
6
- metadata.gz: 105c406cc5cf4f269ab44a07ebb31ed7f5db74705f38f0f3379dd23c1331cd86c873dd00f5846a608e221fef402f97a55c9a5320af92d8af61fe8dfa7d06abbb
7
- data.tar.gz: eab56b159a893271e8815c2f4bc2d3ce3686cda249e6376e18fcafe444c08ef5831a10aba4e16ee220b0228de24fb62f2fd140895cd857b660f08137907c9784
6
+ metadata.gz: 6f5533a2a9390874594328d74bac15793dae3be01a419e2cbd9bf6ce6e4ee83e39f2dce405efd6dd29d2b19e25cfc8795f751c675d55457cc354cd9f577a8941
7
+ data.tar.gz: e851627c55c2b11ce9ff0dc2d8adb8a95d1a2101b2b2030e4ad911aeb1f74d72b354b385df1d790874c063d623b71233f8d89427cda124713b5124e8951ed8a9
@@ -6,7 +6,7 @@ jobs:
6
6
  rspec:
7
7
  strategy:
8
8
  matrix:
9
- ruby: [2.4, 2.5, 2.6, 2.7, 3.0]
9
+ ruby: [2.6, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4]
10
10
 
11
11
  runs-on: ubuntu-latest
12
12
 
data/.gitmodules CHANGED
@@ -1,3 +1,4 @@
1
1
  [submodule "address-formatting"]
2
2
  path = address-formatting
3
3
  url = https://github.com/OpenCageData/address-formatting.git
4
+ branch = master
data/.rubocop.yml CHANGED
@@ -1,21 +1,9 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.4.5
2
+ TargetRubyVersion: 2.6
3
3
  Exclude:
4
4
  - "vendor/**/*"
5
5
  - "db/schema.rb"
6
6
  UseCache: false
7
- Rails:
8
- Enabled: false
9
- Rails/UnknownEnv:
10
- Environments:
11
- - beta
12
- - development
13
- - ephemeral
14
- - production
15
- - qa
16
- - sandbox
17
- - simulator
18
- - test
19
7
  Style/DateTime:
20
8
  Enabled: true
21
9
  Style/AsciiComments:
@@ -71,11 +59,11 @@ Naming/PredicateName:
71
59
  - is_
72
60
  - has_
73
61
  - have_
74
- NamePrefixBlacklist:
62
+ ForbiddenPrefixes:
75
63
  - is_
76
64
  Exclude:
77
65
  - spec/**/*
78
- Naming/UncommunicativeMethodParamName:
66
+ Naming/MethodParameterName:
79
67
  # Parameter names may be equal to or greater than this value
80
68
  MinNameLength: 3
81
69
  AllowNamesEndingInNumbers: true
@@ -256,7 +244,7 @@ Style/WhenThen:
256
244
  Lint/EachWithObjectArgument:
257
245
  Description: Check for immutable argument given to each_with_object.
258
246
  Enabled: true
259
- Lint/HandleExceptions:
247
+ Lint/SuppressedException:
260
248
  Description: Don't suppress exception.
261
249
  StyleGuide: https://github.com/bbatsov/ruby-style-guide#dont-hide-exceptions
262
250
  Enabled: false
@@ -270,10 +258,6 @@ Style/Lambda:
270
258
  Description: Use the new lambda literal syntax for single-line blocks.
271
259
  StyleGuide: https://github.com/bbatsov/ruby-style-guide#lambda-multi-line
272
260
  Enabled: false
273
- Rails/HttpPositionalArguments:
274
- Enabled: false
275
- Rails/SkipsModelValidations:
276
- Enabled: false
277
261
  Lint/AmbiguousBlockAssociation:
278
262
  Enabled: false
279
263
  Style/ClassAndModuleChildren:
data/Gemfile.lock CHANGED
@@ -1,49 +1,74 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- address_composer (1.0.1)
5
- mustache (~> 1.1)
4
+ address_composer (2.0.0)
5
+ mustache
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- byebug (11.1.3)
11
- coderay (1.1.3)
12
- diff-lcs (1.4.4)
13
- method_source (1.0.0)
10
+ ast (2.4.2)
11
+ diff-lcs (1.5.1)
12
+ fiddle (1.1.6)
13
+ io-console (0.8.0)
14
+ irb (1.6.3)
15
+ reline (>= 0.3.0)
16
+ json (2.7.6)
14
17
  mustache (1.1.1)
15
- pry (0.14.1)
16
- coderay (~> 1.1)
17
- method_source (~> 1.0)
18
- pry-byebug (3.8.0)
19
- byebug (~> 11.0)
20
- pry (~> 0.10)
21
- rake (13.0.6)
22
- rspec (3.10.0)
23
- rspec-core (~> 3.10.0)
24
- rspec-expectations (~> 3.10.0)
25
- rspec-mocks (~> 3.10.0)
26
- rspec-core (3.10.1)
27
- rspec-support (~> 3.10.0)
28
- rspec-expectations (3.10.1)
18
+ ostruct (0.6.1)
19
+ parallel (1.24.0)
20
+ parser (3.3.7.0)
21
+ ast (~> 2.4.1)
22
+ racc
23
+ racc (1.8.1)
24
+ rainbow (3.1.1)
25
+ rake (13.2.1)
26
+ regexp_parser (2.10.0)
27
+ reline (0.6.0)
28
+ io-console (~> 0.5)
29
+ rexml (3.4.0)
30
+ rspec (3.13.0)
31
+ rspec-core (~> 3.13.0)
32
+ rspec-expectations (~> 3.13.0)
33
+ rspec-mocks (~> 3.13.0)
34
+ rspec-core (3.13.2)
35
+ rspec-support (~> 3.13.0)
36
+ rspec-expectations (3.13.3)
29
37
  diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.10.0)
31
- rspec-mocks (3.10.2)
38
+ rspec-support (~> 3.13.0)
39
+ rspec-mocks (3.13.2)
32
40
  diff-lcs (>= 1.2.0, < 2.0)
33
- rspec-support (~> 3.10.0)
34
- rspec-support (3.10.2)
41
+ rspec-support (~> 3.13.0)
42
+ rspec-support (3.13.2)
43
+ rubocop (1.50.2)
44
+ json (~> 2.3)
45
+ parallel (~> 1.10)
46
+ parser (>= 3.2.0.0)
47
+ rainbow (>= 2.2.2, < 4.0)
48
+ regexp_parser (>= 1.8, < 3.0)
49
+ rexml (>= 3.2.5, < 4.0)
50
+ rubocop-ast (>= 1.28.0, < 2.0)
51
+ ruby-progressbar (~> 1.7)
52
+ unicode-display_width (>= 2.4.0, < 3.0)
53
+ rubocop-ast (1.30.0)
54
+ parser (>= 3.2.1.0)
55
+ ruby-progressbar (1.13.0)
56
+ unicode-display_width (2.6.0)
35
57
 
36
58
  PLATFORMS
37
- ruby
38
- x86_64-darwin-20
59
+ x86_64-darwin-24
60
+ x86_64-linux
39
61
 
40
62
  DEPENDENCIES
41
63
  address_composer!
42
- bundler (~> 2.2)
43
- pry (~> 0.14)
44
- pry-byebug (~> 3.8)
45
- rake (~> 13.0)
46
- rspec (~> 3.10)
64
+ bundler
65
+ fiddle
66
+ irb
67
+ ostruct
68
+ rake
69
+ reline
70
+ rspec
71
+ rubocop
47
72
 
48
73
  BUNDLED WITH
49
- 2.2.22
74
+ 2.4.22
data/README.md CHANGED
@@ -46,6 +46,32 @@ Palo Alto, CA 94303
46
46
  United States of America
47
47
  ```
48
48
 
49
+ You can also control whether the output should be abbreviated or not by passing `should_abbreviate`:
50
+
51
+ ```ruby
52
+ require "address_composer"
53
+
54
+ address_components = {
55
+ "house_number" => 301,
56
+ "road" => "Hamilton Avenue",
57
+ "neighbourhood" => "Crescent Park",
58
+ "city" => "Palo Alto",
59
+ "postcode" => 94303,
60
+ "county" => "Santa Clara County",
61
+ "state" => "California",
62
+ "country" => "United States of America",
63
+ "country_code" => "US",
64
+ "should_abbreviate" => true
65
+ }
66
+
67
+ puts AddressComposer.compose(address_components)
68
+
69
+ 301 Hamilton Ave
70
+ Palo Alto, CA 94303
71
+ United States of America
72
+
73
+ ```
74
+
49
75
  ## Development
50
76
 
51
77
  After checking out the repo, run `git submodule init` and `git submodule update` to fetch all the data from the submodule project and check out the mapped commit.
@@ -0,0 +1,25 @@
1
+ name: CI Tests
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ schedule:
7
+ - cron: '11 22 2 * *'
8
+
9
+ jobs:
10
+ tests:
11
+ runs-on: ubuntu-latest
12
+
13
+ name: Address-Formatting
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - name: Set up perl
19
+ uses: shogo82148/actions-setup-perl@v1
20
+ with:
21
+ perl-version: '5.38'
22
+ install-modules-with: cpanm
23
+
24
+ - name: Tests
25
+ run: bin/run_tests.t
@@ -6,8 +6,7 @@ This project contains templates and test cases for address formats used in terri
6
6
 
7
7
  ### Build Status
8
8
 
9
- [![Build Status](https://travis-ci.com/OpenCageData/address-formatting.svg?branch=master)](https://travis-ci.com/OpenCageData/address-formatting)
10
- [![Twitter Follow](https://img.shields.io/twitter/follow/OpenCage?label=Follow%20OpenCage&style=social)](https://twitter.com/opencage)
9
+ [![Build Status](https://github.com/OpenCageData/address-formatting/actions/workflows/ci.yml/badge.svg)](https://github.com/OpenCageData/address-formatting/actions/workflows/ci.yml)
11
10
 
12
11
  ### An example:
13
12
 
@@ -32,7 +31,7 @@ we want to write logic to compile an address in the format consumers expect
32
31
 
33
32
  ### Why would you want to do this?
34
33
 
35
- The intended use case is database or geocoding systems (forward, reverse, autocomplete) where we know both the country of the address and the language of the user/reader. The address is displayed to a consumer (for example in an app) and not used to print on an envelope for actual postal delivery. We use it to format output from the [OpenCage Geocoder](https://opencagedata.com).
34
+ The intended use case is database or geocoding systems (forward, reverse, autocomplete) where we know both the country of the address and the language of the user/reader. The address is displayed to a consumer (for example in an app) and not used to print on an envelope for actual postal delivery. We use it to format output from the [OpenCage Geocoding API](https://opencagedata.com/api).
36
35
 
37
36
  ### Which addresses are we talking about?
38
37
 
@@ -53,15 +52,17 @@ Our goal with this repository is a series of (programming) language independent
53
52
 
54
53
  There are open-source implementations in
55
54
 
55
+ * [Android library](https://github.com/woheller69/AndroidAddressFormatter)
56
56
  * [Elixir](https://github.com/dkuku/ex_address_formatting)
57
57
  * [Go](https://github.com/timonmasberg/address-formatter)
58
58
  * [Java](https://github.com/placemarkt/address-formatter-java)
59
59
  * [Javascript](https://github.com/fragaria/address-formatter)
60
+ * [Kotlin](https://github.com/bettermile/address-formatter-kotlin)
60
61
  * [Perl](https://metacpan.org/release/Geo-Address-Formatter)
61
62
  * [PHP](https://github.com/predicthq/address-formatter-php)
62
- * [Python](https://github.com/dunkelstern/international_address_formatter)
63
+ * [Python](https://github.com/pudo/addressformatting/tree/master)
63
64
  * [Ruby](https://github.com/mirubiri/address_composer)
64
- * [Rust](https://github.com/CanalTP/address-formatter-rs)
65
+ * [Rust (No Longer Maintained)](https://github.com/antoine-de/address-formatter-rs)
65
66
  * [Scala](https://github.com/ben-willis/address-formatter)
66
67
 
67
68
  We would love more language implementations. The more people who use the templates, the more likely bugs will be reported.
@@ -69,11 +70,11 @@ If you write a processor, please submit a pull request adding it to the list. Th
69
70
 
70
71
  ### International coverage
71
72
 
72
- As of `Sun 17 Feb 2019` coverage is:
73
+ As of March 2024 coverage is:
73
74
 
74
- We are aware of 248 territories
75
- We have tests for 248 (100%) territories
76
- We have rules for 248 (100%) territories
75
+ We are aware of 251 territories
76
+ We have at least one test for 251 (100%) territories
77
+ We have rules for 251 (100%) territories
77
78
  0 (0%) territories have neither rules nor tests
78
79
 
79
80
  This output is generated by `bin/coverage.pl`
@@ -95,8 +96,7 @@ The files are in [YAML](http://yaml.org/) format. The templates are written in [
95
96
  * find an addressed location (house, business, etc) in your
96
97
  target territory in OpenStreetMap
97
98
  * get the coordinates (lat, long) of the location
98
- * put the coordinates into the [OpenCage Geocoder demo
99
- page](https://opencagedata.com/demo)
99
+ * put the coordinates into the [OpenCage Geocoding API demo page](https://opencagedata.com/demo)
100
100
  * look at the resulting JSON in the *Raw Response* tab
101
101
 
102
102
  2. edit `conf/countries/worldwide.yaml`
@@ -137,6 +137,10 @@ We welcome your pull requests. Together we can address the world!
137
137
 
138
138
  This project is licensed under the MIT License - see the [LICENSE.txt](LICENSE.txt) file for details
139
139
 
140
+ ### Additional resources
141
+
142
+ If you are working with addresses you may need [lists of random addresses/postcodes/coordinates](https://opencagedata.com/tools/address-lists) (either in general or for specific countries) for testing.
143
+
140
144
  ### Further reading on the challenge of address
141
145
 
142
146
  Here's [our blog post anouncing this project](https://blog.opencagedata.com/post/99059889253/good-looking-addresses-solving-the-berlin-berlin) and the motivations behind it.
@@ -153,8 +157,10 @@ If all this convinces you that address are evil, please check out [what3words](h
153
157
 
154
158
  <a href="https://opencagedata.com"><img src="opencage_logo_300_150.png"></a>
155
159
 
156
- We run the [OpenCage Geocoder](https://opencagedata.com). Learn more [about us](https://opencagedata.com/about).
160
+ We run a worldwide [geocoding API](https://opencagedata.com/api) and [geosearch](https://opencagedata.com/geosearch) service based on open data.
161
+ Learn more [about us](https://opencagedata.com/about).
162
+
163
+ We also organize [Geomob](https://thegeomob.com), a series of regular meetups for location based service creators, where we do our best to highlight geoinnovation. If you like geo stuff, you will probably enjoy [the Geomob podcast](https://thegeomob.com/podcast/).
157
164
 
158
- We also run [Geomob](https://thegeomob.com), a series of regular meetups for location based service creators, where we do our best to highlight geoinnovation. If you like geo stuff, you will probably enjoy [the Geomob podcast](https://thegeomob.com/podcast/).
159
165
 
160
166
 
@@ -24,7 +24,7 @@ if ($help) {
24
24
  exit(0);
25
25
  }
26
26
 
27
- # get the list of countries
27
+ # get the list of countries (ISO codes)
28
28
  my %countries;
29
29
  my $country_file = dirname(__FILE__) . "/../conf/country_codes.yaml";
30
30
  open my $FH, "<:encoding(UTF-8)", $country_file or die "unable to open $country_file $!";
@@ -33,6 +33,9 @@ while (my $line = <$FH>){
33
33
  if ($line =~ m/^(\w\w): \# (.*)$/){
34
34
  $countries{$1} = $2;
35
35
  }
36
+ elsif ($line =~ m/^"(\w\w)": \# (.*)$/){ # deal with "NO" quoting in yaml
37
+ $countries{$1} = $2;
38
+ }
36
39
  }
37
40
  close $FH;
38
41
  my $total_countries = scalar(keys %countries);
@@ -50,10 +53,13 @@ foreach my $f (sort @files){
50
53
  $f =~ s/\.yaml//;
51
54
  $f = uc($f);
52
55
  $test_countries{$f} = 1;
56
+ if (!defined($countries{$f})){
57
+ print STDERR "have a test for $f but it is not a known territory\n";
58
+ }
53
59
  }
54
60
  my $test_countries = scalar(keys %test_countries);
55
61
  my $test_perc = int(100 * $test_countries / $total_countries );
56
- print "We have tests for " . $test_countries . ' ('
62
+ print "We have at least one test for " . $test_countries . ' ('
57
63
  . $test_perc . '%) territories' . "\n";
58
64
  if ($details){
59
65
  print "We need tests for:\n";
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env perl
2
-
3
- # copy of
4
- # https://github.com/OpenCageData/perl-Geo-Address-Formatter/blob/master/t/unit/countries.t
5
- # and runs in travis-CI (see .travis.yml)
2
+ #
3
+ # run by Github Actions, see .github/workflows/ci.yml
4
+ #
6
5
 
7
6
  use strict;
8
7
  use lib 'perl/lib/perl5';
@@ -21,6 +20,20 @@ binmode $builder->output, ":utf8";
21
20
  binmode $builder->failure_output, ":utf8";
22
21
  binmode $builder->todo_output, ":utf8";
23
22
 
23
+ {
24
+ # Some YAML parsers croak on duplicate keys. By default the Perl parser
25
+ # doesn't. Here we make sure we didn't overlook any duplicate keys.
26
+ $YAML::XS::ForbidDuplicateKeys = 1;
27
+
28
+ my @a_conf_files = File::Find::Rule->file()
29
+ ->name( '*.yaml' )
30
+ ->in( dirname(__FILE__) . '/../conf/' );
31
+
32
+ foreach my $conf_file (@a_conf_files) {
33
+ lives_ok { LoadFile($conf_file) } "parsing file $conf_file";
34
+ }
35
+ }
36
+
24
37
 
25
38
  my $path = dirname(__FILE__) . '/../testcases';
26
39
 
@@ -35,16 +48,29 @@ my $conf_path = dirname(__FILE__) . '/../conf';
35
48
  my $GAF = $CLASS->new( conf_path => $conf_path );
36
49
 
37
50
  sub _one_testcase {
38
- my $country = shift;
39
- my $rh_testcase = shift;
51
+ my $country = shift;
52
+ my $rh_test = shift;
53
+ my $abbrv = shift || 0;
54
+
55
+ my $formatted;
56
+ if ($abbrv){
57
+ $formatted = $GAF->format_address($rh_test->{components}, {abbreviate => 1});
58
+ }
59
+ else {
60
+ $formatted = $GAF->format_address($rh_test->{components});
61
+ }
40
62
  is(
41
- $GAF->format_address($rh_testcase->{components}),
42
- $rh_testcase->{expected},
43
- $country . ' - ' . $rh_testcase->{description}
63
+ $formatted,
64
+ $rh_test->{expected},
65
+ $country . ' - ' . $rh_test->{description}
44
66
  );
45
67
  }
46
68
 
47
69
  foreach my $filename (@files){
70
+ my $abbrv = 0;
71
+ if ($filename =~ m/abbreviations/){
72
+ $abbrv = 1;
73
+ }
48
74
  my $country = basename($filename);
49
75
  $country =~ s/\.\w+$//; # us.yaml => us
50
76
 
@@ -54,7 +80,7 @@ foreach my $filename (@files){
54
80
  } "parsing file $filename";
55
81
 
56
82
  foreach my $rh_testcase (@a_testcases){
57
- _one_testcase($country, $rh_testcase);
83
+ _one_testcase($country, $rh_testcase, $abbrv);
58
84
  }
59
85
  }
60
86
 
@@ -1,4 +1,21 @@
1
1
  road:
2
+ Autopista: Auto
3
+ Avinguda: Av
4
+ Baixada: Bda
5
+ Baixos: Bxs
6
+ Carretera: Ctra
2
7
  Carrer de: C
8
+ Monestir: Mtir
9
+ Parada: Par
10
+ Passatge: Ptge
11
+ Passeig: Pg
12
+ Plaça: Pl
13
+ Porta: Pta
3
14
  Rambla: Rbla
4
-
15
+ Sagrada: Sgda
16
+ Sagrat: Sgt
17
+ Sant: St
18
+ Santa: Sta
19
+ Travessera: Trav
20
+ Travessia: Trv
21
+ via: v
@@ -2,6 +2,3 @@ road:
2
2
  Ulice: Ul
3
3
  Třída: Tř
4
4
  Náměstí: Nám
5
-
6
-
7
-
@@ -7,7 +7,7 @@ road:
7
7
  Sankt: Skt
8
8
  Store: St
9
9
  Søndre: Sdr
10
- Sønder: Sdr
10
+ Sønder: Sdr
11
11
  Vester: V
12
12
  Vestre: V
13
13
  Øster: Ø
@@ -1,4 +1,8 @@
1
1
  country:
2
+ Central African Republic: CAR
3
+ Democratic Republic of Congo: DRC
4
+ New Zealand: NZ
5
+ United Arab Emitrates: UAE
2
6
  United Kingdom: UK
3
7
  United States of America: USA
4
8
  United States Virgin Islands: USVI
@@ -18,7 +22,9 @@ road:
18
22
  Freeway: Fwy
19
23
  Grove: Gr
20
24
  Highway: HWY
21
- Mountain: Mtn
25
+ Junior: Jr
26
+ Lane: Ln
27
+ Mountain: Mtn
22
28
  Northeast: NE
23
29
  Northwest: NW
24
30
  Place: Pl
@@ -1,25 +1,43 @@
1
1
  road:
2
+ Alameda: Alam
3
+ Arboleda: Arb
4
+ Arroyo: Arry
2
5
  Avenida: Avda
6
+ Bloque: Blq
3
7
  Calle de: C
8
+ Camino: Cno
4
9
  Carrera: Cra
5
10
  Carrero: Cro
11
+ Cinturón: Cint
6
12
  Colonia: Col
13
+ Diagonal: Diag
14
+ Doctor: Dr
15
+ Doctora: Dra
7
16
  Estación: Estcn
8
17
  Gran Vía: GV
18
+ Jardín: Jdín
19
+ Malecón: Malec
9
20
  Mercado: Merc
10
- Plaza: Pl
21
+ Mirador: Mrdor
22
+ Nuestra Señora: Ntra Sra
23
+ Palacio: Pala
11
24
  Parque: Pque
25
+ Pasadizo: Pzo
12
26
  Pasaje: Psje
13
27
  Paseo: Po
28
+ Plaza: Pl
14
29
  Pueblo: Pblo
15
30
  Puente: Pnte
16
31
  Puerta: Pta
17
- Puerto: Pto
32
+ Puerto: Pto
18
33
  Rambla: Rbla
19
34
  Ronda: Rda
20
35
  Rotonda: Rtda
21
36
  San: S
22
- Sector: Sect
23
37
  Santa: Sta
38
+ Santo: Sto
39
+ Santas: Stas
40
+ Santos: Stos
41
+ Sector: Sect
24
42
  Viaducto: Vcto
25
43
 
@@ -4,6 +4,3 @@ road:
4
4
  Raudtee: rdt
5
5
  Raudteejaam: rdtj
6
6
  Tänav: tn
7
-
8
-
9
-
@@ -2,4 +2,3 @@ road:
2
2
  Kalea: K
3
3
  Errepidea: Err
4
4
  Etorbidea: Etorb
5
-
@@ -14,6 +14,3 @@ road:
14
14
  tienhaara: th
15
15
  tori: tr
16
16
  väylä: vlä
17
-
18
-
19
-
@@ -4,7 +4,7 @@ road:
4
4
  Boulevard: Boul
5
5
  Cours: Crs
6
6
  Place: Pl
7
- Rue: r
7
+ Rue: R
8
8
  Saint: St
9
9
  Sainte: Ste
10
10
  Zone industrielle: Z.I
@@ -0,0 +1,14 @@
1
+ road:
2
+ Avenida: Avda
3
+ Doutor: Dr
4
+ Doutora: Dra
5
+ Edificio: Edif
6
+ Estrada: Estda
7
+ Rúa: R/
8
+ San: S
9
+ Santa: Sta
10
+ Santo: Sto
11
+ Santas: Stas
12
+ Santos: Stos
13
+ Señora: Sra
14
+ Urbanización: Urb
@@ -16,7 +16,7 @@ road:
16
16
  Salizada: S.da
17
17
  San: S.
18
18
  Santa: S.
19
- Santo: S.
19
+ Santo: S.
20
20
  Santissima: SS.ma
21
21
  Santissime: SS.me
22
22
  Santissimi: SS.mi
@@ -1,19 +1,31 @@
1
1
  road:
2
+ Broeder: Br
2
3
  Burgemeester: Burg
4
+ Commandant: Cmdt
3
5
  Docter: Dr
4
6
  Dokter: Dr
5
7
  Gebroeders: Gebr
6
8
  Generaal: Gen
7
9
  Gracht: Gr
10
+ Ingenieur: Ir
11
+ Jonkheer: Jhr
8
12
  Kardinaal: Kard
9
13
  Kolonel: Kol
14
+ Koning: Kon
15
+ Koningin: Kon
10
16
  Kort: K
11
17
  Korte: Kte
12
18
  Laan: ln
13
19
  Lange: L
20
+ Luitenant: Luit
14
21
  Markt: mkt
22
+ Mejuffrouw: Mej
23
+ Mevrouw: Mevr
15
24
  Minister: Min
16
25
  Monseigneur: Mgr
26
+ Noordzijde: NZ
27
+ Onze-Lieve-Vrouw: OLV
28
+ Oostzijde: OZ
17
29
  Pastoor: Past
18
30
  Prins: Pr
19
31
  Prinses: Pr
@@ -21,6 +33,11 @@ road:
21
33
  Sint: St
22
34
  Straat: str
23
35
  Van: v
36
+ Van der: vd
37
+ Van den: vd
38
+ Verlengde: Verl
24
39
  Vrouwe: Vr
25
40
  Weg: wg
41
+ Westzijde: WZ
42
+ Zuidzijde: ZZ
26
43
  Zuster: Zr
@@ -10,7 +10,3 @@ road:
10
10
  vegen: v
11
11
  vei: v
12
12
  veien: v
13
-
14
-
15
-
16
-