vehicles 0.6.1 → 0.8.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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +274 -0
  4. data/README.md +55 -10
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +5 -4
  7. data/data/plates/_decode/at-districts.yml +287 -0
  8. data/data/plates/_decode/ch-cantons.yml +110 -0
  9. data/data/plates/_decode/cn-issuing-offices.yml +463 -0
  10. data/data/plates/_decode/cn-provinces.yml +614 -0
  11. data/data/plates/_decode/cz-kraj.yml +159 -0
  12. data/data/plates/_decode/dk-serial-blocks.yml +327 -0
  13. data/data/plates/_decode/fr-departements.yml +191 -0
  14. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  15. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  16. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  17. data/data/plates/_decode/hr-cities.yml +315 -0
  18. data/data/plates/_decode/ie-counties.yml +227 -0
  19. data/data/plates/_decode/in-state-codes.yml +169 -0
  20. data/data/plates/_decode/is-districts-1938.yml +116 -0
  21. data/data/plates/_decode/it-provinces.yml +348 -0
  22. data/data/plates/_decode/jp-office-marks.yml +960 -0
  23. data/data/plates/_decode/jp-use-marks.yml +205 -0
  24. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  25. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  26. data/data/plates/_decode/lu-series-order.yml +638 -0
  27. data/data/plates/_decode/mx-entity-series.yml +380 -0
  28. data/data/plates/_decode/my-index-marks.yml +271 -0
  29. data/data/plates/_decode/no-counties-1913.yml +148 -0
  30. data/data/plates/_decode/no-districts.yml +901 -0
  31. data/data/plates/_decode/pl-powiats.yml +567 -0
  32. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  33. data/data/plates/_decode/ro-counties.yml +213 -0
  34. data/data/plates/_decode/se-diplomatic.yml +220 -0
  35. data/data/plates/_decode/si-regions.yml +123 -0
  36. data/data/plates/_decode/sk-districts.yml +314 -0
  37. data/data/plates/_decode/th-registration-elements.yml +208 -0
  38. data/data/plates/_decode/ua-regions.yml +393 -0
  39. data/data/plates/_decode/za-licence-marks.yml +215 -0
  40. data/data/plates/_meta/classes.yml +1 -0
  41. data/data/plates/_meta/separators.yml +102 -0
  42. data/data/plates/ad.yml +961 -0
  43. data/data/plates/ar.yml +762 -0
  44. data/data/plates/at.yml +1424 -0
  45. data/data/plates/au-act.yml +472 -0
  46. data/data/plates/au-nsw.yml +282 -0
  47. data/data/plates/au-nt.yml +431 -0
  48. data/data/plates/au-qld.yml +272 -0
  49. data/data/plates/au-sa.yml +248 -0
  50. data/data/plates/au-tas.yml +302 -0
  51. data/data/plates/au-vic.yml +215 -0
  52. data/data/plates/au-wa.yml +309 -0
  53. data/data/plates/be.yml +1840 -0
  54. data/data/plates/br.yml +1152 -0
  55. data/data/plates/ca-ab.yml +430 -0
  56. data/data/plates/ca-bc.yml +697 -0
  57. data/data/plates/ca-mb.yml +499 -0
  58. data/data/plates/ca-nb.yml +537 -0
  59. data/data/plates/ca-nl.yml +743 -0
  60. data/data/plates/ca-ns.yml +808 -0
  61. data/data/plates/ca-nt.yml +610 -0
  62. data/data/plates/ca-nu.yml +280 -0
  63. data/data/plates/ca-on.yml +881 -0
  64. data/data/plates/ca-pe.yml +592 -0
  65. data/data/plates/ca-qc.yml +1036 -0
  66. data/data/plates/ca-sk.yml +256 -0
  67. data/data/plates/ca-yt.yml +656 -0
  68. data/data/plates/ch.yml +1273 -0
  69. data/data/plates/cn.yml +1431 -0
  70. data/data/plates/cy.yml +688 -0
  71. data/data/plates/cz.yml +1179 -0
  72. data/data/plates/de.yml +553 -118
  73. data/data/plates/dk.yml +1647 -0
  74. data/data/plates/ee.yml +1275 -0
  75. data/data/plates/es.yml +228 -32
  76. data/data/plates/fi.yml +1271 -0
  77. data/data/plates/fr.yml +1265 -0
  78. data/data/plates/gb.yml +1188 -0
  79. data/data/plates/gr.yml +721 -0
  80. data/data/plates/hr.yml +860 -0
  81. data/data/plates/hu.yml +959 -0
  82. data/data/plates/ie.yml +775 -0
  83. data/data/plates/in.yml +1172 -0
  84. data/data/plates/is.yml +667 -0
  85. data/data/plates/it.yml +1317 -0
  86. data/data/plates/jp.yml +3650 -0
  87. data/data/plates/kr.yml +1375 -0
  88. data/data/plates/li.yml +1010 -0
  89. data/data/plates/lt.yml +879 -0
  90. data/data/plates/lu.yml +842 -0
  91. data/data/plates/lv.yml +924 -0
  92. data/data/plates/mc.yml +1024 -0
  93. data/data/plates/mt.yml +854 -0
  94. data/data/plates/mx.yml +1372 -0
  95. data/data/plates/my.yml +685 -0
  96. data/data/plates/nl.yml +44 -0
  97. data/data/plates/no.yml +1018 -0
  98. data/data/plates/nz.yml +1699 -0
  99. data/data/plates/pl.yml +1296 -0
  100. data/data/plates/pt.yml +847 -0
  101. data/data/plates/ro.yml +785 -0
  102. data/data/plates/se.yml +1091 -0
  103. data/data/plates/si.yml +1105 -0
  104. data/data/plates/sk.yml +1439 -0
  105. data/data/plates/sm.yml +1119 -0
  106. data/data/plates/th.yml +1150 -0
  107. data/data/plates/ua.yml +1672 -0
  108. data/data/plates/us-ak.yml +763 -0
  109. data/data/plates/us-al.yml +457 -0
  110. data/data/plates/us-ar.yml +427 -0
  111. data/data/plates/us-as.yml +454 -0
  112. data/data/plates/us-az.yml +430 -0
  113. data/data/plates/us-ca.yml +892 -0
  114. data/data/plates/us-co.yml +452 -0
  115. data/data/plates/us-ct.yml +427 -0
  116. data/data/plates/us-dc.yml +614 -0
  117. data/data/plates/us-de.yml +551 -0
  118. data/data/plates/us-fl.yml +319 -96
  119. data/data/plates/us-ga.yml +644 -0
  120. data/data/plates/us-gu.yml +658 -0
  121. data/data/plates/us-hi.yml +585 -0
  122. data/data/plates/us-ia.yml +438 -0
  123. data/data/plates/us-id.yml +531 -0
  124. data/data/plates/us-il.yml +516 -0
  125. data/data/plates/us-in.yml +324 -0
  126. data/data/plates/us-ks.yml +351 -0
  127. data/data/plates/us-ky.yml +770 -0
  128. data/data/plates/us-la.yml +568 -0
  129. data/data/plates/us-ma.yml +379 -0
  130. data/data/plates/us-md.yml +536 -0
  131. data/data/plates/us-me.yml +445 -0
  132. data/data/plates/us-mi.yml +408 -0
  133. data/data/plates/us-mn.yml +411 -0
  134. data/data/plates/us-mo.yml +356 -0
  135. data/data/plates/us-mp.yml +402 -0
  136. data/data/plates/us-ms.yml +432 -0
  137. data/data/plates/us-mt.yml +619 -0
  138. data/data/plates/us-nc.yml +602 -0
  139. data/data/plates/us-nd.yml +419 -0
  140. data/data/plates/us-ne.yml +483 -0
  141. data/data/plates/us-nh.yml +394 -0
  142. data/data/plates/us-nj.yml +547 -0
  143. data/data/plates/us-nm.yml +574 -0
  144. data/data/plates/us-nv.yml +655 -0
  145. data/data/plates/us-ny.yml +592 -0
  146. data/data/plates/us-oh.yml +404 -0
  147. data/data/plates/us-ok.yml +513 -0
  148. data/data/plates/us-or.yml +392 -0
  149. data/data/plates/us-pa.yml +506 -0
  150. data/data/plates/us-pr.yml +507 -0
  151. data/data/plates/us-ri.yml +445 -0
  152. data/data/plates/us-sc.yml +605 -0
  153. data/data/plates/us-sd.yml +428 -0
  154. data/data/plates/us-tn.yml +471 -0
  155. data/data/plates/us-tx.yml +535 -0
  156. data/data/plates/us-ut.yml +384 -0
  157. data/data/plates/us-va.yml +567 -0
  158. data/data/plates/us-vi.yml +489 -0
  159. data/data/plates/us-vt.yml +458 -0
  160. data/data/plates/us-wa.yml +484 -0
  161. data/data/plates/us-wi.yml +509 -0
  162. data/data/plates/us-wv.yml +446 -0
  163. data/data/plates/us-wy.yml +523 -0
  164. data/data/plates/va.yml +604 -0
  165. data/data/plates/za.yml +1141 -0
  166. data/data/vehicles.json +160653 -105090
  167. data/lib/vehicles/configuration.rb +17 -3
  168. data/lib/vehicles/dataset.rb +73 -18
  169. data/lib/vehicles/fuzzy.rb +115 -0
  170. data/lib/vehicles/http.rb +48 -0
  171. data/lib/vehicles/make.rb +36 -6
  172. data/lib/vehicles/mcp_server.rb +5 -5
  173. data/lib/vehicles/model.rb +21 -2
  174. data/lib/vehicles/plates/series.rb +172 -18
  175. data/lib/vehicles/plates/template_fill.rb +188 -0
  176. data/lib/vehicles/plates/templates.rb +162 -0
  177. data/lib/vehicles/plates.rb +12 -0
  178. data/lib/vehicles/providers/hosted_provider.rb +28 -55
  179. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  180. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  181. data/lib/vehicles/version.rb +1 -1
  182. data/lib/vehicles.rb +32 -16
  183. data/rakelib/data_refresh.rake +109 -0
  184. data/rakelib/plates_refresh.rake +29 -0
  185. data/sig/vehicles.rbs +18 -0
  186. metadata +164 -2
