atlas_engine 0.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.
Files changed (298) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +123 -0
  3. data/Rakefile +20 -0
  4. data/app/assets/config/atlas_engine_manifest.js +3 -0
  5. data/app/assets/stylesheets/atlas_engine/application.css +15 -0
  6. data/app/concerns/atlas_engine/handles_blob.rb +26 -0
  7. data/app/concerns/atlas_engine/handles_interruption.rb +22 -0
  8. data/app/controllers/atlas_engine/application_controller.rb +7 -0
  9. data/app/controllers/atlas_engine/connectivity_controller.rb +21 -0
  10. data/app/controllers/atlas_engine/country_imports_controller.rb +73 -0
  11. data/app/controllers/atlas_engine/graphql_controller.rb +59 -0
  12. data/app/countries/atlas_engine/ar/country_profile.yml +9 -0
  13. data/app/countries/atlas_engine/at/address_importer/corrections/open_address/city_corrector.rb +23 -0
  14. data/app/countries/atlas_engine/at/country_profile.yml +24 -0
  15. data/app/countries/atlas_engine/at/index_configuration.yml +63 -0
  16. data/app/countries/atlas_engine/at/synonyms.yml +6 -0
  17. data/app/countries/atlas_engine/at/validation_transcriber/address_parser.rb +58 -0
  18. data/app/countries/atlas_engine/au/address_importer/open_address/filter.rb +26 -0
  19. data/app/countries/atlas_engine/au/address_importer/open_address/mapper.rb +41 -0
  20. data/app/countries/atlas_engine/au/country_profile.yml +13 -0
  21. data/app/countries/atlas_engine/au/synonyms.yml +209 -0
  22. data/app/countries/atlas_engine/au/validation_transcriber/address_parser.rb +121 -0
  23. data/app/countries/atlas_engine/be/country_profile.yml +12 -0
  24. data/app/countries/atlas_engine/bm/address_importer/corrections/open_address/city_alias_corrector.rb +38 -0
  25. data/app/countries/atlas_engine/bm/address_importer/open_address/mapper.rb +40 -0
  26. data/app/countries/atlas_engine/bm/country_profile.yml +12 -0
  27. data/app/countries/atlas_engine/br/country_profile.yml +4 -0
  28. data/app/countries/atlas_engine/ca/country_profile.yml +7 -0
  29. data/app/countries/atlas_engine/ca/synonyms.yml +1615 -0
  30. data/app/countries/atlas_engine/ch/address_importer/corrections/open_address/city_corrector.rb +29 -0
  31. data/app/countries/atlas_engine/ch/address_importer/corrections/open_address/locale_corrector.rb +74 -0
  32. data/app/countries/atlas_engine/ch/address_importer/open_address/mapper.rb +40 -0
  33. data/app/countries/atlas_engine/ch/country_profile.yml +15 -0
  34. data/app/countries/atlas_engine/ch/locales/de/country_profile.yml +15 -0
  35. data/app/countries/atlas_engine/ch/locales/de/index_configuration.yml +63 -0
  36. data/app/countries/atlas_engine/ch/locales/de/synonyms.yml +7 -0
  37. data/app/countries/atlas_engine/ch/locales/fr/synonyms.yml +21 -0
  38. data/app/countries/atlas_engine/cz/country_profile.yml +6 -0
  39. data/app/countries/atlas_engine/de/country_profile.yml +19 -0
  40. data/app/countries/atlas_engine/de/index_configuration.yml +64 -0
  41. data/app/countries/atlas_engine/de/synonyms.yml +2 -0
  42. data/app/countries/atlas_engine/de/validation_transcriber/address_parser.rb +19 -0
  43. data/app/countries/atlas_engine/dk/country_profile.yml +6 -0
  44. data/app/countries/atlas_engine/dk/synonyms.yml +3 -0
  45. data/app/countries/atlas_engine/dk/validation_transcriber/address_parser.rb +21 -0
  46. data/app/countries/atlas_engine/fo/country_profile.yml +5 -0
  47. data/app/countries/atlas_engine/fr/address_importer/corrections/open_address/city_corrector.rb +28 -0
  48. data/app/countries/atlas_engine/fr/country_profile.yml +13 -0
  49. data/app/countries/atlas_engine/fr/synonyms.yml +21 -0
  50. data/app/countries/atlas_engine/fr/validation_transcriber/address_parser.rb +34 -0
  51. data/app/countries/atlas_engine/gb/address_validation/es/query_builder.rb +98 -0
  52. data/app/countries/atlas_engine/gb/country_profile.yml +10 -0
  53. data/app/countries/atlas_engine/gb/validation_transcriber/full_address_parser.rb +164 -0
  54. data/app/countries/atlas_engine/gb/validation_transcriber/parsed_address.rb +120 -0
  55. data/app/countries/atlas_engine/gg/address_validation/validators/full_address/restrictions/unsupported_city.rb +39 -0
  56. data/app/countries/atlas_engine/gg/country_profile.yml +7 -0
  57. data/app/countries/atlas_engine/ie/country_profile.yml +3 -0
  58. data/app/countries/atlas_engine/it/address_importer/corrections/open_address/city_corrector.rb +27 -0
  59. data/app/countries/atlas_engine/it/address_importer/corrections/open_address/province_corrector.rb +29 -0
  60. data/app/countries/atlas_engine/it/address_importer/open_address/mapper.rb +42 -0
  61. data/app/countries/atlas_engine/it/country_profile.yml +11 -0
  62. data/app/countries/atlas_engine/jp/address_validation/es/data_mapper.rb +63 -0
  63. data/app/countries/atlas_engine/jp/country_profile.yml +6 -0
  64. data/app/countries/atlas_engine/kr/address_importer/open_address/mapper.rb +41 -0
  65. data/app/countries/atlas_engine/kr/country_profile.yml +11 -0
  66. data/app/countries/atlas_engine/li/address_importer/corrections/open_address/city_corrector.rb +25 -0
  67. data/app/countries/atlas_engine/li/country_profile.yml +21 -0
  68. data/app/countries/atlas_engine/li/index_configuration.yml +63 -0
  69. data/app/countries/atlas_engine/li/synonyms.yml +6 -0
  70. data/app/countries/atlas_engine/lt/country_profile.yml +6 -0
  71. data/app/countries/atlas_engine/lt/synonyms.yml +7 -0
  72. data/app/countries/atlas_engine/lt/validation_transcriber/address_parser.rb +24 -0
  73. data/app/countries/atlas_engine/lu/address_importer/corrections/open_address/locale_corrector.rb +54 -0
  74. data/app/countries/atlas_engine/lu/country_profile.yml +12 -0
  75. data/app/countries/atlas_engine/nl/address_importer/corrections/open_address/city_corrector.rb +25 -0
  76. data/app/countries/atlas_engine/nl/country_profile.yml +18 -0
  77. data/app/countries/atlas_engine/nl/index_configuration.yml +52 -0
  78. data/app/countries/atlas_engine/nl/synonyms.yml +92 -0
  79. data/app/countries/atlas_engine/nl/validation_transcriber/address_parser.rb +85 -0
  80. data/app/countries/atlas_engine/no/country_profile.yml +5 -0
  81. data/app/countries/atlas_engine/nz/country_profile.yml +3 -0
  82. data/app/countries/atlas_engine/pl/country_profile.yml +5 -0
  83. data/app/countries/atlas_engine/pl/validation_transcriber/address_parser.rb +19 -0
  84. data/app/countries/atlas_engine/pt/address_importer/corrections/open_address/city_corrector.rb +32 -0
  85. data/app/countries/atlas_engine/pt/address_importer/open_address/mapper.rb +39 -0
  86. data/app/countries/atlas_engine/pt/country_profile.yml +10 -0
  87. data/app/countries/atlas_engine/pt/synonyms.yml +7 -0
  88. data/app/countries/atlas_engine/sa/country_profile.yml +10 -0
  89. data/app/countries/atlas_engine/se/country_profile.yml +5 -0
  90. data/app/countries/atlas_engine/tt/address_importer/open_address/mapper.rb +38 -0
  91. data/app/countries/atlas_engine/tt/country_profile.yml +7 -0
  92. data/app/countries/atlas_engine/us/country_profile.yml +12 -0
  93. data/app/countries/atlas_engine/us/synonyms.yml +350 -0
  94. data/app/graphql/atlas_engine/errors/locale_unsupported_error.rb +17 -0
  95. data/app/graphql/atlas_engine/schema.graphql +1293 -0
  96. data/app/graphql/atlas_engine/schema.rb +23 -0
  97. data/app/graphql/atlas_engine/types/address_validation/address_input.rb +51 -0
  98. data/app/graphql/atlas_engine/types/address_validation/concern_type.rb +20 -0
  99. data/app/graphql/atlas_engine/types/address_validation/enums/concern_enum.rb +15 -0
  100. data/app/graphql/atlas_engine/types/address_validation/field_type.rb +15 -0
  101. data/app/graphql/atlas_engine/types/address_validation/suggestion_type.rb +21 -0
  102. data/app/graphql/atlas_engine/types/base_argument.rb +9 -0
  103. data/app/graphql/atlas_engine/types/base_enum.rb +9 -0
  104. data/app/graphql/atlas_engine/types/base_field.rb +10 -0
  105. data/app/graphql/atlas_engine/types/base_input_object.rb +9 -0
  106. data/app/graphql/atlas_engine/types/base_interface.rb +10 -0
  107. data/app/graphql/atlas_engine/types/base_object.rb +9 -0
  108. data/app/graphql/atlas_engine/types/base_scalar.rb +9 -0
  109. data/app/graphql/atlas_engine/types/base_union.rb +9 -0
  110. data/app/graphql/atlas_engine/types/matching_strategy_type.rb +12 -0
  111. data/app/graphql/atlas_engine/types/mutation_type.rb +9 -0
  112. data/app/graphql/atlas_engine/types/query_type.rb +61 -0
  113. data/app/graphql/atlas_engine/types/validation_supported_country.rb +12 -0
  114. data/app/graphql/atlas_engine/types/validation_type.rb +22 -0
  115. data/app/helpers/atlas_engine/address_importer/import_log_helper.rb +66 -0
  116. data/app/helpers/atlas_engine/application_helper.rb +7 -0
  117. data/app/helpers/atlas_engine/locale_format_helper.rb +40 -0
  118. data/app/helpers/atlas_engine/log_base.rb +32 -0
  119. data/app/helpers/atlas_engine/log_helper.rb +24 -0
  120. data/app/helpers/atlas_engine/metrics_helper.rb +25 -0
  121. data/app/jobs/atlas_engine/address_importer/clear_records_job.rb +39 -0
  122. data/app/jobs/atlas_engine/address_importer/open_address/geo_json_import_job.rb +212 -0
  123. data/app/jobs/atlas_engine/address_importer/open_address/geo_json_import_launcher_job.rb +67 -0
  124. data/app/jobs/atlas_engine/address_importer/open_address/prepares_geo_json_file.rb +41 -0
  125. data/app/jobs/atlas_engine/address_importer/resumable_import_job.rb +49 -0
  126. data/app/jobs/atlas_engine/address_importer/street_backfill_job.rb +63 -0
  127. data/app/jobs/atlas_engine/application_job.rb +10 -0
  128. data/app/jobs/atlas_engine/concerns/address_importer/handles_errors.rb +43 -0
  129. data/app/lib/atlas_engine/concern_formatter.rb +40 -0
  130. data/app/lib/atlas_engine/restrictions/base.rb +20 -0
  131. data/app/lib/atlas_engine/restrictions/unsupported_script.rb +31 -0
  132. data/app/lib/atlas_engine/validation_transcriber/address_parser_base.rb +201 -0
  133. data/app/lib/atlas_engine/validation_transcriber/address_parser_factory.rb +27 -0
  134. data/app/lib/atlas_engine/validation_transcriber/address_parser_north_america.rb +39 -0
  135. data/app/lib/atlas_engine/validation_transcriber/address_parser_oceanic.rb +17 -0
  136. data/app/lib/atlas_engine/validation_transcriber/address_parser_preprocessor.rb +132 -0
  137. data/app/lib/atlas_engine/validation_transcriber/address_parsing_helper.rb +38 -0
  138. data/app/lib/atlas_engine/validation_transcriber/address_parsings.rb +54 -0
  139. data/app/lib/atlas_engine/validation_transcriber/constants.rb +50 -0
  140. data/app/lib/atlas_engine/validation_transcriber/english_street_parser.rb +59 -0
  141. data/app/lib/atlas_engine/validation_transcriber/formatter.rb +46 -0
  142. data/app/lib/atlas_engine/validation_transcriber/french_street_parser.rb +50 -0
  143. data/app/lib/atlas_engine/validation_transcriber/province_code_normalizer.rb +45 -0
  144. data/app/lib/atlas_engine/validation_transcriber/street_parser.rb +18 -0
  145. data/app/lib/atlas_engine/validation_transcriber/zip_normalizer.rb +23 -0
  146. data/app/mailers/atlas_engine/application_mailer.rb +9 -0
  147. data/app/models/atlas_engine/address_importer/corrections/corrector.rb +33 -0
  148. data/app/models/atlas_engine/address_importer/import_events_notifier/base.rb +35 -0
  149. data/app/models/atlas_engine/address_importer/import_events_notifier/notifier.rb +26 -0
  150. data/app/models/atlas_engine/address_importer/open_address/default_mapper.rb +46 -0
  151. data/app/models/atlas_engine/address_importer/open_address/feature_helper.rb +110 -0
  152. data/app/models/atlas_engine/address_importer/open_address/filter.rb +17 -0
  153. data/app/models/atlas_engine/address_importer/open_address/loader.rb +27 -0
  154. data/app/models/atlas_engine/address_importer/open_address/transformer.rb +39 -0
  155. data/app/models/atlas_engine/address_importer/open_address.rb +10 -0
  156. data/app/models/atlas_engine/address_importer/validation/base_validator.rb +86 -0
  157. data/app/models/atlas_engine/address_importer/validation/default_validator.rb +27 -0
  158. data/app/models/atlas_engine/address_importer/validation/field_validations/city.rb +47 -0
  159. data/app/models/atlas_engine/address_importer/validation/field_validations/interface.rb +29 -0
  160. data/app/models/atlas_engine/address_importer/validation/field_validations/province.rb +73 -0
  161. data/app/models/atlas_engine/address_importer/validation/field_validations/zip.rb +84 -0
  162. data/app/models/atlas_engine/address_importer/validation/validator.rb +17 -0
  163. data/app/models/atlas_engine/address_importer/validation/wrapper.rb +70 -0
  164. data/app/models/atlas_engine/address_number.rb +36 -0
  165. data/app/models/atlas_engine/address_number_range.rb +200 -0
  166. data/app/models/atlas_engine/address_validation/abstract_address.rb +49 -0
  167. data/app/models/atlas_engine/address_validation/address.rb +47 -0
  168. data/app/models/atlas_engine/address_validation/candidate.rb +109 -0
  169. data/app/models/atlas_engine/address_validation/candidate_tuple.rb +15 -0
  170. data/app/models/atlas_engine/address_validation/concern.rb +74 -0
  171. data/app/models/atlas_engine/address_validation/concern_producer.rb +19 -0
  172. data/app/models/atlas_engine/address_validation/concern_queue.rb +20 -0
  173. data/app/models/atlas_engine/address_validation/concern_record.rb +122 -0
  174. data/app/models/atlas_engine/address_validation/datastore_base.rb +27 -0
  175. data/app/models/atlas_engine/address_validation/errors.rb +13 -0
  176. data/app/models/atlas_engine/address_validation/es/candidate_selector.rb +70 -0
  177. data/app/models/atlas_engine/address_validation/es/data_mappers/decompounding_data_mapper.rb +39 -0
  178. data/app/models/atlas_engine/address_validation/es/data_mappers/default_data_mapper.rb +110 -0
  179. data/app/models/atlas_engine/address_validation/es/datastore.rb +229 -0
  180. data/app/models/atlas_engine/address_validation/es/default_query_builder.rb +30 -0
  181. data/app/models/atlas_engine/address_validation/es/query_builder.rb +160 -0
  182. data/app/models/atlas_engine/address_validation/es/term_vectors.rb +78 -0
  183. data/app/models/atlas_engine/address_validation/es/validators/full_address.rb +123 -0
  184. data/app/models/atlas_engine/address_validation/es/validators/full_address_street.rb +18 -0
  185. data/app/models/atlas_engine/address_validation/es/validators/restriction_evaluator.rb +37 -0
  186. data/app/models/atlas_engine/address_validation/field.rb +30 -0
  187. data/app/models/atlas_engine/address_validation/full_address_validator_base.rb +27 -0
  188. data/app/models/atlas_engine/address_validation/log_emitter.rb +66 -0
  189. data/app/models/atlas_engine/address_validation/matching_strategies.rb +16 -0
  190. data/app/models/atlas_engine/address_validation/normalizer.rb +38 -0
  191. data/app/models/atlas_engine/address_validation/predicate_pipeline.rb +80 -0
  192. data/app/models/atlas_engine/address_validation/request.rb +12 -0
  193. data/app/models/atlas_engine/address_validation/result.rb +154 -0
  194. data/app/models/atlas_engine/address_validation/runs_validation.rb +16 -0
  195. data/app/models/atlas_engine/address_validation/session.rb +47 -0
  196. data/app/models/atlas_engine/address_validation/statsd_emitter.rb +72 -0
  197. data/app/models/atlas_engine/address_validation/strategies.rb +10 -0
  198. data/app/models/atlas_engine/address_validation/suggestion.rb +97 -0
  199. data/app/models/atlas_engine/address_validation/token/comparator.rb +44 -0
  200. data/app/models/atlas_engine/address_validation/token/comparison.rb +76 -0
  201. data/app/models/atlas_engine/address_validation/token/sequence/comparator.rb +158 -0
  202. data/app/models/atlas_engine/address_validation/token/sequence/comparison.rb +166 -0
  203. data/app/models/atlas_engine/address_validation/token/sequence.rb +147 -0
  204. data/app/models/atlas_engine/address_validation/token/synonyms.rb +77 -0
  205. data/app/models/atlas_engine/address_validation/token.rb +113 -0
  206. data/app/models/atlas_engine/address_validation/validator.rb +147 -0
  207. data/app/models/atlas_engine/address_validation/validators/full_address/address_comparison.rb +97 -0
  208. data/app/models/atlas_engine/address_validation/validators/full_address/candidate_result.rb +164 -0
  209. data/app/models/atlas_engine/address_validation/validators/full_address/candidate_result_base.rb +46 -0
  210. data/app/models/atlas_engine/address_validation/validators/full_address/comparison_helper.rb +135 -0
  211. data/app/models/atlas_engine/address_validation/validators/full_address/components_to_validate.rb +88 -0
  212. data/app/models/atlas_engine/address_validation/validators/full_address/concern_builder.rb +127 -0
  213. data/app/models/atlas_engine/address_validation/validators/full_address/exclusions/exclusion_base.rb +23 -0
  214. data/app/models/atlas_engine/address_validation/validators/full_address/invalid_zip_concern_builder.rb +42 -0
  215. data/app/models/atlas_engine/address_validation/validators/full_address/invalid_zip_for_country_concern.rb +37 -0
  216. data/app/models/atlas_engine/address_validation/validators/full_address/invalid_zip_for_province_concern.rb +37 -0
  217. data/app/models/atlas_engine/address_validation/validators/full_address/no_candidate_result.rb +26 -0
  218. data/app/models/atlas_engine/address_validation/validators/full_address/number_comparison.rb +31 -0
  219. data/app/models/atlas_engine/address_validation/validators/full_address/postal_code_matcher.rb +60 -0
  220. data/app/models/atlas_engine/address_validation/validators/full_address/result_updater.rb +42 -0
  221. data/app/models/atlas_engine/address_validation/validators/full_address/suggestion_builder.rb +140 -0
  222. data/app/models/atlas_engine/address_validation/validators/full_address/unknown_address_concern.rb +30 -0
  223. data/app/models/atlas_engine/address_validation/validators/full_address/unknown_province_concern.rb +38 -0
  224. data/app/models/atlas_engine/address_validation/validators/full_address/unknown_zip_for_address_concern.rb +32 -0
  225. data/app/models/atlas_engine/address_validation/validators/full_address/unmatched_field_concern.rb +84 -0
  226. data/app/models/atlas_engine/address_validation/validators/full_address/unsupported_script_result.rb +22 -0
  227. data/app/models/atlas_engine/address_validation/validators/predicates/cache.rb +38 -0
  228. data/app/models/atlas_engine/address_validation/validators/predicates/city/present.rb +36 -0
  229. data/app/models/atlas_engine/address_validation/validators/predicates/country/exists.rb +34 -0
  230. data/app/models/atlas_engine/address_validation/validators/predicates/country/valid_for_zip.rb +60 -0
  231. data/app/models/atlas_engine/address_validation/validators/predicates/no_emojis.rb +38 -0
  232. data/app/models/atlas_engine/address_validation/validators/predicates/no_html_tags.rb +39 -0
  233. data/app/models/atlas_engine/address_validation/validators/predicates/no_url.rb +38 -0
  234. data/app/models/atlas_engine/address_validation/validators/predicates/not_exceed_max_length.rb +34 -0
  235. data/app/models/atlas_engine/address_validation/validators/predicates/not_exceed_max_token_count.rb +63 -0
  236. data/app/models/atlas_engine/address_validation/validators/predicates/phone/valid.rb +41 -0
  237. data/app/models/atlas_engine/address_validation/validators/predicates/predicate.rb +37 -0
  238. data/app/models/atlas_engine/address_validation/validators/predicates/province/exists.rb +43 -0
  239. data/app/models/atlas_engine/address_validation/validators/predicates/province/valid_for_country.rb +48 -0
  240. data/app/models/atlas_engine/address_validation/validators/predicates/street/building_number_in_address1.rb +45 -0
  241. data/app/models/atlas_engine/address_validation/validators/predicates/street/building_number_in_address1_or_address2.rb +43 -0
  242. data/app/models/atlas_engine/address_validation/validators/predicates/street/present.rb +35 -0
  243. data/app/models/atlas_engine/address_validation/validators/predicates/zip/present.rb +58 -0
  244. data/app/models/atlas_engine/address_validation/validators/predicates/zip/valid_for_country.rb +45 -0
  245. data/app/models/atlas_engine/address_validation/validators/predicates/zip/valid_for_province.rb +55 -0
  246. data/app/models/atlas_engine/address_validation/validators/predicates/zip/zip_base.rb +25 -0
  247. data/app/models/atlas_engine/address_validation/zip_truncator.rb +32 -0
  248. data/app/models/atlas_engine/application_record.rb +8 -0
  249. data/app/models/atlas_engine/coded_error.rb +18 -0
  250. data/app/models/atlas_engine/coded_errors.rb +17 -0
  251. data/app/models/atlas_engine/country_import.rb +44 -0
  252. data/app/models/atlas_engine/country_profile.rb +270 -0
  253. data/app/models/atlas_engine/country_profile_ingestion_subset.rb +42 -0
  254. data/app/models/atlas_engine/country_profile_subset_base.rb +22 -0
  255. data/app/models/atlas_engine/country_profile_validation_subset.rb +48 -0
  256. data/app/models/atlas_engine/country_repository.rb +110 -0
  257. data/app/models/atlas_engine/elasticsearch/client.rb +116 -0
  258. data/app/models/atlas_engine/elasticsearch/client_interface.rb +89 -0
  259. data/app/models/atlas_engine/elasticsearch/repository.rb +246 -0
  260. data/app/models/atlas_engine/elasticsearch/repository_interface.rb +82 -0
  261. data/app/models/atlas_engine/elasticsearch/response.rb +20 -0
  262. data/app/models/atlas_engine/event.rb +12 -0
  263. data/app/models/atlas_engine/field_decompounder.rb +36 -0
  264. data/app/models/atlas_engine/index_configuration_factory.rb +188 -0
  265. data/app/models/atlas_engine/post_address.rb +114 -0
  266. data/app/models/atlas_engine/post_address_importer.rb +34 -0
  267. data/app/models/atlas_engine/services/service_helper.rb +21 -0
  268. data/app/models/atlas_engine/services/validation.rb +65 -0
  269. data/app/models/atlas_engine/services/validation_eligibility.rb +18 -0
  270. data/app/models/atlas_engine/street.rb +34 -0
  271. data/app/tasks/maintenance/atlas_engine/elasticsearch_index_create_task.rb +106 -0
  272. data/app/tasks/maintenance/atlas_engine/geo_json_import_task.rb +29 -0
  273. data/app/views/atlas_engine/connectivity/index.html.erb +50 -0
  274. data/app/views/atlas_engine/country_imports/index.html.erb +49 -0
  275. data/app/views/atlas_engine/country_imports/show.html.erb +73 -0
  276. data/app/views/layouts/atlas_engine/application.html.erb +15 -0
  277. data/config/initializers/1.ruby_patches.rb +18 -0
  278. data/config/initializers/sorbet.rb +5 -0
  279. data/config/initializers/worldwide.rb +5 -0
  280. data/config/locales/internal/en.yml +14 -0
  281. data/config/routes.rb +17 -0
  282. data/db/data/address_synonyms/index_configurations/default.yml +141 -0
  283. data/db/data/country_profiles/default.yml +23 -0
  284. data/db/data/transcriber.yml +760 -0
  285. data/db/data/validation_pipelines/es.yml +58 -0
  286. data/db/data/validation_pipelines/es_street.yml +58 -0
  287. data/db/data/validation_pipelines/local.yml +60 -0
  288. data/db/migrate/20230919173037_create_atlas_engine_post_addresses.rb +25 -0
  289. data/db/migrate/20231117142735_add_building_and_unit_ranges_column.rb +7 -0
  290. data/db/migrate/20231117143536_create_atlas_engine_country_imports.rb +11 -0
  291. data/db/migrate/20231117145844_create_atlas_engine_events_table.rb +13 -0
  292. data/db/migrate/20231123153554_add_unique_index_to_atlas_engine_post_addresses.rb +14 -0
  293. data/db/migrate/20231123154658_add_index_to_post_addresses_on_source_id_locale_country_code.rb +12 -0
  294. data/lib/atlas_engine/engine.rb +10 -0
  295. data/lib/atlas_engine/version.rb +6 -0
  296. data/lib/atlas_engine.rb +66 -0
  297. data/lib/tasks/atlas_engine/address_importer.rake +20 -0
  298. metadata +553 -0
