pubid 2.0.0.pre.alpha.1 → 2.0.0.pre.alpha.3
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 +5 -1
- data/data/nist/update_codes.yaml +27 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -0
- data/lib/pubid/amca/identifiers/base.rb +0 -26
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -17
- data/lib/pubid/amca/identifiers/publication.rb +0 -13
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +42 -1
- data/lib/pubid/ansi/builder.rb +5 -3
- data/lib/pubid/ansi/identifier.rb +1 -1
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
- data/lib/pubid/ansi/identifiers/standard.rb +2 -3
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +2 -31
- data/lib/pubid/ansi/urn_generator.rb +3 -38
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +38 -3
- data/lib/pubid/api/builder.rb +29 -74
- data/lib/pubid/api/identifier.rb +0 -4
- data/lib/pubid/api/identifiers/base.rb +0 -2
- data/lib/pubid/api/identifiers/bulletin.rb +0 -2
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
- data/lib/pubid/api/identifiers/mpms.rb +1 -17
- data/lib/pubid/api/identifiers/publication.rb +0 -2
- data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
- data/lib/pubid/api/identifiers/specification.rb +0 -2
- data/lib/pubid/api/identifiers/standard.rb +0 -2
- data/lib/pubid/api/identifiers/technical_report.rb +0 -2
- data/lib/pubid/api/identifiers/typeless_standard.rb +1 -14
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +1 -13
- data/lib/pubid/api/urn_generator.rb +0 -18
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +51 -5
- data/lib/pubid/ashrae/builder.rb +3 -3
- data/lib/pubid/ashrae/identifier.rb +6 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
- data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
- data/lib/pubid/ashrae/identifiers/base.rb +3 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
- data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
- data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +0 -13
- data/lib/pubid/ashrae/urn_generator.rb +0 -8
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +42 -1
- data/lib/pubid/asme/components/code.rb +10 -2
- data/lib/pubid/asme/identifiers/base.rb +0 -60
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +42 -1
- data/lib/pubid/astm/components/code.rb +9 -0
- data/lib/pubid/{jis → astm}/components.rb +1 -1
- data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
- data/lib/pubid/astm/identifiers/data_series.rb +0 -14
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
- data/lib/pubid/astm/identifiers/manual.rb +0 -27
- data/lib/pubid/astm/identifiers/monograph.rb +0 -14
- data/lib/pubid/astm/identifiers/research_report.rb +0 -7
- data/lib/pubid/astm/identifiers/standard.rb +0 -39
- data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
- data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
- data/lib/pubid/astm/identifiers.rb +18 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +0 -10
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +39 -27
- data/lib/pubid/bsi/builder.rb +21 -12
- data/lib/pubid/bsi/identifier.rb +8 -2
- data/lib/pubid/bsi/identifiers/addendum_document.rb +3 -33
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +11 -47
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +11 -38
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +3 -53
- data/lib/pubid/bsi/identifiers/amendment.rb +3 -19
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +2 -4
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/committee_document.rb +1 -14
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/corrigendum.rb +3 -7
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +1 -34
- data/lib/pubid/bsi/identifiers/disc.rb +1 -27
- data/lib/pubid/bsi/identifiers/draft_document.rb +3 -44
- data/lib/pubid/bsi/identifiers/electronic_book.rb +3 -36
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +3 -15
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +1 -45
- data/lib/pubid/bsi/identifiers/flex.rb +1 -33
- data/lib/pubid/bsi/identifiers/handbook.rb +2 -13
- data/lib/pubid/bsi/identifiers/index.rb +1 -30
- data/lib/pubid/bsi/identifiers/method.rb +1 -39
- data/lib/pubid/bsi/identifiers/national_annex.rb +5 -27
- data/lib/pubid/bsi/identifiers/practice_guide.rb +2 -4
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +3 -52
- data/lib/pubid/bsi/identifiers/published_document.rb +3 -52
- data/lib/pubid/bsi/identifiers/section.rb +1 -28
- data/lib/pubid/bsi/identifiers/set.rb +3 -17
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +1 -7
- data/lib/pubid/bsi/identifiers/supplement_document.rb +3 -21
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +1 -44
- data/lib/pubid/bsi/identifiers/technical_specification.rb +3 -45
- data/lib/pubid/bsi/identifiers/test_method.rb +1 -30
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +3 -14
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +6 -70
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +224 -1
- data/lib/pubid/builder/base.rb +57 -10
- data/lib/pubid/bundled_identifier.rb +0 -1
- data/lib/pubid/ccsds/builder.rb +4 -3
- data/lib/pubid/ccsds/identifier.rb +66 -1
- data/lib/pubid/ccsds/identifiers/base.rb +11 -50
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/single_identifier.rb +4 -1
- data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +39 -1
- data/lib/pubid/cen_cenelec/builder.rb +12 -14
- data/lib/pubid/cen_cenelec/identifier.rb +8 -2
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +13 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/base.rb +5 -41
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +2 -25
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -13
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +4 -7
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +11 -89
- data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +168 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +6 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +43 -1
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +22 -8
- data/lib/pubid/components/date.rb +23 -16
- data/lib/pubid/components/edition.rb +9 -6
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +6 -4
- data/lib/pubid/components/locality.rb +10 -1
- data/lib/pubid/components/publisher.rb +9 -6
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +5 -14
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +5 -15
- data/lib/pubid/components/typed_stage.rb +11 -8
- data/lib/pubid/components.rb +4 -0
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -3
- data/lib/pubid/csa/identifiers/base.rb +2 -122
- data/lib/pubid/csa/identifiers/cec.rb +2 -101
- data/lib/pubid/csa/identifiers/series.rb +2 -102
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +42 -1
- data/lib/pubid/etsi/components/code.rb +9 -2
- data/lib/pubid/etsi/identifiers/base.rb +1 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +2 -9
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +42 -1
- data/lib/pubid/export/exporter.rb +4 -46
- data/lib/pubid/export/flavor_exporter.rb +111 -278
- data/lib/pubid/export.rb +0 -6
- data/lib/pubid/identifier.rb +10 -18
- data/lib/pubid/identifier_facade.rb +114 -0
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +3 -6
- data/lib/pubid/idf/identifiers/amendment.rb +2 -1
- data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
- data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
- data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
- data/lib/pubid/idf/parser.rb +3 -2
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/supplement_identifier.rb +2 -10
- data/lib/pubid/idf/urn_generator.rb +4 -39
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +51 -1
- data/lib/pubid/iec/builder.rb +48 -65
- data/lib/pubid/iec/components/code.rb +9 -32
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +276 -3
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -28
- data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +27 -30
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -26
- data/lib/pubid/iec/identifiers/guide.rb +0 -2
- data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
- data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +21 -15
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
- data/lib/pubid/iec/identifiers/test_report_form.rb +5 -34
- data/lib/pubid/iec/identifiers/vap_identifier.rb +26 -23
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +4 -48
- data/lib/pubid/iec/identifiers.rb +30 -0
- data/lib/pubid/iec/parser.rb +20 -14
- data/lib/pubid/iec/renderer.rb +254 -0
- data/lib/pubid/iec/single_identifier.rb +6 -12
- data/lib/pubid/iec/supplement_identifier.rb +58 -54
- data/lib/pubid/iec/urn_generator.rb +57 -171
- data/lib/pubid/iec/urn_parser.rb +53 -252
- data/lib/pubid/iec.rb +40 -68
- data/lib/pubid/ieee/builder.rb +12 -12
- data/lib/pubid/ieee/components/code.rb +8 -0
- data/lib/pubid/ieee/components/draft.rb +14 -0
- data/lib/pubid/ieee/components/relationship.rb +5 -149
- data/lib/pubid/ieee/identifier.rb +6 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +1 -6
- data/lib/pubid/ieee/identifiers/base.rb +101 -458
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/corrigendum.rb +1 -9
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +1 -7
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +1 -1
- data/lib/pubid/ieee/identifiers/dual_published.rb +1 -1
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +1 -6
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -15
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +1 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +1 -35
- data/lib/pubid/ieee/identifiers/standard.rb +1 -1
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +307 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +62 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +8 -0
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/identifiers/bibliographic.rb +0 -4
- data/lib/pubid/iho/identifiers/circular_letter.rb +0 -4
- data/lib/pubid/iho/identifiers/miscellaneous.rb +0 -4
- data/lib/pubid/iho/identifiers/publication.rb +0 -4
- data/lib/pubid/iho/identifiers/standard.rb +0 -4
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +59 -53
- data/lib/pubid/iso/bundled_identifier.rb +51 -0
- data/lib/pubid/iso/components/code.rb +7 -19
- data/lib/pubid/iso/components/publisher.rb +10 -8
- data/lib/pubid/iso/components.rb +2 -4
- data/lib/pubid/iso/identifier.rb +233 -6
- data/lib/pubid/iso/identifiers/addendum.rb +9 -6
- data/lib/pubid/iso/identifiers/amendment.rb +8 -4
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +0 -1
- data/lib/pubid/iso/identifiers/directives.rb +8 -2
- data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +0 -1
- data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +10 -4
- data/lib/pubid/iso/identifiers/pas.rb +2 -2
- data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
- data/lib/pubid/iso/identifiers/supplement.rb +11 -3
- data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
- data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
- data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
- data/lib/pubid/iso/identifiers.rb +0 -1
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +26 -6
- data/lib/pubid/iso/single_identifier.rb +6 -3
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +74 -176
- data/lib/pubid/iso/urn_parser.rb +28 -9
- data/lib/pubid/iso.rb +173 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +8 -0
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +6 -39
- data/lib/pubid/itu/identifiers/amendment.rb +0 -2
- data/lib/pubid/itu/identifiers/annex.rb +0 -2
- data/lib/pubid/itu/identifiers/base.rb +0 -6
- data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
- data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
- data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
- data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
- data/lib/pubid/itu/identifiers/supplement.rb +0 -2
- data/lib/pubid/itu/urn_parser.rb +23 -0
- data/lib/pubid/itu.rb +42 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifiers/amendment.rb +2 -7
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +2 -10
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +1 -5
- data/lib/pubid/jcgm/urn_generator.rb +4 -6
- data/lib/pubid/jcgm/urn_parser.rb +23 -0
- data/lib/pubid/jcgm.rb +43 -2
- data/lib/pubid/jis/builder.rb +44 -52
- data/lib/pubid/jis/identifier.rb +132 -3
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +31 -5
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +6 -12
- data/lib/pubid/jis/supplement_identifier.rb +17 -14
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +42 -2
- data/lib/pubid/nist/builder.rb +122 -1761
- data/lib/pubid/nist/caster.rb +1272 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
- data/lib/pubid/nist/components/code.rb +9 -20
- data/lib/pubid/nist/components/edition.rb +16 -0
- data/lib/pubid/nist/components/supplement.rb +88 -21
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +25 -0
- data/lib/pubid/nist/identifiers/base.rb +206 -64
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +3 -2
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -11
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -16
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
- data/lib/pubid/nist/identifiers/handbook.rb +2 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
- data/lib/pubid/nist/identifiers/monograph.rb +7 -3
- data/lib/pubid/nist/identifiers/report.rb +4 -3
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
- data/lib/pubid/nist/identifiers.rb +1 -0
- data/lib/pubid/nist/parser.rb +67 -424
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +416 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +148 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +60 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +11 -25
- data/lib/pubid/nist/urn_generator.rb +14 -8
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +83 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifiers/annex.rb +3 -45
- data/lib/pubid/oiml/identifiers/base.rb +2 -17
- data/lib/pubid/oiml/renderer.rb +161 -0
- data/lib/pubid/oiml/single_identifier.rb +6 -45
- data/lib/pubid/oiml/supplement_identifier.rb +4 -19
- data/lib/pubid/oiml/urn_generator.rb +0 -8
- data/lib/pubid/oiml/urn_parser.rb +22 -0
- data/lib/pubid/oiml.rb +42 -1
- data/lib/pubid/plateau/identifier.rb +23 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -3
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +1 -1
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +44 -1
- data/lib/pubid/renderers/base.rb +34 -0
- data/lib/pubid/renderers/directives_renderer.rb +27 -14
- data/lib/pubid/renderers/guide_renderer.rb +7 -1
- data/lib/pubid/renderers/human_readable.rb +31 -8
- data/lib/pubid/renderers/iwa_renderer.rb +5 -1
- data/lib/pubid/renderers/supplement_renderer.rb +4 -1
- data/lib/pubid/rendering/context.rb +33 -21
- data/lib/pubid/rendering.rb +0 -3
- data/lib/pubid/sae/components/date.rb +8 -0
- data/lib/pubid/sae/components/type.rb +5 -1
- data/lib/pubid/sae/identifiers/base.rb +2 -16
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +2 -10
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +42 -1
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +9 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +29 -7
- data/lib/tasks/website-data.json +1940 -1882
- metadata +77 -43
- data/lib/pubid/amca/scheme.rb +0 -16
- data/lib/pubid/ansi/scheme.rb +0 -15
- data/lib/pubid/api/scheme.rb +0 -66
- data/lib/pubid/ashrae/scheme.rb +0 -53
- data/lib/pubid/asme/scheme.rb +0 -37
- data/lib/pubid/astm/scheme.rb +0 -55
- data/lib/pubid/bsi/identifiers/base.rb +0 -11
- data/lib/pubid/bsi/scheme.rb +0 -243
- data/lib/pubid/ccsds/scheme.rb +0 -57
- data/lib/pubid/cen_cenelec/scheme.rb +0 -164
- data/lib/pubid/cie/scheme.rb +0 -64
- data/lib/pubid/csa/scheme.rb +0 -44
- data/lib/pubid/etsi/scheme.rb +0 -42
- data/lib/pubid/export/data_class_exporter.rb +0 -59
- data/lib/pubid/export/ieee_exporter.rb +0 -78
- data/lib/pubid/export/itu_exporter.rb +0 -66
- data/lib/pubid/export/nist_exporter.rb +0 -64
- data/lib/pubid/export/registry_exporter.rb +0 -90
- data/lib/pubid/export/scheme_exporter.rb +0 -70
- data/lib/pubid/identifier_registry.rb +0 -198
- data/lib/pubid/idf/scheme.rb +0 -61
- data/lib/pubid/iec/scheme.rb +0 -71
- data/lib/pubid/ieee/scheme.rb +0 -90
- data/lib/pubid/iho/scheme.rb +0 -29
- data/lib/pubid/iso/identifiers/base.rb +0 -115
- data/lib/pubid/iso/scheme.rb +0 -187
- data/lib/pubid/itu/scheme.rb +0 -174
- data/lib/pubid/jcgm/scheme.rb +0 -60
- data/lib/pubid/jis/components/code.rb +0 -59
- data/lib/pubid/jis/identifiers/base.rb +0 -72
- data/lib/pubid/jis/scheme.rb +0 -49
- data/lib/pubid/nist/components/publisher.rb +0 -24
- data/lib/pubid/nist/scheme.rb +0 -199
- data/lib/pubid/oiml/scheme.rb +0 -46
- data/lib/pubid/plateau/scheme.rb +0 -45
- data/lib/pubid/rendering/base.rb +0 -73
- data/lib/pubid/rendering/common.rb +0 -211
- data/lib/pubid/rendering/format.rb +0 -25
- data/lib/pubid/sae/scheme.rb +0 -47
- data/lib/pubid/scheme.rb +0 -207
|
@@ -5,13 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
class ResearchReport < Base
|
|
7
7
|
attribute :committee, :string # A01, C09
|
|
8
|
-
|
|
9
|
-
def to_s
|
|
10
|
-
parts = []
|
|
11
|
-
parts << publisher if publisher
|
|
12
|
-
parts << "RR:#{committee}-#{code.number}" if committee && code
|
|
13
|
-
parts.join(" ")
|
|
14
|
-
end
|
|
15
8
|
end
|
|
16
9
|
end
|
|
17
10
|
end
|
|
@@ -7,45 +7,6 @@ module Pubid
|
|
|
7
7
|
attribute :sub_year, :string # a, b, c
|
|
8
8
|
attribute :reapproval, :string # (2023)
|
|
9
9
|
attribute :edition, :string # e1
|
|
10
|
-
|
|
11
|
-
def to_s
|
|
12
|
-
parts = []
|
|
13
|
-
parts << publisher if publisher
|
|
14
|
-
|
|
15
|
-
# Code with potential dual unit
|
|
16
|
-
if code
|
|
17
|
-
code_str = code.to_s
|
|
18
|
-
# Check if this is a dual unit designation
|
|
19
|
-
if code.dual_m
|
|
20
|
-
# F1862/F1862M format
|
|
21
|
-
base_code = "#{code.letter}#{code.number}"
|
|
22
|
-
code_str = "#{base_code}/#{base_code}M"
|
|
23
|
-
end
|
|
24
|
-
parts << code_str
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Join parts with space (ASTM E2938)
|
|
28
|
-
result = parts.join(" ")
|
|
29
|
-
|
|
30
|
-
# Append year directly without space
|
|
31
|
-
if year
|
|
32
|
-
result += "-#{year_portion}"
|
|
33
|
-
result += sub_year if sub_year
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Append reapproval
|
|
37
|
-
result += "(#{reapproval})" if reapproval
|
|
38
|
-
|
|
39
|
-
# Append edition
|
|
40
|
-
result += "e#{edition}" if edition
|
|
41
|
-
|
|
42
|
-
result
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def year_portion
|
|
46
|
-
# Convert 4-digit to 2-digit (e.g., 2015 → 15)
|
|
47
|
-
year.to_s.length == 4 ? year.to_s[-2..] : year.to_s
|
|
48
|
-
end
|
|
49
10
|
end
|
|
50
11
|
end
|
|
51
12
|
end
|
|
@@ -4,19 +4,6 @@ module Pubid
|
|
|
4
4
|
module Astm
|
|
5
5
|
module Identifiers
|
|
6
6
|
class TechnicalReport < Base
|
|
7
|
-
def to_s
|
|
8
|
-
# Check if ISO/ASTM format: publisher "ISO/ASTM" without TR letter in code
|
|
9
|
-
if publisher == "ISO/ASTM" && (code.nil? || code.letter.nil?)
|
|
10
|
-
result = "ISO/ASTMTR"
|
|
11
|
-
else
|
|
12
|
-
# Simple TR format
|
|
13
|
-
result = "TR"
|
|
14
|
-
result += code.letter if code&.letter
|
|
15
|
-
end
|
|
16
|
-
result += code.number if code&.number
|
|
17
|
-
result += format_suffix if format_suffix
|
|
18
|
-
result
|
|
19
|
-
end
|
|
20
7
|
end
|
|
21
8
|
end
|
|
22
9
|
end
|
|
@@ -4,17 +4,6 @@ module Pubid
|
|
|
4
4
|
module Astm
|
|
5
5
|
module Identifiers
|
|
6
6
|
class WorkInProgress < Base
|
|
7
|
-
def to_s
|
|
8
|
-
parts = []
|
|
9
|
-
parts << publisher if publisher
|
|
10
|
-
|
|
11
|
-
result = parts.join(" ")
|
|
12
|
-
result += " " if publisher && !result.end_with?(" ")
|
|
13
|
-
|
|
14
|
-
result += "WK"
|
|
15
|
-
result += code.number if code
|
|
16
|
-
result
|
|
17
|
-
end
|
|
18
7
|
end
|
|
19
8
|
end
|
|
20
9
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
module Identifiers
|
|
6
|
+
autoload :Base, "#{__dir__}/identifiers/base"
|
|
7
|
+
autoload :Standard, "#{__dir__}/identifiers/standard"
|
|
8
|
+
autoload :IsoDualPublished, "#{__dir__}/identifiers/iso_dual_published"
|
|
9
|
+
autoload :Manual, "#{__dir__}/identifiers/manual"
|
|
10
|
+
autoload :ResearchReport, "#{__dir__}/identifiers/research_report"
|
|
11
|
+
autoload :DataSeries, "#{__dir__}/identifiers/data_series"
|
|
12
|
+
autoload :TechnicalReport, "#{__dir__}/identifiers/technical_report"
|
|
13
|
+
autoload :Monograph, "#{__dir__}/identifiers/monograph"
|
|
14
|
+
autoload :Adjunct, "#{__dir__}/identifiers/adjunct"
|
|
15
|
+
autoload :WorkInProgress, "#{__dir__}/identifiers/work_in_progress"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
# Human-readable renderer for ASTM identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Consolidates the per-type rendering logic that used to live inline on
|
|
8
|
+
# each identifier class. Produces strings like:
|
|
9
|
+
# "ASTM E2938-15"
|
|
10
|
+
# "ASTM RR:A01-1234"
|
|
11
|
+
# "ASTM MNL45-EB"
|
|
12
|
+
# "ASTM ADJD2148"
|
|
13
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
14
|
+
def render(context: nil, **opts)
|
|
15
|
+
id = @id
|
|
16
|
+
|
|
17
|
+
case id
|
|
18
|
+
when Identifiers::Standard
|
|
19
|
+
render_standard(id)
|
|
20
|
+
when Identifiers::IsoDualPublished
|
|
21
|
+
render_standard(id)
|
|
22
|
+
when Identifiers::ResearchReport
|
|
23
|
+
render_research_report(id)
|
|
24
|
+
when Identifiers::DataSeries
|
|
25
|
+
render_data_series(id)
|
|
26
|
+
when Identifiers::TechnicalReport
|
|
27
|
+
render_technical_report(id)
|
|
28
|
+
when Identifiers::Monograph
|
|
29
|
+
render_monograph(id)
|
|
30
|
+
when Identifiers::Adjunct
|
|
31
|
+
render_adjunct(id)
|
|
32
|
+
when Identifiers::WorkInProgress
|
|
33
|
+
render_work_in_progress(id)
|
|
34
|
+
when Identifiers::Manual
|
|
35
|
+
render_manual(id)
|
|
36
|
+
else
|
|
37
|
+
render_single(id)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def render_single(id)
|
|
44
|
+
parts = []
|
|
45
|
+
parts << id.publisher if id.publisher
|
|
46
|
+
parts << id.prefix if id.class.attributes.key?(:prefix) && id.prefix
|
|
47
|
+
parts << id.code.to_s if id.code
|
|
48
|
+
parts << "-#{id.year}" if id.year
|
|
49
|
+
parts << id.format_suffix if id.format_suffix
|
|
50
|
+
parts.join(" ")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def render_standard(id)
|
|
54
|
+
parts = []
|
|
55
|
+
parts << id.publisher if id.publisher
|
|
56
|
+
|
|
57
|
+
if id.code
|
|
58
|
+
code_str = id.code.to_s
|
|
59
|
+
if id.code.dual_m
|
|
60
|
+
base_code = "#{id.code.letter}#{id.code.number}"
|
|
61
|
+
code_str = "#{base_code}/#{base_code}M"
|
|
62
|
+
end
|
|
63
|
+
parts << code_str
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
result = parts.join(" ")
|
|
67
|
+
|
|
68
|
+
if id.year
|
|
69
|
+
result += "-#{year_portion(id)}"
|
|
70
|
+
result += id.sub_year if id.sub_year
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
result += "(#{id.reapproval})" if id.reapproval
|
|
74
|
+
result += "e#{id.edition}" if id.edition
|
|
75
|
+
|
|
76
|
+
result
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def year_portion(id)
|
|
80
|
+
year_str = id.year.to_s
|
|
81
|
+
year_str.length == 4 ? year_str[-2..] : year_str
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def render_research_report(id)
|
|
85
|
+
parts = []
|
|
86
|
+
parts << id.publisher if id.publisher
|
|
87
|
+
parts << "RR:#{id.committee}-#{id.code.number}" if id.committee && id.code
|
|
88
|
+
parts.join(" ")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def render_data_series(id)
|
|
92
|
+
parts = []
|
|
93
|
+
parts << id.publisher if id.publisher
|
|
94
|
+
|
|
95
|
+
result = parts.join(" ")
|
|
96
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
97
|
+
|
|
98
|
+
result += "DS"
|
|
99
|
+
result += id.code.to_s if id.code
|
|
100
|
+
result += "HOL" if id.hol_suffix
|
|
101
|
+
result += id.format_suffix if id.format_suffix
|
|
102
|
+
result
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def render_technical_report(id)
|
|
106
|
+
if id.publisher == "ISO/ASTM" && (id.code.nil? || id.code.letter.nil?)
|
|
107
|
+
result = "ISO/ASTMTR"
|
|
108
|
+
else
|
|
109
|
+
result = "TR"
|
|
110
|
+
result += id.code.letter if id.code&.letter
|
|
111
|
+
end
|
|
112
|
+
result += id.code.number if id.code&.number
|
|
113
|
+
result += id.format_suffix if id.format_suffix
|
|
114
|
+
result
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def render_monograph(id)
|
|
118
|
+
parts = []
|
|
119
|
+
parts << id.publisher if id.publisher
|
|
120
|
+
|
|
121
|
+
result = parts.join(" ")
|
|
122
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
123
|
+
|
|
124
|
+
result += "MONO"
|
|
125
|
+
result += id.code.number if id.code
|
|
126
|
+
result += "-#{id.edition}" if id.edition
|
|
127
|
+
result += id.format_suffix if id.format_suffix
|
|
128
|
+
result
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def render_adjunct(id)
|
|
132
|
+
result = []
|
|
133
|
+
result << id.publisher if id.publisher && !id.ea_suffix && !id.dvd_suffix
|
|
134
|
+
result << "ADJ#{id.designation}#{'-EA' if id.ea_suffix}#{'DVD' if id.dvd_suffix}"
|
|
135
|
+
result.compact.join(" ")
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def render_work_in_progress(id)
|
|
139
|
+
parts = []
|
|
140
|
+
parts << id.publisher if id.publisher
|
|
141
|
+
|
|
142
|
+
result = parts.join(" ")
|
|
143
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
144
|
+
|
|
145
|
+
result += "WK"
|
|
146
|
+
result += id.code.number if id.code
|
|
147
|
+
result
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def render_manual(id)
|
|
151
|
+
parts = []
|
|
152
|
+
parts << id.publisher if id.publisher
|
|
153
|
+
parts << "MNL"
|
|
154
|
+
parts << "TP" if id.tp_designation
|
|
155
|
+
parts << id.code.number if id.code
|
|
156
|
+
|
|
157
|
+
result = parts.join
|
|
158
|
+
|
|
159
|
+
result += "-#{id.edition}" if id.edition
|
|
160
|
+
|
|
161
|
+
if id.publisher
|
|
162
|
+
result = "#{id.publisher} #{result[id.publisher.length..]}"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
result += "-SUP" if id.supplement
|
|
166
|
+
result += id.format_suffix if id.format_suffix
|
|
167
|
+
|
|
168
|
+
result
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -10,16 +10,6 @@ module Pubid
|
|
|
10
10
|
attribute :code, Components::Code
|
|
11
11
|
attribute :year, :string
|
|
12
12
|
attribute :format_suffix, :string # -EB for eBook
|
|
13
|
-
|
|
14
|
-
def to_s
|
|
15
|
-
parts = []
|
|
16
|
-
parts << publisher if publisher
|
|
17
|
-
parts << prefix if self.class.attributes.key?(:prefix) && prefix
|
|
18
|
-
parts << code.to_s if code
|
|
19
|
-
parts << "-#{year}" if year
|
|
20
|
-
parts << format_suffix if format_suffix
|
|
21
|
-
parts.join(" ")
|
|
22
|
-
end
|
|
23
13
|
end
|
|
24
14
|
end
|
|
25
15
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
# Parses ASTM URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:astm:{publisher}:{code}:{year}[:sub_year][:reapp.X][:eX][:wip][:wk.X]
|
|
9
|
+
#
|
|
10
|
+
# The publisher slot is the lowercase publisher string ("astm" or
|
|
11
|
+
# "pub-copub"). The code slot is the alphanumeric ASTM code (e.g.,
|
|
12
|
+
# "D2148", "A1"). Year is **2 digits** in the URN.
|
|
13
|
+
#
|
|
14
|
+
# Examples:
|
|
15
|
+
# - urn:astm:astm:D2148:2022 → ASTM D2148-22
|
|
16
|
+
# - urn:astm:astm:A1:2002 → ASTM A1-02
|
|
17
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
18
|
+
def parse_urn(urn)
|
|
19
|
+
body = strip_namespace(urn)
|
|
20
|
+
parts = split_parts(body)
|
|
21
|
+
|
|
22
|
+
_publisher, code, year = parts
|
|
23
|
+
|
|
24
|
+
text = "ASTM #{code}"
|
|
25
|
+
text += "-#{year[-2..]}" if year && year.length >= 2
|
|
26
|
+
flavor_parse(text)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/pubid/astm.rb
CHANGED
|
@@ -1,38 +1,50 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "parslet"
|
|
4
|
-
require "lutaml/model"
|
|
5
|
-
require_relative "identifier"
|
|
6
|
-
require_relative "astm/identifier"
|
|
7
|
-
require_relative "astm/components/code"
|
|
8
|
-
require_relative "astm/single_identifier"
|
|
9
|
-
require_relative "astm/parser"
|
|
10
|
-
require_relative "astm/builder"
|
|
11
|
-
|
|
12
|
-
# Identifier classes
|
|
13
|
-
require_relative "astm/identifiers/base"
|
|
14
|
-
require_relative "astm/identifiers/standard"
|
|
15
|
-
require_relative "astm/identifiers/iso_dual_published"
|
|
16
|
-
require_relative "astm/identifiers/manual"
|
|
17
|
-
require_relative "astm/identifiers/research_report"
|
|
18
|
-
require_relative "astm/identifiers/data_series"
|
|
19
|
-
require_relative "astm/identifiers/technical_report"
|
|
20
|
-
require_relative "astm/identifiers/monograph"
|
|
21
|
-
require_relative "astm/identifiers/adjunct"
|
|
22
|
-
require_relative "astm/identifiers/work_in_progress"
|
|
23
|
-
|
|
24
|
-
# Scheme (must be loaded after identifiers)
|
|
25
|
-
require_relative "astm/scheme"
|
|
26
|
-
|
|
27
3
|
module Pubid
|
|
28
4
|
module Astm
|
|
5
|
+
autoload :Components, "#{__dir__}/astm/components"
|
|
6
|
+
autoload :Identifier, "#{__dir__}/astm/identifier"
|
|
7
|
+
autoload :Identifiers, "#{__dir__}/astm/identifiers"
|
|
8
|
+
autoload :SingleIdentifier, "#{__dir__}/astm/single_identifier"
|
|
9
|
+
autoload :Parser, "#{__dir__}/astm/parser"
|
|
10
|
+
autoload :Builder, "#{__dir__}/astm/builder"
|
|
11
|
+
autoload :Renderer, "#{__dir__}/astm/renderer"
|
|
12
|
+
autoload :UrnGenerator, "#{__dir__}/astm/urn_generator"
|
|
13
|
+
autoload :UrnParser, "#{__dir__}/astm/urn_parser"
|
|
14
|
+
|
|
29
15
|
def self.parse(str)
|
|
30
16
|
Identifier.parse(str)
|
|
31
17
|
end
|
|
32
|
-
end
|
|
33
18
|
|
|
34
|
-
|
|
19
|
+
def self.identifier_types
|
|
20
|
+
@identifier_types ||= Identifiers.constants
|
|
21
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
22
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
23
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.all_typed_stages
|
|
27
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
28
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
29
|
+
klass.const_get(:TYPED_STAGES)
|
|
30
|
+
else
|
|
31
|
+
[]
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.locate_type(code)
|
|
37
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.locate_stage(abbr)
|
|
41
|
+
abbr_str = abbr.to_s.upcase
|
|
42
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
43
|
+
end
|
|
44
|
+
end
|
|
35
45
|
end
|
|
36
46
|
|
|
37
|
-
# Register Uastm flavor with the registry
|
|
38
47
|
Pubid::Registry.register(:astm, Pubid::Astm)
|
|
48
|
+
|
|
49
|
+
Pubid::Astm::SingleIdentifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
50
|
+
Pubid::Astm::SingleIdentifier.format_registry.register(:human, renderer: Pubid::Astm::Renderer)
|
data/lib/pubid/bsi/builder.rb
CHANGED
|
@@ -3,12 +3,19 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Bsi
|
|
5
5
|
class Builder < Pubid::Builder::Base
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
# Default typed stage used when an abbreviation lookup yields no match.
|
|
7
|
+
# Empty/unknown abbreviations fall back to the published British Standard.
|
|
8
|
+
DEFAULT_TYPED_STAGE = Pubid::Components::TypedStage.new(
|
|
9
|
+
code: :pubbs,
|
|
10
|
+
stage_code: :published,
|
|
11
|
+
type_code: :bs,
|
|
12
|
+
abbr: ["BS"],
|
|
13
|
+
name: "British Standard",
|
|
14
|
+
harmonized_stages: %w[60.00 60.60],
|
|
15
|
+
).freeze
|
|
16
|
+
|
|
17
|
+
def self.build(parsed_data)
|
|
18
|
+
new.build(parsed_data)
|
|
12
19
|
end
|
|
13
20
|
|
|
14
21
|
def build(data)
|
|
@@ -122,7 +129,7 @@ module Pubid
|
|
|
122
129
|
return identifier
|
|
123
130
|
end
|
|
124
131
|
|
|
125
|
-
# Determine identifier class using
|
|
132
|
+
# Determine identifier class using the module's lookup helpers
|
|
126
133
|
identifier = locate_identifier_klass(data).new
|
|
127
134
|
assign_attributes(identifier, data)
|
|
128
135
|
|
|
@@ -934,17 +941,19 @@ module Pubid
|
|
|
934
941
|
return Identifiers::AdoptedEuropeanNorm if parsed_hash[:adopted_string]&.match?(/^EN\s+\d/)
|
|
935
942
|
return Identifiers::AdoptedInternationalStandard if parsed_hash[:adopted_string]
|
|
936
943
|
|
|
937
|
-
# Use type to determine class via
|
|
944
|
+
# Use type to determine class via Pubid::Bsi.locate_stage / locate_type.
|
|
945
|
+
# Unknown abbreviations fall back to DEFAULT_TYPED_STAGE (published BS).
|
|
938
946
|
type_str = parsed_hash[:type] || parsed_hash[:stage] || ""
|
|
939
|
-
typed_stage =
|
|
940
|
-
|
|
947
|
+
typed_stage = Bsi.locate_stage(type_str.to_s.upcase) || DEFAULT_TYPED_STAGE
|
|
948
|
+
Bsi.locate_type(typed_stage.type_code) || Identifiers::BritishStandard
|
|
941
949
|
end
|
|
942
950
|
|
|
943
951
|
def cast(type, value)
|
|
944
952
|
case type
|
|
945
953
|
when :type
|
|
946
|
-
# Lookup from register
|
|
947
|
-
|
|
954
|
+
# Lookup from register via Pubid::Bsi.locate_stage.
|
|
955
|
+
# Unknown abbreviations fall back to DEFAULT_TYPED_STAGE (published BS).
|
|
956
|
+
typed_stage = Bsi.locate_stage(value.to_s.upcase) || DEFAULT_TYPED_STAGE
|
|
948
957
|
{
|
|
949
958
|
stage: typed_stage.to_stage,
|
|
950
959
|
type: typed_stage.to_type,
|
data/lib/pubid/bsi/identifier.rb
CHANGED
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Bsi
|
|
5
|
+
# `extend Pubid::IdentifierFacade` adds polymorphic `from_hash` and pairs
|
|
6
|
+
# with `include Pubid::Bsi::Identifier` in SingleIdentifier (BSI's common
|
|
7
|
+
# ancestor — there is no Identifiers::Base) for identity (`is_a?`/`===`), so
|
|
8
|
+
# a consumer handed this module can deserialize and identity-check BSI ids
|
|
9
|
+
# through it.
|
|
5
10
|
module Identifier
|
|
11
|
+
extend Pubid::IdentifierFacade
|
|
12
|
+
|
|
6
13
|
def self.parse(string)
|
|
7
14
|
# Delegate to IEC for bare IEC identifiers
|
|
8
15
|
# This handles IEC-specific features like VAP suffixes (CSV, RLV, etc.)
|
|
@@ -15,10 +22,9 @@ module Pubid
|
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
parser = Parser.new
|
|
18
|
-
scheme = Scheme.new
|
|
19
25
|
|
|
20
26
|
parsed = parser.parse(string)
|
|
21
|
-
Builder.build(parsed
|
|
27
|
+
Builder.build(parsed)
|
|
22
28
|
rescue Parslet::ParseFailed => e
|
|
23
29
|
raise StandardError, "Failed to parse '#{string}': #{e.message}"
|
|
24
30
|
end
|
|
@@ -10,8 +10,8 @@ module Pubid
|
|
|
10
10
|
# "BS 1902-2.3:Addendum No. 1:1976"
|
|
11
11
|
# "BS 2000-0:Addendum 1:1983"
|
|
12
12
|
# "BS 6034:1981:Addendum No. 1:1986"
|
|
13
|
-
class AddendumDocument <
|
|
14
|
-
attribute :base_identifier,
|
|
13
|
+
class AddendumDocument < SingleIdentifier
|
|
14
|
+
attribute :base_identifier, ::Pubid::Identifier, polymorphic: true
|
|
15
15
|
attribute :addendum_number, :string
|
|
16
16
|
attribute :addendum_year, :integer
|
|
17
17
|
attribute :addendum_type, :string, default: -> {
|
|
@@ -22,37 +22,7 @@ module Pubid
|
|
|
22
22
|
} # Separator before Addendum (":" or " ")
|
|
23
23
|
|
|
24
24
|
def to_s(lang: :en, lang_single: false)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
# Determine separator - if separator is explicitly ":", use it
|
|
28
|
-
# Otherwise if base has year and doesn't already have double colon, use space
|
|
29
|
-
base_has_year = base_identifier.to_s =~ /:(\d{4})$/
|
|
30
|
-
|
|
31
|
-
sep = if separator == ":"
|
|
32
|
-
":"
|
|
33
|
-
elsif base_has_year && base_identifier.to_s !~ /:\d{4}:/
|
|
34
|
-
" "
|
|
35
|
-
else
|
|
36
|
-
separator
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Format: "BASE:Addendum No. N:YEAR" or "BASE Addendum No. N:YEAR" or "BASE:Addendum N:YEAR"
|
|
40
|
-
result += sep
|
|
41
|
-
result += "Addendum"
|
|
42
|
-
|
|
43
|
-
# Add space after "Addendum" if there's a type prefix (like "No.")
|
|
44
|
-
if addendum_type.empty?
|
|
45
|
-
# No type prefix, but still need space before number
|
|
46
|
-
else
|
|
47
|
-
result += " #{addendum_type}"
|
|
48
|
-
end
|
|
49
|
-
result += " "
|
|
50
|
-
result += " "
|
|
51
|
-
|
|
52
|
-
result += addendum_number.to_s
|
|
53
|
-
result += ":#{addendum_year}" if addendum_year
|
|
54
|
-
|
|
55
|
-
result
|
|
25
|
+
render(format: :human, lang: lang, lang_single: lang_single)
|
|
56
26
|
end
|
|
57
27
|
|
|
58
28
|
def publisher
|
|
@@ -7,7 +7,7 @@ module Pubid
|
|
|
7
7
|
# Example: "BS EN 10077-1:2006" where EN 10077-1:2006 is a CEN identifier object
|
|
8
8
|
# Example: "BS EN ISO 8601:2019" where EN ISO 8601:2019 is a CEN AdoptedEuropeanNorm wrapping ISO
|
|
9
9
|
class AdoptedEuropeanNorm < BritishStandard
|
|
10
|
-
attribute :adopted_identifier,
|
|
10
|
+
attribute :adopted_identifier, ::Pubid::Identifier, polymorphic: true # CEN object
|
|
11
11
|
attribute :edition, :string
|
|
12
12
|
attribute :translation_lang, :string
|
|
13
13
|
attribute :translation_upper, :string
|
|
@@ -16,53 +16,17 @@ module Pubid
|
|
|
16
16
|
attribute :expert_commentary, :boolean
|
|
17
17
|
attribute :expert_commentary_topic, :string
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
publisher
|
|
28
|
-
else
|
|
29
|
-
"BS"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
result = prefix
|
|
33
|
-
result += " #{adopted_identifier}" if adopted_identifier
|
|
34
|
-
result += " ED#{edition}" if edition
|
|
35
|
-
|
|
36
|
-
# Reaffirmation notation like (R2004)
|
|
37
|
-
result += " (R#{reaffirmation_year})" if reaffirmation_year
|
|
38
|
-
|
|
39
|
-
# Translation - preserve the "version" or "Translation" suffix if present
|
|
40
|
-
if translation_lang
|
|
41
|
-
result += if translation_suffix_type == "version"
|
|
42
|
-
" (#{translation_lang} version)"
|
|
43
|
-
elsif translation_suffix_type == "Translation"
|
|
44
|
-
" (#{translation_lang} Translation)"
|
|
45
|
-
else
|
|
46
|
-
" (#{translation_lang})"
|
|
47
|
-
end
|
|
48
|
-
elsif translation_upper
|
|
49
|
-
result += if translation_suffix_type == "Translation"
|
|
50
|
-
" (#{translation_upper} Translation)"
|
|
51
|
-
else
|
|
52
|
-
" (#{translation_upper})"
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# ExpertCommentary suffix
|
|
57
|
-
if expert_commentary
|
|
58
|
-
result += if expert_commentary_topic
|
|
59
|
-
" ExComm (#{expert_commentary_topic})"
|
|
60
|
-
else
|
|
61
|
-
" ExComm"
|
|
62
|
-
end
|
|
63
|
-
end
|
|
19
|
+
# Override self.type to return nil so this polymorphic wrapper is not
|
|
20
|
+
# registered as a base type. Inherits `:bs` from BritishStandard which
|
|
21
|
+
# would otherwise shadow it in Bsi.locate_type(:bs) auto-discovery.
|
|
22
|
+
# AdoptedEuropeanNorm is constructed explicitly by the builder, not
|
|
23
|
+
# selected by type-code lookup.
|
|
24
|
+
def self.type
|
|
25
|
+
nil
|
|
26
|
+
end
|
|
64
27
|
|
|
65
|
-
|
|
28
|
+
def to_s(lang: :en, lang_single: false)
|
|
29
|
+
render(format: :human, lang: lang, lang_single: lang_single)
|
|
66
30
|
end
|
|
67
31
|
|
|
68
32
|
# Delegate common methods to adopted identifier
|