data/data/plates/nl.yml CHANGED
@@ -67,6 +67,7 @@ series:
67
67
  class: standard
68
68
  categories: [car]
69
69
  period: { start: 2000 } # 20-01-2000; open — series run until exhausted
70
+ matching: strict
70
71
  format:
71
72
  pattern: "99-LL-LL"
72
73
  regex: '\A\d{2}-[A-Z]{2}-[A-Z]{2}\z'
@@ -118,6 +119,7 @@ series:
118
119
  class: standard
119
120
  categories: [car]
120
121
  period: { start: 2008 } # 19-05-2008
122
+ matching: strict
121
123
  format:
122
124
  pattern: "99-LLL-9"
123
125
  regex: '\A\d{2}-[A-Z]{3}-\d\z'
@@ -141,6 +143,7 @@ series:
141
143
  class: standard
142
144
  categories: [car]
143
145
  period: { start: 2013 } # 05-03-2013
146
+ matching: strict
144
147
  format:
145
148
  pattern: "9-LLL-99"
146
149
  regex: '\A\d-[A-Z]{3}-\d{2}\z'
@@ -163,6 +166,7 @@ series:
163
166
  class: standard
164
167
  categories: [car]
165
168
  period: { start: 2015 } # 30-03-2015
169
+ matching: strict
166
170
  format:
