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,58 @@
1
+ id: es
2
+ pipeline:
3
+ - field: country
4
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Country::Exists
5
+ - field: country
6
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Country::ValidForZip
7
+ - field: province
8
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Province::Exists
9
+ - field: province
10
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Province::ValidForCountry
11
+ - field: zip
12
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Zip::Present
13
+ - field: zip
14
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
15
+ - field: zip
16
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
17
+ - field: city
18
+ class: AtlasEngine::AddressValidation::Validators::Predicates::City::Present
19
+ - field: city
20
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
21
+ - field: city
22
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
23
+ - field: city
24
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
25
+ - field: city
26
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
27
+ - field: city
28
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
29
+ - field: address1
30
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::Present
31
+ - field: address1
32
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
33
+ - field: address1
34
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
35
+ - field: address2
36
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
37
+ - field: address2
38
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
39
+ - field: address1
40
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
41
+ - field: address2
42
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
43
+ - field: address1
44
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
45
+ - field: address2
46
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
47
+ - field: address1
48
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
49
+ - field: address2
50
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
51
+ - field: address1
52
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::BuildingNumberInAddress1OrAddress2
53
+ - field: address1
54
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::BuildingNumberInAddress1
55
+ - field: phone
56
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Phone::Valid
57
+
58
+ full_address_validator: AtlasEngine::AddressValidation::Es::Validators::FullAddress
@@ -0,0 +1,58 @@
1
+ id: es_street
2
+ pipeline:
3
+ - field: country
4
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Country::Exists
5
+ - field: country
6
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Country::ValidForZip
7
+ - field: province
8
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Province::Exists
9
+ - field: province
10
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Province::ValidForCountry
11
+ - field: zip
12
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Zip::Present
13
+ - field: zip
14
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
15
+ - field: zip
16
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
17
+ - field: city
18
+ class: AtlasEngine::AddressValidation::Validators::Predicates::City::Present
19
+ - field: city
20
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
21
+ - field: city
22
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
23
+ - field: city
24
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
25
+ - field: city
26
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
27
+ - field: city
28
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
29
+ - field: address1
30
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::Present
31
+ - field: address1
32
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
33
+ - field: address1
34
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
35
+ - field: address2
36
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
37
+ - field: address2
38
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
39
+ - field: address1
40
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
41
+ - field: address2
42
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
43
+ - field: address1
44
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
45
+ - field: address2
46
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
47
+ - field: address1
48
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
49
+ - field: address2
50
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
51
+ - field: address1
52
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::BuildingNumberInAddress1OrAddress2
53
+ - field: address1
54
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::BuildingNumberInAddress1
55
+ - field: phone
56
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Phone::Valid
57
+
58
+ full_address_validator: AtlasEngine::AddressValidation::Es::Validators::FullAddressStreet
@@ -0,0 +1,60 @@
1
+ id: local
2
+ pipeline:
3
+ - field: country
4
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Country::Exists
5
+ - field: country
6
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Country::ValidForZip
7
+ - field: province
8
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Province::Exists
9
+ - field: province
10
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Province::ValidForCountry
11
+ - field: zip
12
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Zip::Present
13
+ - field: zip
14
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
15
+ - field: zip
16
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
17
+ - field: zip
18
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Zip::ValidForProvince
19
+ - field: zip
20
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Zip::ValidForCountry
21
+ - field: city
22
+ class: AtlasEngine::AddressValidation::Validators::Predicates::City::Present
23
+ - field: city
24
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
25
+ - field: city
26
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
27
+ - field: city
28
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
29
+ - field: city
30
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
31
+ - field: city
32
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
33
+ - field: address1
34
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::Present
35
+ - field: address1
36
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
37
+ - field: address1
38
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
39
+ - field: address2
40
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxLength
41
+ - field: address2
42
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NotExceedMaxTokenCount
43
+ - field: address1
44
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
45
+ - field: address2
46
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoHtmlTags
47
+ - field: address1
48
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
49
+ - field: address2
50
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoUrl
51
+ - field: address1
52
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
53
+ - field: address2
54
+ class: AtlasEngine::AddressValidation::Validators::Predicates::NoEmojis
55
+ - field: address1
56
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::BuildingNumberInAddress1OrAddress2
57
+ - field: address1
58
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Street::BuildingNumberInAddress1
59
+ - field: phone
60
+ class: AtlasEngine::AddressValidation::Validators::Predicates::Phone::Valid
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateAtlasEnginePostAddresses < ActiveRecord::Migration[7.0]
4
+ def change
5
+ create_table(:atlas_engine_post_addresses, if_not_exists: true) do |t|
6
+ t.string(:source_id)
7
+ t.string(:locale)
8
+ t.string(:country_code, index: true)
9
+ t.string(:province_code, index: true)
10
+ t.string(:region1)
11
+ t.string(:region2)
12
+ t.string(:region3)
13
+ t.string(:region4)
14
+ t.string(:city, index: true)
15
+ t.string(:suburb)
16
+ t.string(:zip, index: true)
17
+ t.string(:street, index: true)
18
+ t.string(:building_name)
19
+ t.float(:latitude)
20
+ t.float(:longitude)
21
+
22
+ t.timestamps
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddBuildingAndUnitRangesColumn < ActiveRecord::Migration[7.0]
4
+ def change
5
+ add_column(:atlas_engine_post_addresses, :building_and_unit_ranges, :json)
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateAtlasEngineCountryImports < ActiveRecord::Migration[7.0]
4
+ def change
5
+ create_table(:atlas_engine_country_imports, if_not_exists: true) do |t|
6
+ t.string(:country_code, null: false)
7
+ t.string(:state, default: "pending")
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateAtlasEngineEventsTable < ActiveRecord::Migration[7.0]
4
+ def change
5
+ create_table(:atlas_engine_events, if_not_exists: true) do |t|
6
+ t.bigint(:country_import_id, null: false, index: true)
7
+ t.text(:message)
8
+ t.json(:additional_params)
9
+ t.integer(:category, default: 0)
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddUniqueIndexToAtlasEnginePostAddresses < ActiveRecord::Migration[7.0]
4
+ def change
5
+ add_index(
6
+ :atlas_engine_post_addresses,
7
+ [:province_code, :zip, :street, :city, :locale],
8
+ name: "index_atlas_engine_post_addresses_on_pc_zp_st_ct_lc",
9
+ unique: true,
10
+ length: { province_code: 10, zip: 10, street: 100, city: 255, locale: 10 },
11
+ if_not_exists: true,
12
+ )
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddIndexToPostAddressesOnSourceIdLocaleCountryCode < ActiveRecord::Migration[7.0]
4
+ def change
5
+ add_index(
6
+ :atlas_engine_post_addresses,
7
+ [:source_id, :locale, :country_code],
8
+ name: "index_atlas_engine_post_addresses_on_srcid_loc_cc",
9
+ if_not_exists: true,
10
+ )
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require "rails/all"
5
+
6
+ module AtlasEngine
7
+ class Engine < ::Rails::Engine
8
+ isolate_namespace AtlasEngine
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ module AtlasEngine
5
+ VERSION = "0.1.0"
6
+ end
@@ -0,0 +1,66 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ require "atlas_engine/version"
5
+ require "atlas_engine/engine"
6
+ require "graphql"
7
+ require "graphiql/rails"
8
+ require "elastic-transport"
9
+ require "elasticsearch/model"
10
+ require "elasticsearch/rails"
11
+ require "worldwide"
12
+ require "state_machines-activerecord"
13
+ require "zip"
14
+ require "frozen_record"
15
+ require "annex_29"
16
+ require "maintenance_tasks"
17
+ require "htmlentities"
18
+ require "sorbet-runtime"
19
+ require "statsd-instrument"
20
+
21
+ module AtlasEngine
22
+ # @!attribute elasticsearch_repository
23
+ # @scope class
24
+ #
25
+ # The elasticsearch repository implementation that the es datastore will use.
26
+ #
27
+ # @return [String] the class name of the elasticsearch repository implementation.
28
+ mattr_accessor :elasticsearch_repository, default: "AtlasEngine::Elasticsearch::Repository"
29
+
30
+ # @!attribute log_base
31
+ #
32
+ # The parent module for logging. Must be a module that implements the
33
+ # `log_message` method.
34
+ #
35
+ # @return [String] the name of the parent module for loggers.
36
+ mattr_accessor :log_base, default: "AtlasEngine::LogBase"
37
+
38
+ # @!attribute validation_eligibility
39
+ #
40
+ # The module for validation eligibility. Must be a module that implements the
41
+ # `validation_enabled(address)` method which returns a boolean that indicates if the provided
42
+ # address is eligible for validation.
43
+ #
44
+ # @return [String] the name of the module for validation elibility.
45
+ mattr_accessor :validation_eligibility, default: "AtlasEngine::Services::ValidationEligibility"
46
+
47
+ # @!attribute address_importer_additional_field_validations
48
+ # The Host application can add additional validations to the address importer
49
+ # by setting this attribute to a hash of the following format:
50
+ # {
51
+ # field_name: [Array of additional validation classes]
52
+ # }
53
+ #
54
+ # example:
55
+ # AtlasEngine.address_importer_additional_field_validations = {
56
+ # city: [MyCustomCityValidator],
57
+ # province_code: [MyCustomProvinceValidator],
58
+ # zip: [MyCustomZipValidator],
59
+ # }
60
+ mattr_accessor :address_importer_additional_field_validations, default: {}
61
+
62
+ # @!attribute import_events_notifier
63
+ # The Host application can define its own notifier for import events by configuring
64
+ # AtlasEngine.address_importer_notifier = MyCustomNotifier
65
+ mattr_accessor :address_importer_notifier, default: "AtlasEngine::AddressImporter::ImportEventsNotifier::Notifier"
66
+ end
@@ -0,0 +1,20 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ namespace :atlas_engine do
5
+ namespace :address_importer do
6
+ desc "Import addresses from a CSV file."
7
+ task run: :environment do
8
+ file_path = ENV["file_path"]
9
+ if file_path.nil?
10
+ raise ArgumentError, "file_path variable is required for csv import"
11
+ end
12
+
13
+ puts "\nRunning the Address Importer."
14
+
15
+ AtlasEngine::PostAddressImporter.new(file_path).import
16
+
17
+ puts "\nAddress Importer task complete."
18
+ end
19
+ end
20
+ end