pubid 2.0.0.pre.alpha.8 → 2.0.0.pre.alpha.11
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/README.adoc +33 -11
- data/conformance/pending.yaml +4 -0
- data/data/bipm/update_codes.yaml +9 -0
- data/data/iec/update_codes.yaml +3 -0
- data/data/ieee/update_codes.yaml +107 -1
- data/{archived-gems/pubid-nist → data/nist}/series.yaml +34 -0
- data/data/nist/update_codes.yaml +8 -0
- data/lib/pubid/adobe/builder.rb +52 -0
- data/lib/pubid/adobe/identifier.rb +47 -0
- data/lib/pubid/adobe/identifiers/publication.rb +31 -0
- data/lib/pubid/adobe/identifiers/tech_note.rb +32 -0
- data/lib/pubid/adobe/identifiers.rb +10 -0
- data/lib/pubid/adobe/parser.rb +136 -0
- data/lib/pubid/adobe/renderer.rb +39 -0
- data/lib/pubid/adobe/urn_generator.rb +42 -0
- data/lib/pubid/adobe/urn_parser.rb +69 -0
- data/lib/pubid/adobe.rb +61 -0
- data/lib/pubid/amca/builder.rb +4 -4
- data/lib/pubid/amca/identifier.rb +1 -3
- data/lib/pubid/amca/identifiers/base.rb +50 -33
- data/lib/pubid/amca/identifiers/interpretation.rb +18 -10
- data/lib/pubid/amca/identifiers/publication.rb +14 -10
- data/lib/pubid/amca/identifiers/standard.rb +3 -1
- data/lib/pubid/amca/identifiers.rb +0 -1
- data/lib/pubid/amca/parser.rb +1 -1
- data/lib/pubid/amca/renderer.rb +4 -4
- data/lib/pubid/amca/single_identifier.rb +1 -1
- data/lib/pubid/amca/urn_generator.rb +2 -2
- data/lib/pubid/amca.rb +5 -4
- data/lib/pubid/ansi/builder.rb +2 -2
- data/lib/pubid/ansi/identifier.rb +18 -0
- data/lib/pubid/ansi/parser.rb +1 -1
- data/lib/pubid/ansi/renderer.rb +2 -2
- data/lib/pubid/ansi.rb +5 -5
- data/lib/pubid/api/builder.rb +16 -2
- data/lib/pubid/api/identifier.rb +25 -4
- data/lib/pubid/api/identifiers/mpms.rb +10 -8
- data/lib/pubid/api/parser.rb +1 -1
- data/lib/pubid/api/renderer.rb +16 -7
- data/lib/pubid/api/single_identifier.rb +5 -12
- data/lib/pubid/api.rb +1 -0
- data/lib/pubid/ashrae/builder.rb +53 -32
- data/lib/pubid/ashrae/identifier.rb +3 -4
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +7 -1
- data/lib/pubid/ashrae/identifiers/addendum.rb +9 -1
- data/lib/pubid/ashrae/identifiers/base.rb +94 -12
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +8 -1
- data/lib/pubid/ashrae/identifiers/errata.rb +9 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +3 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +16 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +3 -0
- data/lib/pubid/ashrae/identifiers.rb +0 -1
- data/lib/pubid/ashrae/parser.rb +37 -17
- data/lib/pubid/ashrae/renderer.rb +20 -20
- data/lib/pubid/ashrae/single_identifier.rb +1 -1
- data/lib/pubid/ashrae/supplement_identifier.rb +21 -6
- data/lib/pubid/ashrae/urn_generator.rb +8 -2
- data/lib/pubid/ashrae.rb +10 -4
- data/lib/pubid/asme/builder.rb +11 -2
- data/lib/pubid/asme/identifier.rb +9 -0
- data/lib/pubid/asme/identifiers/standard.rb +86 -2
- data/lib/pubid/asme/parser.rb +1 -1
- data/lib/pubid/asme/renderer.rb +3 -3
- data/lib/pubid/asme/single_identifier.rb +8 -1
- data/lib/pubid/asme/urn_generator.rb +2 -2
- data/lib/pubid/asme.rb +1 -0
- data/lib/pubid/astm/builder.rb +10 -3
- data/lib/pubid/astm/identifier.rb +9 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +16 -1
- data/lib/pubid/astm/identifiers/code_number.rb +81 -0
- data/lib/pubid/astm/identifiers/data_series.rb +2 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +16 -0
- data/lib/pubid/astm/identifiers/manual.rb +10 -0
- data/lib/pubid/astm/identifiers/monograph.rb +2 -0
- data/lib/pubid/astm/identifiers/research_report.rb +10 -0
- data/lib/pubid/astm/identifiers/standard.rb +10 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +2 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +2 -0
- data/lib/pubid/astm/identifiers.rb +1 -0
- data/lib/pubid/astm/parser.rb +1 -1
- data/lib/pubid/astm/renderer.rb +1 -1
- data/lib/pubid/astm/single_identifier.rb +31 -1
- data/lib/pubid/astm/urn_generator.rb +7 -5
- data/lib/pubid/astm.rb +1 -0
- data/lib/pubid/bipm/builder.rb +163 -0
- data/lib/pubid/bipm/identifier.rb +285 -0
- data/lib/pubid/bipm/identifiers/committee_document.rb +36 -0
- data/lib/pubid/bipm/identifiers/guide.rb +35 -0
- data/lib/pubid/bipm/identifiers/meeting.rb +53 -0
- data/lib/pubid/bipm/identifiers/mep.rb +33 -0
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +48 -0
- data/lib/pubid/bipm/identifiers/si_brochure.rb +33 -0
- data/lib/pubid/bipm/identifiers.rb +15 -0
- data/lib/pubid/bipm/parser.rb +237 -0
- data/lib/pubid/bipm/renderer.rb +118 -0
- data/lib/pubid/bipm/urn_generator.rb +58 -0
- data/lib/pubid/bipm/urn_parser.rb +60 -0
- data/lib/pubid/bipm.rb +92 -0
- data/lib/pubid/bsi/builder.rb +62 -52
- data/lib/pubid/bsi/identifier.rb +0 -1
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +36 -7
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +7 -6
- data/lib/pubid/bsi/identifiers/amendment.rb +4 -4
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +0 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +10 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +10 -1
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +5 -5
- data/lib/pubid/bsi/identifiers/handbook.rb +0 -2
- data/lib/pubid/bsi/identifiers/practice_guide.rb +0 -1
- data/lib/pubid/bsi/identifiers/set.rb +11 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -1
- data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +6 -6
- data/lib/pubid/bsi/parser.rb +1 -1
- data/lib/pubid/bsi/renderer.rb +71 -59
- data/lib/pubid/bsi/single_identifier.rb +64 -7
- data/lib/pubid/bsi/urn_generator.rb +11 -2
- data/lib/pubid/bsi.rb +7 -1
- data/lib/pubid/builder/base.rb +23 -11
- data/lib/pubid/bundled_identifier.rb +19 -9
- data/lib/pubid/calconnect/builder.rb +38 -0
- data/lib/pubid/calconnect/identifier.rb +121 -0
- data/lib/pubid/calconnect/identifiers/standard.rb +29 -0
- data/lib/pubid/calconnect/identifiers.rb +9 -0
- data/lib/pubid/calconnect/parser.rb +54 -0
- data/lib/pubid/calconnect/renderer.rb +36 -0
- data/lib/pubid/calconnect/urn_generator.rb +33 -0
- data/lib/pubid/calconnect/urn_parser.rb +34 -0
- data/lib/pubid/calconnect.rb +83 -0
- data/lib/pubid/ccsds/builder.rb +1 -1
- data/lib/pubid/ccsds/identifier.rb +10 -3
- data/lib/pubid/ccsds/identifiers/base.rb +4 -2
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/ccsds/parser.rb +1 -1
- data/lib/pubid/ccsds/single_identifier.rb +2 -2
- data/lib/pubid/ccsds/supplement_identifier.rb +6 -6
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds.rb +1 -0
- data/lib/pubid/cen_cenelec/builder.rb +131 -72
- data/lib/pubid/cen_cenelec/identifier.rb +115 -3
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +27 -16
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +46 -6
- data/lib/pubid/cen_cenelec/identifiers/base.rb +8 -9
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +29 -14
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +47 -8
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +60 -3
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +27 -2
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +15 -5
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -1
- data/lib/pubid/cen_cenelec/parser.rb +1 -1
- data/lib/pubid/cen_cenelec/renderer.rb +55 -60
- data/lib/pubid/cen_cenelec/single_identifier.rb +20 -2
- data/lib/pubid/cen_cenelec/urn_generator.rb +66 -44
- data/lib/pubid/cen_cenelec.rb +104 -82
- data/lib/pubid/cie/builder.rb +149 -24
- data/lib/pubid/cie/identifier.rb +13 -4
- data/lib/pubid/cie/identifiers/bundle.rb +35 -5
- data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
- data/lib/pubid/cie/identifiers/conference.rb +11 -6
- data/lib/pubid/cie/identifiers/corrigendum.rb +17 -23
- data/lib/pubid/cie/identifiers/dual_published.rb +6 -6
- data/lib/pubid/cie/identifiers/identical.rb +9 -9
- data/lib/pubid/cie/identifiers/joint_published.rb +10 -10
- data/lib/pubid/cie/identifiers/proceedings.rb +41 -0
- data/lib/pubid/cie/identifiers/standard.rb +43 -8
- data/lib/pubid/cie/identifiers/supplement.rb +27 -25
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +7 -3
- data/lib/pubid/cie/identifiers.rb +2 -0
- data/lib/pubid/cie/parser.rb +55 -6
- data/lib/pubid/cie/single_identifier.rb +40 -1
- data/lib/pubid/cie/supplement_identifier.rb +29 -16
- data/lib/pubid/cie/urn_generator.rb +11 -8
- data/lib/pubid/cie.rb +7 -2
- data/lib/pubid/components/date.rb +21 -5
- data/lib/pubid/conformance/checks.rb +72 -0
- data/lib/pubid/conformance/corpus/case.rb +55 -0
- data/lib/pubid/conformance/corpus.rb +36 -0
- data/lib/pubid/conformance/generator.rb +212 -0
- data/lib/pubid/conformance/pending.rb +63 -0
- data/lib/pubid/conformance/runner.rb +153 -0
- data/lib/pubid/conformance.rb +55 -0
- data/lib/pubid/core.rb +2 -0
- data/lib/pubid/csa/builder.rb +48 -48
- data/lib/pubid/csa/composite_identifier.rb +18 -7
- data/lib/pubid/csa/identifier.rb +187 -80
- data/lib/pubid/csa/identifiers/bundled.rb +25 -9
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
- data/lib/pubid/csa/identifiers/cec.rb +44 -4
- data/lib/pubid/csa/identifiers/combined.rb +97 -69
- data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
- data/lib/pubid/csa/identifiers/package.rb +4 -4
- data/lib/pubid/csa/parser.rb +12 -8
- data/lib/pubid/csa/renderer.rb +13 -5
- data/lib/pubid/csa/single_identifier.rb +93 -4
- data/lib/pubid/csa/urn_generator.rb +9 -2
- data/lib/pubid/csa/wrapper_identifier.rb +43 -10
- data/lib/pubid/csa.rb +7 -1
- data/lib/pubid/doi/builder.rb +18 -0
- data/lib/pubid/doi/identifier.rb +49 -0
- data/lib/pubid/doi/identifiers/resource.rb +30 -0
- data/lib/pubid/doi/identifiers.rb +9 -0
- data/lib/pubid/doi/parser.rb +52 -0
- data/lib/pubid/doi/renderer.rb +13 -0
- data/lib/pubid/doi.rb +56 -0
- data/lib/pubid/easc/builder.rb +55 -0
- data/lib/pubid/easc/identifier.rb +59 -0
- data/lib/pubid/easc/identifiers/pmg.rb +20 -0
- data/lib/pubid/easc/identifiers/rmg.rb +19 -0
- data/lib/pubid/easc/identifiers.rb +10 -0
- data/lib/pubid/easc/parser.rb +88 -0
- data/lib/pubid/easc/renderer.rb +48 -0
- data/lib/pubid/easc/urn_generator.rb +46 -0
- data/lib/pubid/easc/urn_parser.rb +57 -0
- data/lib/pubid/easc.rb +53 -0
- data/lib/pubid/ecma/builder.rb +45 -0
- data/lib/pubid/ecma/identifier.rb +147 -0
- data/lib/pubid/ecma/identifiers/memento.rb +30 -0
- data/lib/pubid/ecma/identifiers/standard.rb +31 -0
- data/lib/pubid/ecma/identifiers/technical_report.rb +31 -0
- data/lib/pubid/ecma/identifiers.rb +11 -0
- data/lib/pubid/ecma/parser.rb +76 -0
- data/lib/pubid/ecma/renderer.rb +67 -0
- data/lib/pubid/ecma/urn_generator.rb +46 -0
- data/lib/pubid/ecma/urn_parser.rb +51 -0
- data/lib/pubid/ecma.rb +68 -0
- data/lib/pubid/errors.rb +80 -0
- data/lib/pubid/etsi/builder.rb +13 -4
- data/lib/pubid/etsi/identifier.rb +1 -3
- data/lib/pubid/etsi/identifiers/base.rb +43 -11
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +207 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +45 -3
- data/lib/pubid/etsi/identifiers.rb +0 -1
- data/lib/pubid/etsi/parser.rb +9 -3
- data/lib/pubid/etsi/renderer.rb +8 -2
- data/lib/pubid/etsi.rb +6 -5
- data/lib/pubid/evs/builder.rb +26 -0
- data/lib/pubid/evs/identifier.rb +37 -0
- data/lib/pubid/evs/identifiers/national_adoption.rb +17 -0
- data/lib/pubid/evs/identifiers.rb +9 -0
- data/lib/pubid/evs/parser.rb +27 -0
- data/lib/pubid/evs/renderer.rb +30 -0
- data/lib/pubid/evs/urn_generator.rb +30 -0
- data/lib/pubid/evs/urn_parser.rb +80 -0
- data/lib/pubid/evs.rb +90 -0
- data/lib/pubid/export/exporter.rb +2 -1
- data/lib/pubid/export/flavor_exporter.rb +18 -3
- data/lib/pubid/export.rb +1 -0
- data/lib/pubid/format_detector.rb +1 -0
- data/lib/pubid/gb/builder.rb +45 -0
- data/lib/pubid/gb/identifier.rb +67 -0
- data/lib/pubid/gb/identifiers/standard.rb +34 -0
- data/lib/pubid/gb/identifiers.rb +9 -0
- data/lib/pubid/gb/parser.rb +63 -0
- data/lib/pubid/gb/renderer.rb +35 -0
- data/lib/pubid/gb.rb +88 -0
- data/lib/pubid/gost/builder.rb +185 -0
- data/lib/pubid/gost/identifier.rb +47 -0
- data/lib/pubid/gost/identifiers/foreign_reference.rb +25 -0
- data/lib/pubid/gost/identifiers/harmonized.rb +39 -0
- data/lib/pubid/gost/identifiers/identical_adoption.rb +39 -0
- data/lib/pubid/gost/identifiers/interstate_standard.rb +20 -0
- data/lib/pubid/gost/identifiers/national_standard.rb +19 -0
- data/lib/pubid/gost/identifiers.rb +13 -0
- data/lib/pubid/gost/parser.rb +105 -0
- data/lib/pubid/gost/renderer.rb +48 -0
- data/lib/pubid/gost/urn_generator.rb +46 -0
- data/lib/pubid/gost/urn_parser.rb +52 -0
- data/lib/pubid/gost.rb +50 -0
- data/lib/pubid/iala/builder.rb +22 -27
- data/lib/pubid/iala/identifier.rb +36 -8
- data/lib/pubid/iala/identifiers/advice.rb +1 -1
- data/lib/pubid/iala/identifiers/annex.rb +10 -10
- data/lib/pubid/iala/identifiers/general_assembly.rb +5 -2
- data/lib/pubid/iala/identifiers/guideline.rb +3 -1
- data/lib/pubid/iala/identifiers/letter.rb +1 -1
- data/lib/pubid/iala/identifiers/manual.rb +3 -1
- data/lib/pubid/iala/identifiers/model_course.rb +3 -1
- data/lib/pubid/iala/identifiers/recommendation.rb +3 -1
- data/lib/pubid/iala/identifiers/report.rb +1 -1
- data/lib/pubid/iala/identifiers/resolution.rb +1 -1
- data/lib/pubid/iala/identifiers/standard.rb +3 -1
- data/lib/pubid/iala/identifiers.rb +0 -1
- data/lib/pubid/iala/parser.rb +10 -2
- data/lib/pubid/iala/renderer.rb +1 -1
- data/lib/pubid/iala/urn_generator.rb +1 -1
- data/lib/pubid/iala/urn_parser.rb +24 -3
- data/lib/pubid/iala.rb +5 -4
- data/lib/pubid/iana/builder.rb +22 -0
- data/lib/pubid/iana/identifier.rb +140 -0
- data/lib/pubid/iana/identifiers/registry.rb +69 -0
- data/lib/pubid/iana/identifiers.rb +9 -0
- data/lib/pubid/iana/parser.rb +38 -0
- data/lib/pubid/iana/renderer.rb +32 -0
- data/lib/pubid/iana/urn_generator.rb +19 -0
- data/lib/pubid/iana/urn_parser.rb +24 -0
- data/lib/pubid/iana.rb +70 -0
- data/lib/pubid/identifier.rb +797 -26
- data/lib/pubid/identifier_metadata.rb +1 -0
- data/lib/pubid/idf/builder.rb +4 -4
- data/lib/pubid/idf/identifier.rb +18 -9
- data/lib/pubid/idf/parser.rb +3 -3
- data/lib/pubid/idf/renderer.rb +5 -5
- data/lib/pubid/idf/supplement_identifier.rb +3 -3
- data/lib/pubid/idf/urn_generator.rb +1 -1
- data/lib/pubid/idf.rb +7 -1
- data/lib/pubid/iec/builder.rb +49 -32
- data/lib/pubid/iec/components.rb +0 -1
- data/lib/pubid/iec/identifier.rb +112 -77
- data/lib/pubid/iec/identifiers/amendment.rb +6 -2
- data/lib/pubid/iec/identifiers/base.rb +2 -2
- data/lib/pubid/iec/identifiers/component_specification.rb +0 -10
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +0 -10
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -2
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +13 -15
- data/lib/pubid/iec/identifiers/guide.rb +0 -16
- data/lib/pubid/iec/identifiers/international_standard.rb +22 -6
- data/lib/pubid/iec/identifiers/operational_document.rb +0 -10
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +0 -12
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +0 -10
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +0 -10
- data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +1 -18
- data/lib/pubid/iec/identifiers/technical_specification.rb +1 -18
- data/lib/pubid/iec/identifiers/technology_report.rb +0 -10
- data/lib/pubid/iec/identifiers/test_report_form.rb +0 -11
- data/lib/pubid/iec/identifiers/vap_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers/white_paper.rb +0 -10
- data/lib/pubid/iec/identifiers/working_document.rb +24 -10
- data/lib/pubid/iec/identifiers.rb +1 -0
- data/lib/pubid/iec/parser.rb +53 -28
- data/lib/pubid/iec/renderer.rb +31 -18
- data/lib/pubid/iec/single_identifier.rb +34 -11
- data/lib/pubid/iec/supplement_identifier.rb +32 -19
- data/lib/pubid/iec/urn_generator.rb +227 -61
- data/lib/pubid/iec/urn_parser.rb +42 -4
- data/lib/pubid/iec.rb +2 -6
- data/lib/pubid/ieee/aiee/builder.rb +17 -3
- data/lib/pubid/ieee/aiee/identifier.rb +46 -62
- data/lib/pubid/ieee/aiee/parser.rb +1 -1
- data/lib/pubid/ieee/builder.rb +386 -69
- data/lib/pubid/ieee/compaction.rb +121 -0
- data/lib/pubid/ieee/components/draft.rb +47 -7
- data/lib/pubid/ieee/identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +62 -5
- data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
- data/lib/pubid/ieee/identifiers/base.rb +148 -18
- data/lib/pubid/ieee/identifiers/code_number.rb +82 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +6 -2
- data/lib/pubid/ieee/identifiers/corrigendum.rb +17 -2
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +24 -3
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +3 -3
- data/lib/pubid/ieee/identifiers/dual_published.rb +58 -3
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +102 -5
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +25 -1
- data/lib/pubid/ieee/identifiers/joint_development.rb +64 -15
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +58 -6
- data/lib/pubid/ieee/identifiers/nesc/base.rb +90 -19
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +20 -5
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +16 -5
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +11 -2
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +18 -3
- data/lib/pubid/ieee/identifiers/nesc.rb +1 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +3 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +14 -6
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +4 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +4 -1
- data/lib/pubid/ieee/identifiers/standard.rb +4 -1
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +26 -7
- data/lib/pubid/ieee/identifiers.rb +2 -1
- data/lib/pubid/ieee/ire/builder.rb +7 -6
- data/lib/pubid/ieee/ire/identifier.rb +48 -33
- data/lib/pubid/ieee/ire/parser.rb +1 -1
- data/lib/pubid/ieee/nesc/builder.rb +33 -20
- data/lib/pubid/ieee/nesc/parser.rb +16 -15
- data/lib/pubid/ieee/parser.rb +462 -44
- data/lib/pubid/ieee/pre_parser.rb +1 -1
- data/lib/pubid/ieee/renderer.rb +158 -57
- data/lib/pubid/ieee/typed_stages.rb +12 -1
- data/lib/pubid/ieee/urn_generator.rb +35 -8
- data/lib/pubid/ieee.rb +63 -4
- data/lib/pubid/ieee_debug.rb +1 -0
- data/lib/pubid/ietf/builder.rb +78 -0
- data/lib/pubid/ietf/identifier.rb +5 -0
- data/lib/pubid/ietf/identifiers/base.rb +72 -0
- data/lib/pubid/ietf/identifiers/bcp.rb +36 -0
- data/lib/pubid/ietf/identifiers/fyi.rb +36 -0
- data/lib/pubid/ietf/identifiers/internet_draft.rb +45 -0
- data/lib/pubid/ietf/identifiers/rfc.rb +27 -0
- data/lib/pubid/ietf/identifiers/serialization.rb +51 -0
- data/lib/pubid/ietf/identifiers/std.rb +36 -0
- data/lib/pubid/ietf/identifiers.rb +14 -0
- data/lib/pubid/ietf/parser.rb +61 -0
- data/lib/pubid/ietf/renderer.rb +64 -0
- data/lib/pubid/ietf/urn_generator.rb +37 -0
- data/lib/pubid/ietf/urn_parser.rb +43 -0
- data/lib/pubid/ietf.rb +86 -0
- data/lib/pubid/iho/identifier.rb +1 -3
- data/lib/pubid/iho/identifiers/base.rb +11 -10
- data/lib/pubid/iho/identifiers/bibliographic.rb +1 -1
- data/lib/pubid/iho/identifiers/circular_letter.rb +1 -1
- data/lib/pubid/iho/identifiers/miscellaneous.rb +1 -1
- data/lib/pubid/iho/identifiers/publication.rb +1 -1
- data/lib/pubid/iho/identifiers/standard.rb +1 -1
- data/lib/pubid/iho/identifiers.rb +0 -1
- data/lib/pubid/iho/parser.rb +1 -1
- data/lib/pubid/iho.rb +8 -7
- data/lib/pubid/isbn/builder.rb +44 -0
- data/lib/pubid/isbn/check_digit.rb +53 -0
- data/lib/pubid/isbn/identifier.rb +81 -0
- data/lib/pubid/isbn/identifiers/book.rb +30 -0
- data/lib/pubid/isbn/identifiers.rb +9 -0
- data/lib/pubid/isbn/parser.rb +45 -0
- data/lib/pubid/isbn/renderer.rb +16 -0
- data/lib/pubid/isbn.rb +53 -0
- data/lib/pubid/iso/builder.rb +9 -4
- data/lib/pubid/iso/bundled_identifier.rb +5 -3
- data/lib/pubid/iso/combined_identifier.rb +6 -4
- data/lib/pubid/iso/identifier.rb +29 -8
- data/lib/pubid/iso/identifiers/directives_supplement.rb +12 -12
- data/lib/pubid/iso/normalizer.rb +2 -2
- data/lib/pubid/iso/parser.rb +17 -13
- data/lib/pubid/iso/supplement_identifier.rb +19 -6
- data/lib/pubid/iso/urn_generator.rb +4 -1
- data/lib/pubid/iso/urn_parser.rb +1 -1
- data/lib/pubid/iso.rb +7 -1
- data/lib/pubid/itu/builder.rb +230 -29
- data/lib/pubid/itu/components/code.rb +48 -5
- data/lib/pubid/itu/components/designation.rb +35 -0
- data/lib/pubid/itu/components.rb +1 -0
- data/lib/pubid/itu/identifier.rb +1 -3
- data/lib/pubid/itu/identifiers/addendum.rb +15 -0
- data/lib/pubid/itu/identifiers/amendment.rb +7 -29
- data/lib/pubid/itu/identifiers/annex.rb +13 -2
- data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +87 -0
- data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +92 -0
- data/lib/pubid/itu/identifiers/base.rb +357 -25
- data/lib/pubid/itu/identifiers/combined_identifier.rb +99 -23
- data/lib/pubid/itu/identifiers/corrigendum.rb +16 -23
- data/lib/pubid/itu/identifiers/errata.rb +15 -0
- data/lib/pubid/itu/identifiers/handbook.rb +38 -0
- data/lib/pubid/itu/identifiers/question.rb +63 -0
- data/lib/pubid/itu/identifiers/recommendation.rb +3 -2
- data/lib/pubid/itu/identifiers/report.rb +39 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +3 -1
- data/lib/pubid/itu/identifiers/standard_serialization.rb +58 -0
- data/lib/pubid/itu/identifiers/supplement.rb +119 -14
- data/lib/pubid/itu/identifiers.rb +10 -1
- data/lib/pubid/itu/model.rb +1 -1
- data/lib/pubid/itu/parser.rb +481 -27
- data/lib/pubid/itu/urn_generator.rb +36 -6
- data/lib/pubid/itu/urn_parser.rb +8 -0
- data/lib/pubid/itu.rb +12 -3
- data/lib/pubid/jcgm/builder.rb +24 -14
- data/lib/pubid/jcgm/identifier.rb +10 -0
- data/lib/pubid/jcgm/identifiers/amendment.rb +0 -2
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +3 -3
- data/lib/pubid/jcgm/identifiers/meeting.rb +47 -0
- data/lib/pubid/jcgm/identifiers.rb +2 -0
- data/lib/pubid/jcgm/parser.rb +74 -7
- data/lib/pubid/jcgm/renderer.rb +33 -12
- data/lib/pubid/jcgm/single_identifier.rb +84 -6
- data/lib/pubid/jcgm/supplement_identifier.rb +39 -4
- data/lib/pubid/jcgm/urn_generator.rb +21 -13
- data/lib/pubid/jcgm/urn_parser.rb +164 -10
- data/lib/pubid/jcgm.rb +10 -0
- data/lib/pubid/jis/identifier.rb +62 -3
- data/lib/pubid/jis/parser.rb +1 -1
- data/lib/pubid/jis.rb +1 -0
- data/lib/pubid/nist/builder.rb +29 -9
- data/lib/pubid/nist/caster.rb +7 -45
- data/lib/pubid/nist/circular_supplement_builder.rb +7 -5
- data/lib/pubid/nist/components/stage.rb +2 -2
- data/lib/pubid/nist/components/supplement.rb +5 -2
- data/lib/pubid/nist/configuration.rb +6 -2
- data/lib/pubid/nist/identifier.rb +1 -3
- data/lib/pubid/nist/identifiers/base.rb +133 -39
- data/lib/pubid/nist/identifiers/circular.rb +10 -3
- data/lib/pubid/nist/identifiers/circular_supplement.rb +14 -5
- data/lib/pubid/nist/identifiers/commercial_standard.rb +1 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +1 -1
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +8 -2
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -2
- data/lib/pubid/nist/identifiers/dated_document.rb +1 -1
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +1 -1
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +1 -1
- data/lib/pubid/nist/identifiers/handbook.rb +10 -3
- data/lib/pubid/nist/identifiers/internal_report.rb +13 -6
- data/lib/pubid/nist/identifiers/letter_circular.rb +1 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +15 -7
- data/lib/pubid/nist/identifiers/monograph.rb +15 -8
- data/lib/pubid/nist/identifiers/ncstar.rb +2 -2
- data/lib/pubid/nist/identifiers/nsrds.rb +1 -1
- data/lib/pubid/nist/identifiers/owmwp.rb +1 -1
- data/lib/pubid/nist/identifiers/report.rb +15 -7
- data/lib/pubid/nist/identifiers/special_publication.rb +10 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +1 -1
- data/lib/pubid/nist/identifiers.rb +0 -1
- data/lib/pubid/nist/parser.rb +27 -4
- data/lib/pubid/nist/preprocessor.rb +15 -0
- data/lib/pubid/nist/router.rb +2 -2
- data/lib/pubid/nist/series/ir.rb +0 -3
- data/lib/pubid/nist/supplement_identifier.rb +24 -9
- data/lib/pubid/nist.rb +19 -13
- data/lib/pubid/oasis/builder.rb +79 -0
- data/lib/pubid/oasis/identifier.rb +160 -0
- data/lib/pubid/oasis/identifiers/standard.rb +29 -0
- data/lib/pubid/oasis/identifiers.rb +9 -0
- data/lib/pubid/oasis/parser.rb +34 -0
- data/lib/pubid/oasis/renderer.rb +29 -0
- data/lib/pubid/oasis/urn_generator.rb +25 -0
- data/lib/pubid/oasis/urn_parser.rb +22 -0
- data/lib/pubid/oasis.rb +80 -0
- data/lib/pubid/ogc/builder.rb +33 -0
- data/lib/pubid/ogc/identifier.rb +81 -0
- data/lib/pubid/ogc/identifiers/document.rb +26 -0
- data/lib/pubid/ogc/identifiers.rb +10 -0
- data/lib/pubid/ogc/parser.rb +40 -0
- data/lib/pubid/ogc/renderer.rb +33 -0
- data/lib/pubid/ogc/urn_generator.rb +14 -0
- data/lib/pubid/ogc/urn_parser.rb +22 -0
- data/lib/pubid/ogc.rb +72 -0
- data/lib/pubid/oiml/builder.rb +36 -8
- data/lib/pubid/oiml/identifier.rb +9 -1
- data/lib/pubid/oiml/identifiers/basic_publication.rb +2 -0
- data/lib/pubid/oiml/identifiers/bulletin.rb +36 -0
- data/lib/pubid/oiml/identifiers/code_number.rb +90 -0
- data/lib/pubid/oiml/identifiers/document.rb +2 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +2 -0
- data/lib/pubid/oiml/identifiers/guide.rb +2 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +2 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +2 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +2 -0
- data/lib/pubid/oiml/identifiers.rb +1 -0
- data/lib/pubid/oiml/parser.rb +12 -13
- data/lib/pubid/oiml/renderer.rb +13 -13
- data/lib/pubid/oiml/single_identifier.rb +41 -37
- data/lib/pubid/oiml/supplement_identifier.rb +36 -9
- data/lib/pubid/oiml/urn_parser.rb +23 -6
- data/lib/pubid/oiml.rb +10 -0
- data/lib/pubid/omg/builder.rb +20 -0
- data/lib/pubid/omg/identifier.rb +61 -0
- data/lib/pubid/omg/identifiers/specification.rb +32 -0
- data/lib/pubid/omg/identifiers.rb +9 -0
- data/lib/pubid/omg/parser.rb +93 -0
- data/lib/pubid/omg/renderer.rb +31 -0
- data/lib/pubid/omg.rb +52 -0
- data/lib/pubid/parser/grammar.rb +74 -0
- data/lib/pubid/parser.rb +2 -0
- data/lib/pubid/parsers/mr_string.rb +120 -7
- data/lib/pubid/plateau/builder.rb +8 -4
- data/lib/pubid/plateau/identifier.rb +1 -3
- data/lib/pubid/plateau/identifiers/base.rb +1 -6
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -1
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/identifiers.rb +0 -1
- data/lib/pubid/plateau/parser.rb +16 -6
- data/lib/pubid/plateau/renderer.rb +1 -1
- data/lib/pubid/plateau/supplement_identifier.rb +11 -11
- data/lib/pubid/plateau.rb +14 -4
- data/lib/pubid/prefixes_support.rb +1 -0
- data/lib/pubid/renderers/annotator.rb +233 -0
- data/lib/pubid/renderers/base.rb +13 -0
- data/lib/pubid/renderers/directives_renderer.rb +3 -3
- data/lib/pubid/renderers/human_readable.rb +6 -4
- data/lib/pubid/renderers/mr_string.rb +54 -6
- data/lib/pubid/renderers/supplement_renderer.rb +1 -1
- data/lib/pubid/renderers.rb +1 -0
- data/lib/pubid/rendering/numbering.rb +25 -7
- data/lib/pubid/rendering/supplement.rb +4 -4
- data/lib/pubid/rendering.rb +1 -0
- data/lib/pubid/sae/builder.rb +1 -1
- data/lib/pubid/sae/identifier.rb +1 -3
- data/lib/pubid/sae/identifiers/base.rb +19 -9
- data/lib/pubid/sae/identifiers.rb +0 -1
- data/lib/pubid/sae/parser.rb +1 -1
- data/lib/pubid/sae.rb +4 -3
- data/lib/pubid/schema/declaration.rb +33 -0
- data/lib/pubid/schema/error.rb +14 -0
- data/lib/pubid/schema/identifier_type.rb +23 -0
- data/lib/pubid/schema/loader.rb +117 -0
- data/lib/pubid/schema/typed_stage.rb +24 -0
- data/lib/pubid/schema.rb +25 -0
- data/lib/pubid/tgpp/builder.rb +41 -0
- data/lib/pubid/tgpp/identifier.rb +107 -0
- data/lib/pubid/tgpp/identifiers/technical_report.rb +32 -0
- data/lib/pubid/tgpp/identifiers/technical_specification.rb +33 -0
- data/lib/pubid/tgpp/identifiers.rb +11 -0
- data/lib/pubid/tgpp/parser.rb +78 -0
- data/lib/pubid/tgpp/renderer.rb +52 -0
- data/lib/pubid/tgpp/urn_generator.rb +39 -0
- data/lib/pubid/tgpp/urn_parser.rb +30 -0
- data/lib/pubid/tgpp.rb +84 -0
- data/lib/pubid/type_resolver.rb +74 -0
- data/lib/pubid/un/builder.rb +42 -0
- data/lib/pubid/un/identifier.rb +40 -0
- data/lib/pubid/un/identifiers/document.rb +24 -0
- data/lib/pubid/un/identifiers.rb +9 -0
- data/lib/pubid/un/parser.rb +25 -0
- data/lib/pubid/un/renderer.rb +11 -0
- data/lib/pubid/un.rb +47 -0
- data/lib/pubid/urn_parser/errors.rb +8 -1
- data/lib/pubid/urn_parser.rb +1 -0
- data/lib/pubid/utils.rb +1 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid/w3c/builder.rb +55 -0
- data/lib/pubid/w3c/identifier.rb +130 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +31 -0
- data/lib/pubid/w3c/identifiers/draft_note.rb +31 -0
- data/lib/pubid/w3c/identifiers/note.rb +30 -0
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/standard.rb +12 -0
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/working_draft.rb +30 -0
- data/lib/pubid/w3c/identifiers.rb +25 -0
- data/lib/pubid/w3c/parser.rb +43 -0
- data/lib/pubid/w3c/renderer.rb +35 -0
- data/lib/pubid/w3c/urn_generator.rb +18 -0
- data/lib/pubid/w3c/urn_parser.rb +36 -0
- data/lib/pubid/w3c.rb +68 -0
- data/lib/pubid/xsf/builder.rb +17 -0
- data/lib/pubid/xsf/identifier.rb +66 -0
- data/lib/pubid/xsf/identifiers/xep.rb +31 -0
- data/lib/pubid/xsf/identifiers.rb +9 -0
- data/lib/pubid/xsf/parser.rb +38 -0
- data/lib/pubid/xsf/renderer.rb +23 -0
- data/lib/pubid/xsf/urn_generator.rb +13 -0
- data/lib/pubid/xsf/urn_parser.rb +18 -0
- data/lib/pubid/xsf.rb +82 -0
- data/lib/pubid.rb +424 -22
- data/lib/tasks/conformance.rake +34 -0
- data/lib/tasks/docs.rake +3 -3
- data/lib/tasks/schema.rake +88 -0
- data/schema/core/joint_prefixes.yaml +24 -0
- data/schema/iec.yaml +1017 -0
- data/schema/iso.yaml +1586 -0
- data/schema/schema.schema.yaml +96 -0
- metadata +241 -19
- data/archived-gems/pubid-ccsds/update_codes.yaml +0 -1
- data/archived-gems/pubid-iec/stages.yaml +0 -129
- data/archived-gems/pubid-iec/update_codes.yaml +0 -67
- data/archived-gems/pubid-ieee/update_codes.yaml +0 -104
- data/archived-gems/pubid-iso/stages.yaml +0 -106
- data/archived-gems/pubid-iso/update_codes.yaml +0 -4
- data/archived-gems/pubid-itu/i18n.yaml +0 -13
- data/archived-gems/pubid-itu/series.yaml +0 -42
- data/archived-gems/pubid-nist/publishers.yaml +0 -6
- data/archived-gems/pubid-nist/update_codes.yaml +0 -93
- data/archived-gems/pubid-plateau/update_codes.yaml +0 -6
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +0 -48
- data/lib/pubid/cie/components/code.rb +0 -80
- data/lib/pubid/iala/identifiers/base.rb +0 -14
- data/lib/pubid/iec/components/code.rb +0 -36
- /data/{archived-gems/pubid-nist → data/nist}/stages.yaml +0 -0
|
@@ -13,6 +13,15 @@ module Pubid
|
|
|
13
13
|
class Errata < SupplementIdentifier
|
|
14
14
|
attribute :errata_date, :string
|
|
15
15
|
|
|
16
|
+
# Make Renderers::MrString recurse into `base` instead of slugging the
|
|
17
|
+
# supplement flat off attributes it does not have. Without it every
|
|
18
|
+
# erratum of every standard shared one filename, and `to_slug` is what
|
|
19
|
+
# consumers use as an output filename.
|
|
20
|
+
def mr_supplement_suffix
|
|
21
|
+
["errata", mr_sanitize(errata_date)]
|
|
22
|
+
.compact.reject(&:empty?).join(".")
|
|
23
|
+
end
|
|
24
|
+
|
|
16
25
|
TYPED_STAGES = [
|
|
17
26
|
Components::TypedStage.new(
|
|
18
27
|
abbr: ["Errata"],
|
|
@@ -8,6 +8,9 @@ module Pubid
|
|
|
8
8
|
# ASHRAE Guideline identifier
|
|
9
9
|
# Example: ASHRAE Guideline 0-2019, ASHRAE Guideline 1.5
|
|
10
10
|
class Guideline < SingleIdentifier
|
|
11
|
+
# The relaton index key. Declared on the LEAF, not on the shared
|
|
12
|
+
# Identifier that SupplementIdentifier also inherits — see base.rb.
|
|
13
|
+
attribute :number, :string
|
|
11
14
|
attribute :type, :string, default: "Guideline"
|
|
12
15
|
|
|
13
16
|
TYPED_STAGES = [
|
|
@@ -11,6 +11,22 @@ module Pubid
|
|
|
11
11
|
# - Interpretations for Standard 15.2-2022
|
|
12
12
|
# - Interpretations for Standard 52.1-1992
|
|
13
13
|
class Interpretation < SupplementIdentifier
|
|
14
|
+
# Mirrors its four sibling supplement types: without it
|
|
15
|
+
# Renderers::MrString slugs the interpretation FLAT off attributes it
|
|
16
|
+
# does not have, instead of recursing into `base`.
|
|
17
|
+
#
|
|
18
|
+
# Currently unreachable, and NOT because of alternation ordering:
|
|
19
|
+
# rule(:interpretation_identifier) is reached and does match, but it
|
|
20
|
+
# never wraps its output in `.as(:interpretation_identifier)`, so
|
|
21
|
+
# Builder#build's branch for that key is dead code and the tree falls
|
|
22
|
+
# through to the plain-Standard path (pre-existing; pinned in
|
|
23
|
+
# spec/pubid/ashrae/root_number_spec.rb, hand-off
|
|
24
|
+
# ashrae-interpretation-collapses-onto-base). Added anyway so that
|
|
25
|
+
# fixing the dispatch does not silently ship malformed filenames.
|
|
26
|
+
def mr_supplement_suffix
|
|
27
|
+
"interp"
|
|
28
|
+
end
|
|
29
|
+
|
|
14
30
|
TYPED_STAGES = [
|
|
15
31
|
Components::TypedStage.new(
|
|
16
32
|
abbr: ["Interpretations"],
|
|
@@ -8,6 +8,9 @@ module Pubid
|
|
|
8
8
|
# ASHRAE Standard identifier
|
|
9
9
|
# Example: ASHRAE Standard 15-2024, ASHRAE Standard 90.1-2022
|
|
10
10
|
class Standard < SingleIdentifier
|
|
11
|
+
# The relaton index key. Declared on the LEAF, not on the shared
|
|
12
|
+
# Identifier that SupplementIdentifier also inherits — see base.rb.
|
|
13
|
+
attribute :number, :string
|
|
11
14
|
attribute :type, :string, default: "Standard"
|
|
12
15
|
|
|
13
16
|
TYPED_STAGES = [
|
|
@@ -5,7 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
autoload :AddendaPackage, "#{__dir__}/identifiers/addenda_package"
|
|
7
7
|
autoload :Addendum, "#{__dir__}/identifiers/addendum"
|
|
8
|
-
autoload :Base, "#{__dir__}/identifiers/base"
|
|
9
8
|
autoload :CombinedAddenda, "#{__dir__}/identifiers/combined_addenda"
|
|
10
9
|
autoload :Errata, "#{__dir__}/identifiers/errata"
|
|
11
10
|
autoload :Guideline, "#{__dir__}/identifiers/guideline"
|
data/lib/pubid/ashrae/parser.rb
CHANGED
|
@@ -6,7 +6,7 @@ module Pubid
|
|
|
6
6
|
module Ashrae
|
|
7
7
|
# Parser class for ASHRAE identifiers
|
|
8
8
|
# Single Responsibility: Parsing ASHRAE identifier syntax
|
|
9
|
-
class Parser <
|
|
9
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
10
10
|
# Basic building blocks
|
|
11
11
|
rule(:space) { str(" ") }
|
|
12
12
|
rule(:space?) { space.maybe }
|
|
@@ -54,15 +54,25 @@ module Pubid
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# Code with year pattern (e.g., 34-2024, 62.1-2022, 90A-2010) - used when type is missing
|
|
57
|
+
#
|
|
58
|
+
# The code portion MUST be captured with `.as(:code)`. Without it the
|
|
59
|
+
# digits were matched and then discarded — only the year was named — so
|
|
60
|
+
# every identifier reaching this rule lost its document number: 48 corpus
|
|
61
|
+
# ids rendered as "ANSI/ASHRAE Addendum a to ASHRAE Standard -2024",
|
|
62
|
+
# number gone and a dangling dash left behind. Builder#extract_base_attributes
|
|
63
|
+
# already read `code_with_year[:code]`; it was waiting for a value the
|
|
64
|
+
# grammar never produced.
|
|
57
65
|
rule(:code_with_year) do
|
|
58
66
|
(
|
|
59
|
-
digits >> # First part (e.g., 34, 62)
|
|
60
|
-
(dot >> digits).repeat(0, 2) >> # Optional dotted parts (e.g., .1)
|
|
61
|
-
# Special pattern for codes like "90A,B,C-2010"
|
|
62
67
|
(
|
|
63
|
-
|
|
64
|
-
(
|
|
65
|
-
|
|
68
|
+
digits >> # First part (e.g., 34, 62)
|
|
69
|
+
(dot >> digits).repeat(0, 2) >> # Optional dotted parts (e.g., .1)
|
|
70
|
+
# Special pattern for codes like "90A,B,C-2010"
|
|
71
|
+
(
|
|
72
|
+
letter >> # Single letter after digits
|
|
73
|
+
(comma >> letter).repeat(0, 10) # Optional comma-separated letters
|
|
74
|
+
).maybe
|
|
75
|
+
).as(:code) >>
|
|
66
76
|
space?.maybe >> dash >>
|
|
67
77
|
year_digits.as(:year)
|
|
68
78
|
).as(:code_with_year)
|
|
@@ -166,7 +176,7 @@ module Pubid
|
|
|
166
176
|
(space >> additional_copublisher).maybe >>
|
|
167
177
|
suffix.maybe >>
|
|
168
178
|
reaffirmed.maybe
|
|
169
|
-
).as(:
|
|
179
|
+
).as(:base) >>
|
|
170
180
|
space >>
|
|
171
181
|
str("Errata").as(:errata_keyword) >>
|
|
172
182
|
(
|
|
@@ -188,7 +198,7 @@ module Pubid
|
|
|
188
198
|
(space >> additional_copublisher).maybe >>
|
|
189
199
|
suffix.maybe >>
|
|
190
200
|
reaffirmed.maybe
|
|
191
|
-
).as(:
|
|
201
|
+
).as(:base) >>
|
|
192
202
|
space >>
|
|
193
203
|
str("Errata").as(:errata_keyword) >>
|
|
194
204
|
(
|
|
@@ -207,7 +217,7 @@ module Pubid
|
|
|
207
217
|
(space >> additional_copublisher).maybe >>
|
|
208
218
|
suffix.maybe >>
|
|
209
219
|
reaffirmed.maybe
|
|
210
|
-
).as(:
|
|
220
|
+
).as(:base) >>
|
|
211
221
|
space >>
|
|
212
222
|
str("Errata").as(:errata_keyword) >>
|
|
213
223
|
errata_date.maybe >>
|
|
@@ -219,7 +229,7 @@ module Pubid
|
|
|
219
229
|
rule(:interpretation_identifier) do
|
|
220
230
|
str("Interpretations") >> space >>
|
|
221
231
|
str("for") >> space >>
|
|
222
|
-
(type.as(:type) >> space >> code >> (dash >> year_digits.as(:year)).maybe).as(:
|
|
232
|
+
(type.as(:type) >> space >> code >> (dash >> year_digits.as(:year)).maybe).as(:base)
|
|
223
233
|
end
|
|
224
234
|
|
|
225
235
|
# Combined Addenda pattern (multiple addendums grouped together)
|
|
@@ -607,9 +617,12 @@ module Pubid
|
|
|
607
617
|
year_first_addenda_package_identifier |
|
|
608
618
|
addenda_package_identifier |
|
|
609
619
|
addendum_identifier |
|
|
610
|
-
# Standalone copublisher pattern (ANSI/AMCA 210-99, AMCA 210-99)
|
|
611
|
-
|
|
612
|
-
|
|
620
|
+
# Standalone copublisher pattern (ANSI/AMCA 210-99, AMCA 210-99).
|
|
621
|
+
# The literal "ASHRAE" is excluded here so a bare "ASHRAE <code>-<year>"
|
|
622
|
+
# is not swallowed as a copublisher and instead falls through to the
|
|
623
|
+
# ASHRAE-publisher branch below.
|
|
624
|
+
(((str("ANSI") >> slash).maybe >> (str("ASHRAE").absent? >> letter).repeat(2,
|
|
625
|
+
10)).as(:copublisher) >>
|
|
613
626
|
space >>
|
|
614
627
|
code_with_year >>
|
|
615
628
|
optional_suffix.repeat(0, 2)) |
|
|
@@ -635,9 +648,11 @@ module Pubid
|
|
|
635
648
|
suffix.maybe >>
|
|
636
649
|
reaffirmed.maybe >>
|
|
637
650
|
optional_suffix.repeat(0, 2)) |
|
|
638
|
-
# Standard ASHRAE pattern
|
|
651
|
+
# Standard ASHRAE pattern. The type keyword is optional so a bare
|
|
652
|
+
# partial reference "ASHRAE <code>" (no "Standard"/"Guideline") parses;
|
|
653
|
+
# the builder defaults the absent type to "Standard".
|
|
639
654
|
(publisher.as(:publisher) >> space >>
|
|
640
|
-
type.as(:type) >> space >>
|
|
655
|
+
(type.as(:type) >> space).maybe >>
|
|
641
656
|
code >>
|
|
642
657
|
(space?.maybe >> dash >> year_digits.as(:year)).maybe >>
|
|
643
658
|
(space >> additional_copublisher).maybe >>
|
|
@@ -650,8 +665,13 @@ module Pubid
|
|
|
650
665
|
root(:identifier)
|
|
651
666
|
|
|
652
667
|
def self.parse(string)
|
|
668
|
+
unless string.is_a?(String)
|
|
669
|
+
raise Pubid::Errors::InvalidInputError,
|
|
670
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
671
|
+
end
|
|
672
|
+
|
|
653
673
|
if string.length > Pubid::MAX_INPUT_LENGTH
|
|
654
|
-
raise
|
|
674
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
655
675
|
end
|
|
656
676
|
|
|
657
677
|
# Strip leading/trailing whitespace
|
|
@@ -46,7 +46,7 @@ module Pubid
|
|
|
46
46
|
parts << id.type.to_s if id.type
|
|
47
47
|
result = parts.join(" ")
|
|
48
48
|
result += " " if result.length.positive?
|
|
49
|
-
result += id.
|
|
49
|
+
result += id.number.to_s
|
|
50
50
|
result += "-#{id.year}" if id.year
|
|
51
51
|
result += " (#{id.amendment})" if id.amendment
|
|
52
52
|
result += id.suffix if id.suffix
|
|
@@ -56,48 +56,48 @@ module Pubid
|
|
|
56
56
|
|
|
57
57
|
# Addendum: "ASHRAE Addendum a to Standard 15-2001"
|
|
58
58
|
def render_addendum(id)
|
|
59
|
-
return id.
|
|
59
|
+
return id.base.to_s unless id.base
|
|
60
60
|
|
|
61
|
-
base_type = id.
|
|
61
|
+
base_type = id.base.type || "Standard"
|
|
62
62
|
|
|
63
63
|
if id.copublisher
|
|
64
|
-
"#{id.copublisher} Addendum #{id.addendum_code} to #{id.
|
|
64
|
+
"#{id.copublisher} Addendum #{id.addendum_code} to #{id.base}"
|
|
65
65
|
else
|
|
66
|
-
result = "ASHRAE Addendum #{id.addendum_code} to #{base_type} #{id.
|
|
67
|
-
result += "-#{id.
|
|
66
|
+
result = "ASHRAE Addendum #{id.addendum_code} to #{base_type} #{id.base.number}"
|
|
67
|
+
result += "-#{id.base.year}" if id.base.year
|
|
68
68
|
result
|
|
69
69
|
end.tap { |r| r << " (#{id.addendum_date})" if id.addendum_date }
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
# AddendaPackage: "ASHRAE Standard 52.2-1999: Addenda Supplement Package"
|
|
73
73
|
def render_addenda_package(id)
|
|
74
|
-
return id.
|
|
74
|
+
return id.base.to_s unless id.base
|
|
75
75
|
|
|
76
|
-
result = "ASHRAE #{id.
|
|
77
|
-
result += "-#{id.
|
|
76
|
+
result = "ASHRAE #{id.base.type || 'Standard'} #{id.base.number}"
|
|
77
|
+
result += "-#{id.base.year}" if id.base.year
|
|
78
78
|
result += ": Addenda #{id.package_description}" if id.package_description
|
|
79
79
|
result
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
# CombinedAddenda: "ASHRAE Addenda c and d to Standard 15-1994"
|
|
83
83
|
def render_combined_addenda(id)
|
|
84
|
-
return id.
|
|
84
|
+
return id.base.to_s unless id.base
|
|
85
85
|
|
|
86
|
-
base_type = id.
|
|
86
|
+
base_type = id.base.type || "Standard"
|
|
87
87
|
if id.addendum_codes
|
|
88
|
-
result = "ASHRAE Addenda #{id.addendum_codes} to #{base_type} #{id.
|
|
88
|
+
result = "ASHRAE Addenda #{id.addendum_codes} to #{base_type} #{id.base.number}"
|
|
89
89
|
else
|
|
90
|
-
result = "ASHRAE Addenda to #{base_type} #{id.
|
|
90
|
+
result = "ASHRAE Addenda to #{base_type} #{id.base.number}"
|
|
91
91
|
end
|
|
92
|
-
result += "-#{id.
|
|
92
|
+
result += "-#{id.base.year}" if id.base.year
|
|
93
93
|
result
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
# Errata: "ASHRAE Guideline 0-2005 Errata (September 28, 2011)"
|
|
97
97
|
def render_errata(id)
|
|
98
|
-
return id.
|
|
98
|
+
return id.base.to_s unless id.base
|
|
99
99
|
|
|
100
|
-
result = id.
|
|
100
|
+
result = id.base.to_s
|
|
101
101
|
result += " Errata"
|
|
102
102
|
result += " (#{id.errata_date})" if id.errata_date
|
|
103
103
|
result
|
|
@@ -105,11 +105,11 @@ module Pubid
|
|
|
105
105
|
|
|
106
106
|
# Interpretation: "Interpretations for Standard 15.2-2022"
|
|
107
107
|
def render_interpretation(id)
|
|
108
|
-
return id.
|
|
108
|
+
return id.base.to_s unless id.base
|
|
109
109
|
|
|
110
|
-
base_type = id.
|
|
111
|
-
result = "Interpretations for #{base_type} #{id.
|
|
112
|
-
result += "-#{id.
|
|
110
|
+
base_type = id.base.type || "Standard"
|
|
111
|
+
result = "Interpretations for #{base_type} #{id.base.number}"
|
|
112
|
+
result += "-#{id.base.year}" if id.base.year
|
|
113
113
|
result
|
|
114
114
|
end
|
|
115
115
|
end
|
|
@@ -6,17 +6,32 @@ module Pubid
|
|
|
6
6
|
module Ashrae
|
|
7
7
|
# Base class for supplement identifiers (addendums, errata, interpretations)
|
|
8
8
|
# Supplements modify or add to a base document
|
|
9
|
-
class SupplementIdentifier <
|
|
10
|
-
attribute :
|
|
9
|
+
class SupplementIdentifier < Identifier
|
|
10
|
+
attribute :base, Identifier, polymorphic: true
|
|
11
11
|
|
|
12
|
-
# Delegate publisher to
|
|
12
|
+
# Delegate publisher to base
|
|
13
13
|
def publisher
|
|
14
|
-
|
|
14
|
+
base&.publisher
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
# Delegate code to
|
|
17
|
+
# Delegate the document code to the base standard.
|
|
18
|
+
#
|
|
19
|
+
# The BODY had to move with the `code` -> `number` rename — it was
|
|
20
|
+
# `base&.code`, and `code` no longer exists anywhere in the hierarchy, so
|
|
21
|
+
# it raised NoMethodError on every Errata/Addendum/CombinedAddenda/
|
|
22
|
+
# AddendaPackage/Interpretation. Nothing inside lib/pubid/ashrae calls
|
|
23
|
+
# it, which is exactly why the suite stayed green while a public method
|
|
24
|
+
# on five types was broken.
|
|
25
|
+
#
|
|
26
|
+
# The NAME deliberately stays `code`. Renaming it to `number` looks
|
|
27
|
+
# tidier and is wrong twice over: `number` is an inherited lutaml
|
|
28
|
+
# attribute typed Components::Code, so a String-returning method of that
|
|
29
|
+
# name makes `to_hash` raise IncorrectModelError on every supplement —
|
|
30
|
+
# and even typed correctly it would serialize a duplicate of the base's
|
|
31
|
+
# number onto the wrapper. `code` is not an attribute anywhere, so it is
|
|
32
|
+
# free to be a plain reader. Use `#root.number` for the index key.
|
|
18
33
|
def code
|
|
19
|
-
|
|
34
|
+
base&.number
|
|
20
35
|
end
|
|
21
36
|
end
|
|
22
37
|
end
|
|
@@ -3,10 +3,16 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ashrae
|
|
5
5
|
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
6
|
+
# A supplement carries no number of its own — only the two
|
|
7
|
+
# single-document leaves declare one — so reach it through #root, which
|
|
8
|
+
# walks `base` to the standard the supplement attaches to. Without the
|
|
9
|
+
# fallback every Errata/Addendum URN lost its number when `code` moved
|
|
10
|
+
# off the shared base onto the leaves.
|
|
6
11
|
def urn_number
|
|
7
|
-
|
|
12
|
+
num = identifier.number || identifier.root.number
|
|
13
|
+
return nil if num.nil? || num.to_s.empty?
|
|
8
14
|
|
|
9
|
-
|
|
15
|
+
num.to_s
|
|
10
16
|
end
|
|
11
17
|
|
|
12
18
|
def urn_suffix
|
data/lib/pubid/ashrae.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "pubid"
|
|
3
4
|
module Pubid
|
|
4
5
|
module Ashrae
|
|
5
6
|
extend Pubid::PrefixesSupport
|
|
@@ -9,7 +10,7 @@ module Pubid
|
|
|
9
10
|
PREFIXES = ["ASHRAE"].freeze
|
|
10
11
|
|
|
11
12
|
autoload :Builder, "#{__dir__}/ashrae/builder"
|
|
12
|
-
autoload :Identifier, "#{__dir__}/ashrae/
|
|
13
|
+
autoload :Identifier, "#{__dir__}/ashrae/identifiers/base"
|
|
13
14
|
autoload :Identifiers, "#{__dir__}/ashrae/identifiers"
|
|
14
15
|
autoload :Parser, "#{__dir__}/ashrae/parser"
|
|
15
16
|
autoload :Renderer, "#{__dir__}/ashrae/renderer"
|
|
@@ -19,8 +20,13 @@ module Pubid
|
|
|
19
20
|
autoload :UrnParser, "#{__dir__}/ashrae/urn_parser"
|
|
20
21
|
|
|
21
22
|
def self.parse(identifier)
|
|
23
|
+
unless identifier.is_a?(String)
|
|
24
|
+
raise Pubid::Errors::InvalidInputError,
|
|
25
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
26
|
+
end
|
|
27
|
+
|
|
22
28
|
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
23
|
-
raise
|
|
29
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
24
30
|
end
|
|
25
31
|
|
|
26
32
|
Identifier.parse(identifier)
|
|
@@ -68,5 +74,5 @@ end
|
|
|
68
74
|
Pubid::Registry.register(:ashrae, Pubid::Ashrae)
|
|
69
75
|
|
|
70
76
|
# Per-flavor format registry: inherits global formats, overrides :human
|
|
71
|
-
Pubid::Ashrae::
|
|
72
|
-
Pubid::Ashrae::
|
|
77
|
+
Pubid::Ashrae::Identifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
78
|
+
Pubid::Ashrae::Identifier.format_registry.register(:human, renderer: Pubid::Ashrae::Renderer)
|
data/lib/pubid/asme/builder.rb
CHANGED
|
@@ -21,9 +21,18 @@ module Pubid
|
|
|
21
21
|
identifier.publisher = "ASME"
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
#
|
|
24
|
+
# The code is stored as flat index columns on the leaf (see
|
|
25
|
+
# Identifiers::Standard) — `number` is what relaton-index keys on — so
|
|
26
|
+
# the Code built below is unpacked rather than assigned.
|
|
25
27
|
if parsed_hash[:designator]
|
|
26
|
-
identifier.
|
|
28
|
+
identifier.number = build_code(parsed_hash).to_s
|
|
29
|
+
elsif parsed_hash[:number]
|
|
30
|
+
# A joint-published reference ("ISO/ASME 14414-2015") parses to a bare
|
|
31
|
+
# `number` with no designator. The designator-only guard above dropped
|
|
32
|
+
# it, so the document number was lost from BOTH the identifier and its
|
|
33
|
+
# rendering: `to_s` was "ISO/ASME-2015". Pre-existing; recovering it
|
|
34
|
+
# is what gives these ids an index key.
|
|
35
|
+
identifier.number = parsed_hash[:number].to_s
|
|
27
36
|
end
|
|
28
37
|
|
|
29
38
|
# Set PTC suffix
|
|
@@ -4,6 +4,15 @@ module Pubid
|
|
|
4
4
|
module Asme
|
|
5
5
|
class Identifier < Pubid::Identifier
|
|
6
6
|
def self.parse(str)
|
|
7
|
+
unless str.is_a?(String)
|
|
8
|
+
raise Pubid::Errors::InvalidInputError,
|
|
9
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
if str.length > Pubid::MAX_INPUT_LENGTH
|
|
13
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
14
|
+
end
|
|
15
|
+
|
|
7
16
|
parser = Parser.new
|
|
8
17
|
builder = Builder.new
|
|
9
18
|
|
|
@@ -4,8 +4,92 @@ module Pubid
|
|
|
4
4
|
module Asme
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Standard < Base
|
|
7
|
-
#
|
|
8
|
-
#
|
|
7
|
+
# --- Index columns -------------------------------------------------
|
|
8
|
+
#
|
|
9
|
+
# relaton-index sorts and bsearches every row on
|
|
10
|
+
# `id.root.number.to_s`. ASME used to keep the code inside an
|
|
11
|
+
# Asme::Components::Code under a `code` attribute, leaving the
|
|
12
|
+
# inherited `number` nil and every row keyed "".
|
|
13
|
+
#
|
|
14
|
+
# `number` holds the WHOLE printed code — "B18.3", "A112.19.12",
|
|
15
|
+
# "BPVC-CC-BPV" — not a designator/number split.
|
|
16
|
+
#
|
|
17
|
+
# The split looks tempting (it is what IEEE does) but it cannot key
|
|
18
|
+
# this corpus: 152 of the 731 fixture ids are Boiler and Pressure
|
|
19
|
+
# Vessel Code documents whose entire identity IS the designator
|
|
20
|
+
# ("BPVC COMPLETE CODE BIND", "BPVC.CC.BPV") with no numeric part at
|
|
21
|
+
# all. Splitting leaves every one of them with an empty key, and
|
|
22
|
+
# inventing a number for them would be inventing data.
|
|
23
|
+
#
|
|
24
|
+
# Nothing is lost by joining: Components::Code#render is a plain
|
|
25
|
+
# concatenation of designator and number, and the only readers of
|
|
26
|
+
# `code` anywhere in lib/pubid/asme are `code.to_s` (renderer.rb,
|
|
27
|
+
# urn_generator.rb). Keying on the whole code also clusters editions of
|
|
28
|
+
# one document, which is what relaton narrows on — an ASME reference is
|
|
29
|
+
# always written "ASME B18.3", never "18.3" alone.
|
|
30
|
+
#
|
|
31
|
+
# LANDMINE: `number` redefines the Components::Code attribute inherited
|
|
32
|
+
# from ::Pubid::Identifier, which resolves nondeterministically when
|
|
33
|
+
# declared on a class others inherit from. Standard is the only
|
|
34
|
+
# concrete ASME type and has no subclasses, so it is declared here and
|
|
35
|
+
# never on SingleIdentifier / Identifiers::Base.
|
|
36
|
+
# spec/pubid/asme/root_number_spec.rb carries the tripwire and is only
|
|
37
|
+
# meaningful under the full `rake` suite.
|
|
38
|
+
# There is deliberately no `#code` reader here. An earlier draft had one
|
|
39
|
+
# composing `Components::Code.new(number: number)` so the renderer and
|
|
40
|
+
# the URN generator would not have to change — but because `number`
|
|
41
|
+
# holds the whole printed code, that Code never carried a designator and
|
|
42
|
+
# `code.to_s` equalled `number` for all 731 corpus ids. It wrapped a
|
|
43
|
+
# string in an object whose only job was to unwrap to the same string.
|
|
44
|
+
# Both readers now use `number` directly.
|
|
45
|
+
#
|
|
46
|
+
# ASTM keeps its composed `#code` (Identifiers::CodeNumber) for the
|
|
47
|
+
# opposite reason: its renderer reads `code.letter` / `code.dual_m`
|
|
48
|
+
# field-by-field, so the component there carries real structure.
|
|
49
|
+
attribute :number, :string
|
|
50
|
+
|
|
51
|
+
# MR slug. Before the index column landed, every ASME slug was just
|
|
52
|
+
# "asme": 722 of 731 documents shared one filename, and `to_slug` is
|
|
53
|
+
# what consumers use as an output filename.
|
|
54
|
+
#
|
|
55
|
+
# `handbook` is identity-bearing — it is in the serialized hash and in
|
|
56
|
+
# `==`, and "ASME A17.1/CSA B44-2019" and "ASME A17.1/CSA B44
|
|
57
|
+
# Handbook-2019" are different documents — so it has to reach the slug
|
|
58
|
+
# too. CLAUDE.md's rule: a marker that only reaches `==` still lets two
|
|
59
|
+
# documents share a filename.
|
|
60
|
+
def mr_number_with_part
|
|
61
|
+
mr_join(mr_sanitize(number), (handbook ? "handbook" : nil))
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# ASME keeps its edition in a plain `year` string, not the inherited
|
|
65
|
+
# `date`, so the base `mr_year` hook read nil and every edition of one
|
|
66
|
+
# standard shared a slug.
|
|
67
|
+
def mr_year
|
|
68
|
+
year&.to_s
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# ASME keeps a translation marker in a plain `language` string, not the
|
|
72
|
+
# inherited `languages` collection the base hook reads. Without this,
|
|
73
|
+
# "ASME B31.8-2016" and its Spanish edition "ASME B31.8 (SPANISH)-2016"
|
|
74
|
+
# — different documents, and #== agrees — share one filename.
|
|
75
|
+
def mr_languages
|
|
76
|
+
language&.to_s&.downcase
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# An ASME code legitimately contains "." (B18.3), "-" (BPVC-CC-BPV),
|
|
80
|
+
# "&" (V&V) and spaces ("BPVC COMPLETE CODE BIND"). Renderers::MrString
|
|
81
|
+
# joins SEGMENTS with ".", so a dot inside one breaks that structure —
|
|
82
|
+
# filter by charset, the BIPM `mr_slug` precedent, rather than by an
|
|
83
|
+
# enumerated escape list. The output emptiness check matters: a value
|
|
84
|
+
# made only of out-of-charset characters collapses to "", which is
|
|
85
|
+
# truthy in Ruby and would reach the renderer as a blank segment.
|
|
86
|
+
def mr_sanitize(value)
|
|
87
|
+
return nil if value.nil? || value.to_s.empty?
|
|
88
|
+
|
|
89
|
+
sanitized = value.to_s.downcase
|
|
90
|
+
.gsub(/[^a-z0-9-]+/, "-").gsub(/\A-+|-+\z/, "")
|
|
91
|
+
sanitized.empty? ? nil : sanitized
|
|
92
|
+
end
|
|
9
93
|
end
|
|
10
94
|
end
|
|
11
95
|
end
|
data/lib/pubid/asme/parser.rb
CHANGED
data/lib/pubid/asme/renderer.rb
CHANGED
|
@@ -22,15 +22,15 @@ module Pubid
|
|
|
22
22
|
parts << id.first_publisher
|
|
23
23
|
parts << id.first_code
|
|
24
24
|
parts << "/#{id.second_publisher}" if id.second_publisher
|
|
25
|
-
parts << id.
|
|
25
|
+
parts << id.number.to_s if id.number && id.number.to_s != ""
|
|
26
26
|
elsif id.joint_publisher
|
|
27
27
|
# ISO/ASME or ASME/ANS format
|
|
28
28
|
parts << id.joint_publisher
|
|
29
|
-
parts << id.
|
|
29
|
+
parts << id.number.to_s if id.number && id.number.to_s != ""
|
|
30
30
|
else
|
|
31
31
|
# Standard ASME format
|
|
32
32
|
parts << id.publisher if id.publisher
|
|
33
|
-
parts << id.
|
|
33
|
+
parts << id.number.to_s if id.number
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
result = parts.join(" ")
|
|
@@ -10,7 +10,14 @@ module Pubid
|
|
|
10
10
|
# @return [String] URN representation
|
|
11
11
|
|
|
12
12
|
attribute :publisher, :string
|
|
13
|
-
|
|
13
|
+
# The document code lives on the concrete leaf as a single `number`
|
|
14
|
+
# column holding the WHOLE printed code ("B18.3", "BPVC-CC-BPV") — see
|
|
15
|
+
# Identifiers::Standard, which explains why it is not split into
|
|
16
|
+
# designator + number. It cannot be declared here: SingleIdentifier is
|
|
17
|
+
# inherited by Identifiers::Base and Identifiers::Standard, and
|
|
18
|
+
# redefining the `number` that ::Pubid::Identifier types as a
|
|
19
|
+
# Components::Code on an inherited-from class resolves
|
|
20
|
+
# nondeterministically under multi-flavor load.
|
|
14
21
|
attribute :year, :string
|
|
15
22
|
attribute :reaffirmation, :string # R2020
|
|
16
23
|
attribute :language, :string # (SPANISH)
|
data/lib/pubid/asme.rb
CHANGED
data/lib/pubid/astm/builder.rb
CHANGED
|
@@ -8,9 +8,16 @@ module Pubid
|
|
|
8
8
|
identifier_class = determine_identifier_class(parsed_hash)
|
|
9
9
|
identifier = identifier_class.new
|
|
10
10
|
|
|
11
|
-
#
|
|
11
|
+
# The code is stored as flat index columns on every concrete class (see
|
|
12
|
+
# Identifiers::CodeNumber) — `number` is what relaton-index keys on —
|
|
13
|
+
# so the Code built below is unpacked rather than assigned.
|
|
12
14
|
if parsed_hash[:letter] || parsed_hash[:number]
|
|
13
|
-
|
|
15
|
+
code = build_code(parsed_hash)
|
|
16
|
+
identifier.letter = code.letter
|
|
17
|
+
identifier.number = code.number
|
|
18
|
+
identifier.suffix = code.suffix
|
|
19
|
+
identifier.subseries = code.subseries
|
|
20
|
+
identifier.dual_m = code.dual_m || false
|
|
14
21
|
end
|
|
15
22
|
|
|
16
23
|
# Set publisher
|
|
@@ -119,7 +126,7 @@ module Pubid
|
|
|
119
126
|
|
|
120
127
|
# Adjunct
|
|
121
128
|
if identifier.is_a?(Identifiers::Adjunct)
|
|
122
|
-
identifier.
|
|
129
|
+
identifier.number = parsed_hash[:designation].to_s if parsed_hash[:designation]
|
|
123
130
|
identifier.ea_suffix = true if parsed_hash[:ea_suffix]
|
|
124
131
|
identifier.dvd_suffix = true if parsed_hash[:dvd_suffix]
|
|
125
132
|
end
|
|
@@ -4,6 +4,15 @@ module Pubid
|
|
|
4
4
|
module Astm
|
|
5
5
|
class Identifier < Pubid::Identifier
|
|
6
6
|
def self.parse(str)
|
|
7
|
+
unless str.is_a?(String)
|
|
8
|
+
raise Pubid::Errors::InvalidInputError,
|
|
9
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
if str.length > Pubid::MAX_INPUT_LENGTH
|
|
13
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
14
|
+
end
|
|
15
|
+
|
|
7
16
|
parser = Parser.new
|
|
8
17
|
builder = Builder.new
|
|
9
18
|
|