167
171
  pattern: "LL-999-L"
168
172
  regex: '\A[A-Z]{2}-\d{3}-[A-Z]\z'
@@ -184,6 +188,7 @@ series:
184
188
  class: standard
185
189
  categories: [car]
186
190
  period: { start: 2019 } # 19-08-2019
191
+ matching: strict
187
192
  format:
188
193
  pattern: "L-999-LL"
189
194
  regex: '\A[A-Z]-\d{3}-[A-Z]{2}\z'
@@ -208,6 +213,7 @@ series:
208
213
  # commercials reached sidecode 11 on 13-06-2019
209
214
  # (see nl-sidecode11-lightcommercial).
210
215
  period: { start: 2024 } # 04-06-2024
216
+ matching: strict
211
217
  format:
212
218
  pattern: "LLL-99-L"
213
219
  regex: '\A[A-Z]{3}-\d{2}-[A-Z]\z'
@@ -243,6 +249,7 @@ series:
243
249
  class: standard
244
250
  categories: [van]
245
251
  period: { start: 2009 } # 26-02-2009
252
+ matching: strict
246
253
  format:
247
254
  pattern: "9-VLL-99"
248
255
  regex: '\A\d-V[A-Z]{2}-\d{2}\z'
@@ -266,6 +273,7 @@ series:
266
273
  class: standard