@@ -0,0 +1,209 @@
1
+ city_synonyms:
2
+ - saint, st
3
+ - mount, mt
4
+ street_synonyms:
5
+ - ANT, Antenna
6
+ - APT, Apartment
7
+ - ATM, Automated Teller Machine
8
+ - BBQ, Barbecue
9
+ - BTSD, Boatshed
10
+ - BLDG, Building
11
+ - BNGW, Bungalow
12
+ - CAGE, Cage
13
+ - CARP, Carpark
14
+ - CARS, Carspace
15
+ - CLUB, Club
16
+ - COOL, Coolroom
17
+ - CTGE, Cottage
18
+ - DUPL, Duplex
19
+ - FCTY, Factory
20
+ - FLAT, Flat
21
+ - GRGE, Garage
22
+ - HALL, Hall
23
+ - HSE, House
24
+ - KSK, Kiosk
25
+ - LSE, Lease
26
+ - LBBY, Lobby
27
+ - LOFT, Loft
28
+ - LOT, Lot
29
+ - MT, Mount
30
+ - MSNT, Maisonette
31
+ - MBTH, Marine Berth
32
+ - OFFC, Office
33
+ - RESV, Reserve
34
+ - ROOM, Room
35
+ - SHED, Shed
36
+ - SHOP, Shop
37
+ - SHRM, Showroom
38
+ - SIGN, Sign
39
+ - SITE, Site
40
+ - STLL, Stall
41
+ - STOR, Store
42
+ - STR, Strata unit
43
+ - STU, Studio/studio apartment
44
+ - SUBS, Substation
45
+ - SE, Suite
46
+ - TNCY, Tenancy
47
+ - TWR, Tower
48
+ - TNHS, Townhouse
49
+ - UNIT, Unit
50
+ - VLT, Vault
51
+ - VLLA, Villa
52
+ - WARD, Ward
53
+ - WHSE, Warehouse
54
+ - WKSH, Workshop
55
+ - B, Basement
56
+ - FL, Floor
57
+ - G, Ground
58
+ - L, Level
59
+ - LG, Lower ground floor
60
+ - M, Mezzanine
61
+ - OD, Observation deck
62
+ - P, Parking
63
+ - PTHS, Penthouse
64
+ - PLF, Platform
65
+ - PDM, Podium
66
+ - RT, Rooftop
67
+ - SB, Sub-basement
68
+ - UG, Upper ground floor
69
+ - CN, Central
70
+ - E, East
71
+ - EX, Extension
72
+ - LR, Lower
73
+ - N, North
74
+ - NE, North East
75
+ - NW, North West
76
+ - S, South
77
+ - SE, South East
78
+ - SW, South West
79
+ - UP, Upper
80
+ - W, West
81
+ - ACCS, Access
82
+ - ALLY, Alley
83
+ - ALWY, Alleyway
84
+ - AMBL, Amble
85
+ - APP, Approach
86
+ - ARC, Arcade
87
+ - ARTL, Arterial
88
+ - ARTY, Artery
89
+ - AV, Ave, Avenue
90
+ - BA, Banan
91
+ - BEND, Bend
92
+ - BWLK, Boardwalk
93
+ - BVD, Boulevard
94
+ - BR, Brace
95
+ - BRAE, Brae
96
+ - BRK, Break
97
+ - BROW, Brow
98
+ - BYPA, Bypass
99
+ - BYWY, Byway
100
+ - CSWY, Causeway
101
+ - CTR, Centre
102
+ - CH, Chase
103
+ - CIR, Circle
104
+ - CCT, Circuit
105
+ - CRCS, Circus
106
+ - CL, Close
107
+ - CON, Concourse
108
+ - CPS, Copse
109
+ - CNR, Corner
110
+ - CT, Crt, Court
111
+ - CTYD, Courtyard
112
+ - COVE, Cove
113
+ - CR, Cres, Crescent
114
+ - CRST, Crest
115
+ - CRSS, Cross
116
+ - CSAC, Cul-de-sac
117
+ - CUTT, Cutting
118
+ - DALE, Dale
119
+ - DIP, Dip
120
+ - DR, Drive
121
+ - DVWY, Driveway
122
+ - EDGE, Edge
123
+ - ELB, Elbow
124
+ - END, End
125
+ - ENT, Entrance
126
+ - ESP, Esplanade
127
+ - EXP, Expressway
128
+ - FAWY, Fairway
129
+ - FOLW, Follow
130
+ - FTWY, Footway
131
+ - FORM, Formation
132
+ - FWY, Freeway
133
+ - FRTG, Frontage
134
+ - GAP, Gap
135
+ - GDNS, Gardens
136
+ - GTE, Gate
137
+ - GLDE, Glade
138
+ - GLEN, Glen
139
+ - GRA, Grange
140
+ - GRN, Green
141
+ - GR, Grove
142
+ - HTS, Heights
143
+ - HIRD, Highroad
144
+ - HWY, Highway
145
+ - HILL, Hill
146
+ - INTG, Interchange
147
+ - JNC, Junction
148
+ - KEY, Key
149
+ - LANE, Ln, Lane
150
+ - LNWY, Laneway
151
+ - LINE, Line
152
+ - LINK, Link
153
+ - LKT, Lookout
154
+ - LOOP, Loop
155
+ - MALL, Mall
156
+ - MNDR, Meander
157
+ - MEWS, Mews
158
+ - MTWY, Motorway
159
+ - NOOK, Nook
160
+ - OTLK, Outlook
161
+ - PDE, Parade
162
+ - PWY, Pkwy, Parkway
163
+ - PASS, Pass
164
+ - PSGE, Passage
165
+ - PATH, Path
166
+ - PWAY, Pathway
167
+ - PIAZ, Piazza
168
+ - PLZA, Plaza
169
+ - Pl, Place
170
+ - PKT, Pocket
171
+ - PNT, Point
172
+ - PORT, Port
173
+ - PROM, Promenade
174
+ - QDRT, Quadrant
175
+ - QYS, Quays
176
+ - RMBL, Ramble
177
+ - REST, Rest
178
+ - RTT, Retreat
179
+ - RDGE, Ridge
180
+ - RISE, Rise
181
+ - RD, Road
182
+ - RTY, Rotary
183
+ - RTE, Route
184
+ - ROW, Row
185
+ - RUE, Rue
186
+ - SVWY, Serviceway
187
+ - SHUN, Shunt
188
+ - SPUR, Spur
189
+ - SQ, Square
190
+ - ST, Street
191
+ - SBWY, Subway
192
+ - TARN, Tarn
193
+ - TCE, Terrace
194
+ - THFR, Thoroughfare
195
+ - TLWY, Tollway
196
+ - TOP, Top
197
+ - TOR, Tor
198
+ - TRK, Track
199
+ - TRL, Trail
200
+ - TURN, Turn
201
+ - UPAS, Underpass
202
+ - VALE, Vale
203
+ - VIAD, Viaduct
204
+ - VIEW, View
205
+ - VSTA, Vista
206
+ - WALK, Walk
207
+ - WKWY, Walkway
208
+ - WHRF, Wharf
209
+ - WYND, Wynd
@@ -0,0 +1,121 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module AtlasEngine
5
+ module Au
6
+ module ValidationTranscriber
7
+ class AddressParser < AtlasEngine::ValidationTranscriber::AddressParserBase
8
+ # Temporary till we fix constants loading for AddressParsers
9
+ # Source: https://meteor.aihw.gov.au/content/429004
10
+ UNIT_TYPE_KEYWORDS = T.let(
11
+ Set.new([
12
+ "ant",
13
+ "apt",
14
+ "atm",
15
+ "bbq",
16
+ "btsd",
17
+ "bldg",
18
+ "bngw",
19
+ "cage",
20
+ "carp",
21
+ "cars",
22
+ "club",
23
+ "cool",
24
+ "ctge",
25
+ "dupl",
26
+ "fcty",
27
+ "flat",
28
+ "grge",
29
+ "hall",
30
+ "hse",
31
+ "ksk",
32
+ "lse",
33
+ "lbby",
34
+ "loft",
35
+ "lot",
36
+ "msnt",
37
+ "mbth",
38
+ "offc",
39
+ "resv",
40
+ "room",
41
+ "shed",
42
+ "shop",
43
+ "shrm",
44
+ "sign",
45
+ "site",
46
+ "stll",
47
+ "stor",
48
+ "str",
49
+ "stu",
50
+ "subs",
51
+ "se",
52
+ "tncy",
53
+ "twr",
54
+ "tnhs",
55
+ "unit",
56
+ "vlt",
57
+ "vlla",
58
+ "ward",
59
+ "whse",
60
+ "wksh",
61
+ ]),
62
+ T::Set[String],
63
+ )
64
+
65
+ sig { override.returns(T::Array[Regexp]) }
66
+ def country_regex_formats
67
+ @country_regex_formats ||= [
68
+ /(#{unit_regex})?#{bldg_num_regex}\s+#{street_regex}/i,
69
+ ]
70
+ end
71
+
72
+ private
73
+
74
+ sig { returns(Regexp) }
75
+ def unit_regex
76
+ # examples
77
+ # 10
78
+ # 10/
79
+ # flat 10
80
+ # flat 10,
81
+ # flat 10/
82
+ # 10A
83
+ # A10
84
+ @unit_regex ||= T.let(
85
+ %r{
86
+ (?<unit_type>(#{unit_type_list}))?\s*
87
+ (?<unit_num>\d+[a-z]?|[a-z]?\d+)(\s|\/|,)+
88
+ }ix,
89
+ T.nilable(Regexp),
90
+ )
91
+ end
92
+
93
+ sig { returns(Regexp) }
94
+ def bldg_num_regex
95
+ # examples:
96
+ # 100
97
+ # 100B
98
+ # 100-102
99
+ @bldg_num_regex ||= T.let(/(?<building_num>\d+(\-\d+|[a-z]?))/i, T.nilable(Regexp))
100
+ end
101
+
102
+ sig { returns(Regexp) }
103
+ def street_regex
104
+ @street_regex ||= T.let(/(?<street>.+)/, T.nilable(Regexp))
105
+ end
106
+
107
+ sig { override.params(token: T.nilable(String)).returns(T::Boolean) }
108
+ def secondary_unit_designator?(token)
109
+ return false if token.blank?
110
+
111
+ UNIT_TYPE_KEYWORDS.include?(token)
112
+ end
113
+
114
+ sig { returns(String) }
115
+ def unit_type_list
116
+ UNIT_TYPE_KEYWORDS.join("|")
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,12 @@
1
+ id: BE
2
+ ingestion:
3
+ settings:
4
+ min_zip_edge_ngram: "1"
5
+ max_zip_edge_ngram: "4"
6
+ validation:
7
+ enabled: true
8
+ default_matching_strategy: local
9
+ index_locales:
10
+ - fr
11
+ - nl
12
+ - de
@@ -0,0 +1,38 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module AtlasEngine
5
+ module Bm
6
+ module AddressImporter
7
+ module Corrections
8
+ module OpenAddress
9
+ class CityAliasCorrector
10
+ class << self
11
+ extend T::Sig
12
+
13
+ BM_PARISH_AND_CITY_NAMES = {
14
+ "Devonshire" => "Devonshire Parish",
15
+ "Hamilton" => "Hamilton Parish",
16
+ "Paget" => "Paget Parish",
17
+ "Pembroke" => "Pembroke Parish",
18
+ "Sandys" => "Sandys Parish",
19
+ "Smiths" => "Smiths Parish",
20
+ "Southampton" => "Southampton Parish",
21
+ "St. George's" => "St. George's Parish",
22
+ "Town of St. George" => "St. George",
23
+ "Warwick" => "Warwick Parish",
24
+ }.freeze
25
+
26
+ sig { params(address: Hash).void }
27
+ def apply(address)
28
+ if BM_PARISH_AND_CITY_NAMES.key?(address[:city][0])
29
+ address[:city] << BM_PARISH_AND_CITY_NAMES[address[:city][0]]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,40 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module AtlasEngine
5
+ module Bm
6
+ module AddressImporter
7
+ module OpenAddress
8
+ class Mapper < AtlasEngine::AddressImporter::OpenAddress::DefaultMapper
9
+ sig do
10
+ params(feature: AtlasEngine::AddressImporter::OpenAddress::Feature).returns(T::Hash[Symbol, T.untyped])
11
+ end
12
+ def map(feature)
13
+ city, street, number, unit, postcode = feature["properties"].values_at(
14
+ "district",
15
+ "street",
16
+ "number",
17
+ "unit",
18
+ "postcode",
19
+ )
20
+ result = {
21
+ source_id: openaddress_source_id(feature),
22
+ locale: @locale,
23
+ country_code: "BM",
24
+ province_code: nil,
25
+ # Omitted: region1..4
26
+ city: [city], # city names are already titleized
27
+ suburb: nil,
28
+ zip: normalize_zip(postcode),
29
+ street: street.titleize,
30
+ building_and_unit_ranges: housenumber_and_unit(number, unit),
31
+ latitude: geometry(feature)&.at(1),
32
+ longitude: geometry(feature)&.at(0),
33
+ }
34
+ result
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,12 @@
1
+ id: BM
2
+ ingestion:
3
+ correctors:
4
+ open_address:
5
+ - AtlasEngine::Bm::AddressImporter::Corrections::OpenAddress::CityAliasCorrector
6
+ open_address:
7
+ feature_mapper: AtlasEngine::Bm::AddressImporter::OpenAddress::Mapper
8
+ validation:
9
+ enabled: true
10
+ has_provinces: true
11
+ default_matching_strategy: es
12
+ address_parser: AtlasEngine::ValidationTranscriber::AddressParserNorthAmerica
@@ -0,0 +1,4 @@
1
+ id: BR
2
+ ingestion:
3
+ settings:
4
+ number_of_shards: "2"
@@ -0,0 +1,7 @@
1
+ id: CA
2
+ ingestion:
3
+ settings:
4
+ min_zip_edge_ngram: "1"
5
+ max_zip_edge_ngram: "7"
6
+ validation:
7
+ address_parser: AtlasEngine::ValidationTranscriber::AddressParserNorthAmerica