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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +164 -0
- data/CHANGELOG.md +274 -0
- data/README.md +55 -10
- data/data/PROVENANCE-vehicles.md +12 -0
- data/data/plates/PROVENANCE.md +5 -4
- data/data/plates/_decode/at-districts.yml +287 -0
- data/data/plates/_decode/ch-cantons.yml +110 -0
- data/data/plates/_decode/cn-issuing-offices.yml +463 -0
- data/data/plates/_decode/cn-provinces.yml +614 -0
- data/data/plates/_decode/cz-kraj.yml +159 -0
- data/data/plates/_decode/dk-serial-blocks.yml +327 -0
- data/data/plates/_decode/fr-departements.yml +191 -0
- data/data/plates/_decode/gb-age-identifiers.yml +170 -0
- data/data/plates/_decode/gb-memory-tags.yml +202 -0
- data/data/plates/_decode/gr-prefectures.yml +1408 -0
- data/data/plates/_decode/hr-cities.yml +315 -0
- data/data/plates/_decode/ie-counties.yml +227 -0
- data/data/plates/_decode/in-state-codes.yml +169 -0
- data/data/plates/_decode/is-districts-1938.yml +116 -0
- data/data/plates/_decode/it-provinces.yml +348 -0
- data/data/plates/_decode/jp-office-marks.yml +960 -0
- data/data/plates/_decode/jp-use-marks.yml +205 -0
- data/data/plates/_decode/kr-authority-marks.yml +146 -0
- data/data/plates/_decode/kr-use-syllables.yml +194 -0
- data/data/plates/_decode/lu-series-order.yml +638 -0
- data/data/plates/_decode/mx-entity-series.yml +380 -0
- data/data/plates/_decode/my-index-marks.yml +271 -0
- data/data/plates/_decode/no-counties-1913.yml +148 -0
- data/data/plates/_decode/no-districts.yml +901 -0
- data/data/plates/_decode/pl-powiats.yml +567 -0
- data/data/plates/_decode/pt-trailer-services.yml +96 -0
- data/data/plates/_decode/ro-counties.yml +213 -0
- data/data/plates/_decode/se-diplomatic.yml +220 -0
- data/data/plates/_decode/si-regions.yml +123 -0
- data/data/plates/_decode/sk-districts.yml +314 -0
- data/data/plates/_decode/th-registration-elements.yml +208 -0
- data/data/plates/_decode/ua-regions.yml +393 -0
- data/data/plates/_decode/za-licence-marks.yml +215 -0
- data/data/plates/_meta/classes.yml +1 -0
- data/data/plates/_meta/separators.yml +102 -0
- data/data/plates/ad.yml +961 -0
- data/data/plates/ar.yml +762 -0
- data/data/plates/at.yml +1424 -0
- data/data/plates/au-act.yml +472 -0
- data/data/plates/au-nsw.yml +282 -0
- data/data/plates/au-nt.yml +431 -0
- data/data/plates/au-qld.yml +272 -0
- data/data/plates/au-sa.yml +248 -0
- data/data/plates/au-tas.yml +302 -0
- data/data/plates/au-vic.yml +215 -0
- data/data/plates/au-wa.yml +309 -0
- data/data/plates/be.yml +1840 -0
- data/data/plates/br.yml +1152 -0
- data/data/plates/ca-ab.yml +430 -0
- data/data/plates/ca-bc.yml +697 -0
- data/data/plates/ca-mb.yml +499 -0
- data/data/plates/ca-nb.yml +537 -0
- data/data/plates/ca-nl.yml +743 -0
- data/data/plates/ca-ns.yml +808 -0
- data/data/plates/ca-nt.yml +610 -0
- data/data/plates/ca-nu.yml +280 -0
- data/data/plates/ca-on.yml +881 -0
- data/data/plates/ca-pe.yml +592 -0
- data/data/plates/ca-qc.yml +1036 -0
- data/data/plates/ca-sk.yml +256 -0
- data/data/plates/ca-yt.yml +656 -0
- data/data/plates/ch.yml +1273 -0
- data/data/plates/cn.yml +1431 -0
- data/data/plates/cy.yml +688 -0
- data/data/plates/cz.yml +1179 -0
- data/data/plates/de.yml +553 -118
- data/data/plates/dk.yml +1647 -0
- data/data/plates/ee.yml +1275 -0
- data/data/plates/es.yml +228 -32
- data/data/plates/fi.yml +1271 -0
- data/data/plates/fr.yml +1265 -0
- data/data/plates/gb.yml +1188 -0
- data/data/plates/gr.yml +721 -0
- data/data/plates/hr.yml +860 -0
- data/data/plates/hu.yml +959 -0
- data/data/plates/ie.yml +775 -0
- data/data/plates/in.yml +1172 -0
- data/data/plates/is.yml +667 -0
- data/data/plates/it.yml +1317 -0
- data/data/plates/jp.yml +3650 -0
- data/data/plates/kr.yml +1375 -0
- data/data/plates/li.yml +1010 -0
- data/data/plates/lt.yml +879 -0
- data/data/plates/lu.yml +842 -0
- data/data/plates/lv.yml +924 -0
- data/data/plates/mc.yml +1024 -0
- data/data/plates/mt.yml +854 -0
- data/data/plates/mx.yml +1372 -0
- data/data/plates/my.yml +685 -0
- data/data/plates/nl.yml +44 -0
- data/data/plates/no.yml +1018 -0
- data/data/plates/nz.yml +1699 -0
- data/data/plates/pl.yml +1296 -0
- data/data/plates/pt.yml +847 -0
- data/data/plates/ro.yml +785 -0
- data/data/plates/se.yml +1091 -0
- data/data/plates/si.yml +1105 -0
- data/data/plates/sk.yml +1439 -0
- data/data/plates/sm.yml +1119 -0
- data/data/plates/th.yml +1150 -0
- data/data/plates/ua.yml +1672 -0
- data/data/plates/us-ak.yml +763 -0
- data/data/plates/us-al.yml +457 -0
- data/data/plates/us-ar.yml +427 -0
- data/data/plates/us-as.yml +454 -0
- data/data/plates/us-az.yml +430 -0
- data/data/plates/us-ca.yml +892 -0
- data/data/plates/us-co.yml +452 -0
- data/data/plates/us-ct.yml +427 -0
- data/data/plates/us-dc.yml +614 -0
- data/data/plates/us-de.yml +551 -0
- data/data/plates/us-fl.yml +319 -96
- data/data/plates/us-ga.yml +644 -0
- data/data/plates/us-gu.yml +658 -0
- data/data/plates/us-hi.yml +585 -0
- data/data/plates/us-ia.yml +438 -0
- data/data/plates/us-id.yml +531 -0
- data/data/plates/us-il.yml +516 -0
- data/data/plates/us-in.yml +324 -0
- data/data/plates/us-ks.yml +351 -0
- data/data/plates/us-ky.yml +770 -0
- data/data/plates/us-la.yml +568 -0
- data/data/plates/us-ma.yml +379 -0
- data/data/plates/us-md.yml +536 -0
- data/data/plates/us-me.yml +445 -0
- data/data/plates/us-mi.yml +408 -0
- data/data/plates/us-mn.yml +411 -0
- data/data/plates/us-mo.yml +356 -0
- data/data/plates/us-mp.yml +402 -0
- data/data/plates/us-ms.yml +432 -0
- data/data/plates/us-mt.yml +619 -0
- data/data/plates/us-nc.yml +602 -0
- data/data/plates/us-nd.yml +419 -0
- data/data/plates/us-ne.yml +483 -0
- data/data/plates/us-nh.yml +394 -0
- data/data/plates/us-nj.yml +547 -0
- data/data/plates/us-nm.yml +574 -0
- data/data/plates/us-nv.yml +655 -0
- data/data/plates/us-ny.yml +592 -0
- data/data/plates/us-oh.yml +404 -0
- data/data/plates/us-ok.yml +513 -0
- data/data/plates/us-or.yml +392 -0
- data/data/plates/us-pa.yml +506 -0
- data/data/plates/us-pr.yml +507 -0
- data/data/plates/us-ri.yml +445 -0
- data/data/plates/us-sc.yml +605 -0
- data/data/plates/us-sd.yml +428 -0
- data/data/plates/us-tn.yml +471 -0
- data/data/plates/us-tx.yml +535 -0
- data/data/plates/us-ut.yml +384 -0
- data/data/plates/us-va.yml +567 -0
- data/data/plates/us-vi.yml +489 -0
- data/data/plates/us-vt.yml +458 -0
- data/data/plates/us-wa.yml +484 -0
- data/data/plates/us-wi.yml +509 -0
- data/data/plates/us-wv.yml +446 -0
- data/data/plates/us-wy.yml +523 -0
- data/data/plates/va.yml +604 -0
- data/data/plates/za.yml +1141 -0
- data/data/vehicles.json +160653 -105090
- data/lib/vehicles/configuration.rb +17 -3
- data/lib/vehicles/dataset.rb +73 -18
- data/lib/vehicles/fuzzy.rb +115 -0
- data/lib/vehicles/http.rb +48 -0
- data/lib/vehicles/make.rb +36 -6
- data/lib/vehicles/mcp_server.rb +5 -5
- data/lib/vehicles/model.rb +21 -2
- data/lib/vehicles/plates/series.rb +172 -18
- data/lib/vehicles/plates/template_fill.rb +188 -0
- data/lib/vehicles/plates/templates.rb +162 -0
- data/lib/vehicles/plates.rb +12 -0
- data/lib/vehicles/providers/hosted_provider.rb +28 -55
- data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
- data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
- data/lib/vehicles/version.rb +1 -1
- data/lib/vehicles.rb +32 -16
- data/rakelib/data_refresh.rake +109 -0
- data/rakelib/plates_refresh.rake +29 -0
- data/sig/vehicles.rbs +18 -0
- metadata +164 -2
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# plates/_meta/separators.yml — THE NORMATIVE SEPARATOR CHARACTER SET.
|
|
2
|
+
#
|
|
3
|
+
# PRD-PLATES §2.6 declares this contract in prose; this file is its
|
|
4
|
+
# machine-readable form, and `scripts/lint_plates.rb` enforces the dataset
|
|
5
|
+
# against THIS file (single source of truth — the lint hardcodes nothing).
|
|
6
|
+
#
|
|
7
|
+
# WHY IT EXISTS (issue #124, from the vehicles gem 0.6.0 implementation):
|
|
8
|
+
# a consumer with a separator-forgiving tier canonicalizes user input by
|
|
9
|
+
# deleting punctuation, and derives separator-free twins of our regexes to
|
|
10
|
+
# match against. That derivation is only sound if the dataset commits, once
|
|
11
|
+
# and normatively, to which characters are EVER separators and which are
|
|
12
|
+
# serial-significant. Without the commitment, deleting a character might
|
|
13
|
+
# destroy a serial. With it, deletion is information-preserving by
|
|
14
|
+
# construction, and every consumer forgives exactly the same punctuation.
|
|
15
|
+
#
|
|
16
|
+
# Grow this file by PR with a rationale — never ad hoc in data files.
|
|
17
|
+
schema_version: 1
|
|
18
|
+
|
|
19
|
+
# ---------------------------------------------------------------------------
|
|
20
|
+
# 1. The serial alphabet. Every character a SERIAL is made of, dataset-wide.
|
|
21
|
+
# Disjoint from `forgiving` below: that disjointness is the whole contract.
|
|
22
|
+
# ---------------------------------------------------------------------------
|
|
23
|
+
serial_alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
24
|
+
serial_alphabet_note: >-
|
|
25
|
+
Uppercase A-Z and 0-9 and nothing else. No plate serial in this dataset
|
|
26
|
+
contains punctuation, and none ever will: a jurisdiction that prints a
|
|
27
|
+
glyph inside the serial (rather than between groups) is a schema amendment,
|
|
28
|
+
not a data entry. Serials are RECORDED uppercase; consumers upcase input
|
|
29
|
+
before matching, since every regex in the dataset is written in uppercase.
|
|
30
|
+
case: upper
|
|
31
|
+
|
|
32
|
+
# ---------------------------------------------------------------------------
|
|
33
|
+
# 2. EMITTED — the only characters this dataset itself ever writes as a
|
|
34
|
+
# separator, in `format.pattern`, `format.regex`, `format.regex_strict`
|
|
35
|
+
# and `format.regex_statutory`. The lint rejects any other literal.
|
|
36
|
+
# ---------------------------------------------------------------------------
|
|
37
|
+
emitted:
|
|
38
|
+
- char: "-"
|
|
39
|
+
codepoint: "U+002D"
|
|
40
|
+
name: HYPHEN-MINUS
|
|
41
|
+
note: >-
|
|
42
|
+
The group separator as printed on NL (2-2-2 sidecodes), DE
|
|
43
|
+
(Unterscheidungszeichen - Erkennungsnummer) and ES state/diplomatic
|
|
44
|
+
plates. In NL it is a physical feature of the plate, not typography.
|
|
45
|
+
- char: " "
|
|
46
|
+
codepoint: "U+0020"
|
|
47
|
+
name: SPACE
|
|
48
|
+
note: >-
|
|
49
|
+
The printed GAP where the authority prescribes group spacing in
|
|
50
|
+
millimetres but no separator glyph: ES ordinary (Anexo XVIII Cuadro 1,
|
|
51
|
+
41 mm inter-group), DE between Erkennungsnummer groups, US-FL.
|
|
52
|
+
|
|
53
|
+
# ---------------------------------------------------------------------------
|
|
54
|
+
# 3. FORGIVING — the characters a lenient consumer MAY delete from user input
|
|
55
|
+
# (and from a regex, to derive its separator-free twin) before matching.
|
|
56
|
+
# A superset of `emitted`: humans, OCR and copy-paste substitute these
|
|
57
|
+
# freely. None of them is ever serial-significant (§1), so deleting them
|
|
58
|
+
# cannot destroy a serial — that is the guarantee this list exists to make.
|
|
59
|
+
# Deleting them from a regex means deleting the literal or the
|
|
60
|
+
# separator-only class AND its quantifier (`[- ]`, ` ?` -> nothing).
|
|
61
|
+
# ---------------------------------------------------------------------------
|
|
62
|
+
forgiving:
|
|
63
|
+
- { char: " ", codepoint: "U+0020", name: SPACE }
|
|
64
|
+
- { char: "\t", codepoint: "U+0009", name: "CHARACTER TABULATION" }
|
|
65
|
+
- { char: " ", codepoint: "U+00A0", name: "NO-BREAK SPACE" }
|
|
66
|
+
- { char: " ", codepoint: "U+2007", name: "FIGURE SPACE" }
|
|
67
|
+
- { char: " ", codepoint: "U+202F", name: "NARROW NO-BREAK SPACE" }
|
|
68
|
+
- { char: "-", codepoint: "U+002D", name: HYPHEN-MINUS }
|
|
69
|
+
- { char: "‐", codepoint: "U+2010", name: HYPHEN }
|
|
70
|
+
- { char: "‑", codepoint: "U+2011", name: "NON-BREAKING HYPHEN" }
|
|
71
|
+
- { char: "‒", codepoint: "U+2012", name: "FIGURE DASH" }
|
|
72
|
+
- { char: "–", codepoint: "U+2013", name: "EN DASH" }
|
|
73
|
+
- { char: "—", codepoint: "U+2014", name: "EM DASH" }
|
|
74
|
+
- { char: "―", codepoint: "U+2015", name: "HORIZONTAL BAR" }
|
|
75
|
+
- { char: "−", codepoint: "U+2212", name: "MINUS SIGN" }
|
|
76
|
+
- { char: "·", codepoint: "U+00B7", name: "MIDDLE DOT" }
|
|
77
|
+
- { char: "•", codepoint: "U+2022", name: BULLET }
|
|
78
|
+
- { char: ".", codepoint: "U+002E", name: "FULL STOP" }
|
|
79
|
+
- { char: "_", codepoint: "U+005F", name: "LOW LINE" }
|
|
80
|
+
- { char: "/", codepoint: "U+002F", name: SOLIDUS }
|
|
81
|
+
forgiving_note: >-
|
|
82
|
+
The vehicles gem 0.6.0 strips [\s\-–—·.] — a subset of this list. Widening
|
|
83
|
+
it to the full list is safe by construction (nothing here is ever
|
|
84
|
+
serial-significant) and covers the Unicode dashes an OCR or a word
|
|
85
|
+
processor produces. SOLIDUS and LOW LINE are here because keyboards and
|
|
86
|
+
URL slugs produce them, not because any plate prints them.
|
|
87
|
+
|
|
88
|
+
# ---------------------------------------------------------------------------
|
|
89
|
+
# 4. NOT separators — glyphs that look like punctuation but are NOT, so no
|
|
90
|
+
# consumer may strip them. Recorded so the list above stays honest as
|
|
91
|
+
# coverage grows past the L0 pilot.
|
|
92
|
+
# ---------------------------------------------------------------------------
|
|
93
|
+
never_separator_note: >-
|
|
94
|
+
Nothing in the L0 pilot (NL, ES, DE, US-FL). Known candidates for later
|
|
95
|
+
gates, each of which is a SYMBOL inside the plate's identity rather than a
|
|
96
|
+
gap between serial groups, and none of which may be deleted: the coats of
|
|
97
|
+
arms / seals that sit between groups on several German and Austrian plates
|
|
98
|
+
(a design element, carried in `design.emblem`, never in the serial); the
|
|
99
|
+
hyphen INSIDE the ES military "-VE" suffix, which is a literal part of a
|
|
100
|
+
sourced token rather than a group boundary — it is spelled as an emitted
|
|
101
|
+
hyphen today and a separator-stripping consumer collapses "ET-1234-VE" to
|
|
102
|
+
"ET1234VE", which is correct and still unambiguous.
|