267
274
  categories: [van]
268
275
  period: { start: 2012 } # 12-12-2012
276
+ matching: strict
269
277
  format:
270
278
  pattern: "VL-999-L"
271
279
  regex: '\AV[A-Z]-\d{3}-[A-Z]\z'
@@ -285,6 +293,7 @@ series:
285
293
  class: standard
286
294
  categories: [van]
287
295
  period: { start: 2016 } # 14-10-2016
296
+ matching: strict
288
297
  format:
289
298
  pattern: "V-999-LL"
290
299
  regex: '\AV-\d{3}-[A-Z]{2}\z'
@@ -304,6 +313,7 @@ series:
304
313
  class: standard
305
314
  categories: [van]
306
315
  period: { start: 2019 } # 13-06-2019
316
+ matching: strict
307
317
  format:
308
318
  pattern: "VLL-99-L"
309
319
  regex: '\AV[A-Z]{2}-\d{2}-[A-Z]\z'
@@ -327,6 +337,7 @@ series:
327
337
  class: standard
328
338
  categories: [van]
329
339
  period: { start: 2024 } # 08-01-2024
340
+ matching: strict
330
341
  format:
331
342
  pattern: "V-99-LLL"
332
343
  regex: '\AV-\d{2}-[A-Z]{3}\z'
@@ -354,6 +365,7 @@ series:
354
365
  period: { start: 1994 } # 03-01-1994 — the oldest date RDW publishes
355
366
  # for a still-listed series other than the
356
367
  # 1951 GV block.
368
+ matching: strict
357
369
  format:
358
370
  pattern: "BL-LL-99"
359
371
  regex: '\AB[A-Z]-[A-Z]{2}-\d{2}\z'
@@ -381,6 +393,7 @@ series:
381
393
  class: standard
382
394
  categories: [truck, bus]
383
395
  period: { start: 2012 } # 20-07-2012
396
+ matching: strict
384
397
  format:
385
398
  pattern: "99-BLL-9"
386
399
  regex: '\A\d{2}-B[A-Z]{2}-\d\z'
@@ -405,6 +418,7 @@ series:
405
418
  class: motorcycle
406
419
  categories: [motorcycle]
407
420
  period: { start: 2011 } # 19-08-2011
421
+ matching: strict
408
422
  format:
409
423
  pattern: "99-ML-LL"
410
424
  regex: '\A\d{2}-M[A-Z]-[A-Z]{2}\z'
@@ -438,6 +452,7 @@ series:
438
452
  class: moped
439
453
  categories: [moped]
440
454
  period: { start: 2005 } # 01-09-2005
455
+ matching: strict
441
456
  format:
442
457
  pattern: "99-LLL-9"
443
458
  regex: '\A\d{2}-[A-Z]{3}-\d\z'
@@ -475,6 +490,7 @@ series:
475
490
  class: moped
476
491
  categories: [moped]
477
492
  period: { start: 2006 } # 11-08-2006
493
+ matching: strict
478
494
  format:
479
495
  pattern: "LL-999-L"
480
496
  regex: '\A[A-Z]{2}-\d{3}-[A-Z]\z'
@@ -496,6 +512,7 @@ series:
496
512
  class: moped
497
513
  categories: [moped]
498
514
  period: { start: 2008 } # 11-12-2008
515
+ matching: strict
499
516
  format:
500
517
  pattern: "L-999-LL"
501
518
  regex: '\A[A-Z]-\d{3}-[A-Z]{2}\z'
@@ -515,6 +532,7 @@ series:
515
532
  class: moped
516
533
  categories: [moped]
517
534
  period: { start: 2015 } # 16-01-2015 (seed said 2015 — confirmed)
535
+ matching: strict
518
536
  format:
519
537
  pattern: "LLL-99-L"
520
538
  regex: '\A[A-Z]{3}-\d{2}-[A-Z]\z'
@@ -540,6 +558,7 @@ series:
540
558
  class: moped
541
559
  categories: [moped]
542
560
  period: { start: 2025 } # 01-07-2025
561
+ matching: strict
543
562
  format:
544
563
  pattern: "E-99-LLL"
545
564
  regex: '\AE-\d{2}-[A-Z]{3}\z'
@@ -572,6 +591,7 @@ series:
572
591
  class: trailer
573
592
  categories: [trailer]
574
593
  period: { start: 1988 } # 01-10-1988
594
+ matching: strict
575
595
  format:
576
596
  pattern: "WL-99-LL"
577
597
  regex: '\AW[A-Z]-\d{2}-[A-Z]{2}\z'
@@ -599,6 +619,7 @@ series:
599
619
  class: trailer
600
620
  categories: [semitrailer]
601
621
  period: { start: 1988 } # 01-10-1988
622
+ matching: strict
602
623
  format:
603
624
  pattern: "OL-99-LL"
604
625
  regex: '\AO[A-Z]-\d{2}-[A-Z]{2}\z'
@@ -634,6 +655,7 @@ series:
634
655
  class: agricultural
635
656
  categories: [tractor, machine]
636
657
  period: { start: 2021 } # 01-12-2021
658
+ matching: strict
637
659
  format:
638
660
  pattern: "T-99-LLL"
639
661
  regex: '\AT-\d{2}-[A-Z]{3}\z'
@@ -664,6 +686,7 @@ series:
664
686
  # agricultural TRAILER / interchangeable towed
665
687
  # equipment series (RDW's own table heading).
666
688
  period: { start: 2021 } # 01-01-2021 (seed said 2021 — confirmed)
689
+ matching: strict
667
690
  format:
668
691
  pattern: "LLL-99-L"
669
692
  regex: '\A[A-Z]{3}-\d{2}-[A-Z]\z'
@@ -706,6 +729,7 @@ series:
706
729
  class: agricultural
707
730
  categories: [tractor, machine]
708
731
  period: { start: 1951 }
732
+ matching: strict
709
733
  format:
710
734
  pattern: "GV-99-99"
711
735
  regex: '\AGV-\d{2}-\d{2}\z'
@@ -731,6 +755,7 @@ series:
731
755
  class: agricultural
732
756
  categories: [tractor, machine]
733
757
  period: { start: 1951 }
758
+ matching: strict
734
759
  format:
735
760
  pattern: "99-99-GV"
736
761
  regex: '\A\d{2}-\d{2}-GV\z'
@@ -753,6 +778,7 @@ series:
753
778
  class: agricultural
754
779
  categories: [tractor, machine]
755
780
  period: { start: 1951 }
781
+ matching: strict
756
782
  format:
757
783
  pattern: "99-GV-99"
758
784
  regex: '\A\d{2}-GV-\d{2}\z'
@@ -774,6 +800,7 @@ series:
774
800
  class: agricultural
775
801
  categories: [tractor, machine]
776
802
  period: { start: 2016 } # 23-05-2016
803
+ matching: strict
777
804
  format:
778
805
  pattern: "9-GV-999"
779
806
  regex: '\A\d-GV-\d{3}\z'
@@ -796,6 +823,7 @@ series:
796
823
  class: agricultural
797
824
  categories: [tractor, machine]
798
825
  period: { start: 2019 } # 13-06-2019
826
+ matching: strict
799
827
  format:
800
828
  pattern: "999-GV-9"
801
829
  regex: '\A\d{3}-GV-\d\z'
@@ -825,6 +853,7 @@ series:
825
853
  categories: [car, van, motorcycle]
826
854
  period: { start: 1978 }
827
855
  period_evidence: eligibility-cutoff # NOT an issuance-start claim; see notes
856
+ matching: strict
828
857
  format:
829
858
  pattern: "LL-99-99"
830
859
  regex: '\A[A-Z]{2}-\d{2}-\d{2}\z'
@@ -862,6 +891,7 @@ series:
862
891
  categories: [car, van, motorcycle]
863
892
  period: { start: 1978 }
864
893
  period_evidence: eligibility-cutoff
894
+ matching: strict
865
895
  format:
866
896
  pattern: "99-99-LL"
867
897
  regex: '\A\d{2}-\d{2}-[A-Z]{2}\z'
@@ -884,6 +914,7 @@ series:
884
914
  categories: [car, van, motorcycle]
885
915
  period: { start: 1978 }
886
916
  period_evidence: eligibility-cutoff
917
+ matching: strict
887
918
  format:
888
919
  pattern: "99-LL-99"
889
920
  regex: '\A\d{2}-[A-Z]{2}-\d{2}\z'
@@ -907,6 +938,12 @@ series:
907
938
  categories: [tractor, machine, trailer]
908
939
  period: { start: 1978 }
909
940
  period_evidence: eligibility-cutoff
941
+ # RECALL-ONLY (PRD-PLATES §2.7): RDW exempts these vehicles from the
942
+ # 2+2+2 registration-shape rule, so the regex is the same fourteen-shape
943
+ # union as nl-export. A match is a SHAPE hit — it says the string has a
944
+ # shape the Netherlands has issued, not that it is a valid historic
945
+ # agricultural registration.
946
+ matching: recall-only
910
947
  format:
911
948
  pattern: "LLL-99-L"
912
949
  regex: '\A(?:[A-Z]{2}-\d{2}-\d{2}|\d{2}-\d{2}-[A-Z]{2}|\d{2}-[A-Z]{2}-\d{2}|[A-Z]{2}-\d{2}-[A-Z]{2}|[A-Z]{2}-[A-Z]{2}-\d{2}|\d{2}-[A-Z]{2}-[A-Z]{2}|\d{2}-[A-Z]{3}-\d|\d-[A-Z]{3}-\d{2}|[A-Z]{2}-\d{3}-[A-Z]|[A-Z]-\d{3}-[A-Z]{2}|[A-Z]{3}-\d{2}-[A-Z]|[A-Z]-\d{2}-[A-Z]{3}|\d-[A-Z]{2}-\d{3}|\d{3}-[A-Z]{2}-\d)\z'
@@ -942,6 +979,13 @@ series:
942
979
  categories: [car, van, truck, bus, motorcycle, moped, trailer, semitrailer, tractor, machine]
943
980
  period: { start: 1951 }
944
981
  period_evidence: earliest-underlying-series # the regime's own start is unsourced
982
+ # RECALL-ONLY (PRD-PLATES §2.7): the export plate carries the vehicle's
983
+ # OWN existing registration, so the regex is the union of all fourteen
984
+ # RDW sidecode shapes. A match is a SHAPE hit, never the claim that the
985
+ # string is a valid export registration — the union admits vowel serials
986
+ # the standard series reject. This is the field the vehicles gem's
987
+ # Match#strict? needs and could not previously read (issue #124).
988
+ matching: recall-only
945
989
  format:
946
990
  pattern: "LLL-99-L"
947
991
  regex: '\A(?:[A-Z]{2}-\d{2}-\d{2}|\d{2}-\d{2}-[A-Z]{2}|\d{2}-[A-Z]{2}-\d{2}|[A-Z]{2}-\d{2}-[A-Z]{2}|[A-Z]{2}-[A-Z]{2}-\d{2}|\d{2}-[A-Z]{2}-[A-Z]{2}|\d{2}-[A-Z]{3}-\d|\d-[A-Z]{3}-\d{2}|[A-Z]{2}-\d{3}-[A-Z]|[A-Z]-\d{3}-[A-Z]{2}|[A-Z]{3}-\d{2}-[A-Z]|[A-Z]-\d{2}-[A-Z]{3}|\d-[A-Z]{2}-\d{3}|\d{3}-[A-Z]{2}-\d)\z'