pubid 2.0.0.pre.alpha.2 → 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 +25 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -39
- 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 -43
- 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 -51
- 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 -39
- 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/identifier.rb +0 -46
- 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/identifier.rb +0 -77
- 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 -62
- 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 +63 -66
- data/lib/pubid/ccsds/identifiers/base.rb +11 -61
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- 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 +7 -38
- 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 -57
- 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 +10 -11
- data/lib/pubid/components.rb +4 -1
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -59
- 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/identifier.rb +0 -43
- 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 +2 -17
- 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 -66
- 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 +46 -64
- data/lib/pubid/iec/components/code.rb +8 -32
- data/lib/pubid/iec/components/publisher.rb +0 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +251 -213
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -32
- 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 -26
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -22
- 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 -11
- 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 -19
- 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 +13 -12
- 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 +3 -3
- data/lib/pubid/iec/urn_parser.rb +3 -3
- 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 -41
- 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 -42
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +2 -2
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +55 -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 +218 -252
- 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 +22 -4
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +66 -182
- data/lib/pubid/iso/urn_parser.rb +12 -7
- 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 -104
- 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/identifier.rb +0 -43
- 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 -46
- 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 +63 -1871
- 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/supplement.rb +2 -2
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +11 -48
- data/lib/pubid/nist/identifiers/base.rb +110 -47
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -1
- 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 -8
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +15 -24
- 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 -2
- 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 +62 -452
- 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 +3 -1
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +82 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifier.rb +0 -50
- 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 +7 -41
- 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 +43 -1
- data/lib/pubid/renderers/directives_renderer.rb +22 -8
- data/lib/pubid/renderers/guide_renderer.rb +4 -2
- data/lib/pubid/renderers/human_readable.rb +18 -7
- data/lib/pubid/rendering/context.rb +28 -19
- 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/identifier.rb +0 -23
- 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 +75 -44
- 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/components/factory.rb +0 -50
- 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 -193
- 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 -219
|
@@ -6,6 +6,13 @@ module Pubid
|
|
|
6
6
|
# Base NIST/NBS identifier class
|
|
7
7
|
# Each series type inherits from this and overrides series_code
|
|
8
8
|
class Base < Pubid::Identifier
|
|
9
|
+
# Mark every NIST identifier as a member of the Pubid::Nist::Identifier
|
|
10
|
+
# facade module so `id.is_a?(Pubid::Nist::Identifier)` and
|
|
11
|
+
# `Pubid::Nist::Identifier === id` hold. The module carries only
|
|
12
|
+
# singleton methods (parse/from_hash), so this adds ancestry for the
|
|
13
|
+
# identity check without injecting any instance behavior.
|
|
14
|
+
include Pubid::Nist::Identifier
|
|
15
|
+
|
|
9
16
|
# Default: no typed stages. Subclasses override as needed.
|
|
10
17
|
def self.typed_stages
|
|
11
18
|
[]
|
|
@@ -15,7 +22,11 @@ module Pubid
|
|
|
15
22
|
#
|
|
16
23
|
# @return [String] URN representation
|
|
17
24
|
|
|
18
|
-
|
|
25
|
+
# Plain string ("NIST"/"NBS"), not a Components::Publisher wrapper: the
|
|
26
|
+
# value is a single token, so a string serializes flat
|
|
27
|
+
# (`publisher: NBS`, not `publisher: {publisher: NBS}`) and accepts the
|
|
28
|
+
# raw string the circular/supplement builders pass straight through.
|
|
29
|
+
attribute :publisher, :string
|
|
19
30
|
attribute :series, Components::Code # Set by Builder from parsed data
|
|
20
31
|
attribute :number, Components::Code
|
|
21
32
|
|
|
@@ -30,7 +41,13 @@ module Pubid
|
|
|
30
41
|
attribute :translation_component, Components::Translation
|
|
31
42
|
attribute :issue_number, Components::IssueNumber
|
|
32
43
|
attribute :parsed_format, :string # :mr, :short, :long, :abbrev
|
|
33
|
-
|
|
44
|
+
# Whether the publisher prefix (NIST/NBS) should be rendered. Defaults
|
|
45
|
+
# to true so the common publisher-bearing id need not serialize the
|
|
46
|
+
# flag at all — the Builder only assigns it (false) for prefix-less
|
|
47
|
+
# inputs, so `to_hash` carries `publisher_was_parsed: false` only in
|
|
48
|
+
# that case and omits it otherwise. (lutaml emits a boolean iff it was
|
|
49
|
+
# explicitly assigned; an omitted key loads as this default.)
|
|
50
|
+
attribute :publisher_was_parsed, :boolean, default: -> { true }
|
|
34
51
|
|
|
35
52
|
# LEGACY attributes (keep for backward compatibility during migration)
|
|
36
53
|
attribute :parts, Components::Code, collection: true
|
|
@@ -105,7 +122,7 @@ module Pubid
|
|
|
105
122
|
return false unless other.instance_of?(self.class)
|
|
106
123
|
|
|
107
124
|
self.class.attributes.each_key.all? do |name|
|
|
108
|
-
EQUALITY_IGNORED_ATTRS.include?(name) ||
|
|
125
|
+
EQUALITY_IGNORED_ATTRS.include?(name) || public_send(name) == other.public_send(name)
|
|
109
126
|
end
|
|
110
127
|
end
|
|
111
128
|
|
|
@@ -114,7 +131,7 @@ module Pubid
|
|
|
114
131
|
def hash
|
|
115
132
|
vals = self.class.attributes.each_key.reject do |name|
|
|
116
133
|
EQUALITY_IGNORED_ATTRS.include?(name)
|
|
117
|
-
end.map { |name|
|
|
134
|
+
end.map { |name| public_send(name) }
|
|
118
135
|
[self.class, *vals].hash
|
|
119
136
|
end
|
|
120
137
|
|
|
@@ -135,8 +152,9 @@ module Pubid
|
|
|
135
152
|
next true if EQUALITY_IGNORED_ATTRS.include?(name)
|
|
136
153
|
|
|
137
154
|
query_val = public_send(name)
|
|
138
|
-
next true if query_val.nil?
|
|
139
|
-
|
|
155
|
+
next true if query_val.nil?
|
|
156
|
+
next true if query_val.is_a?(String) && query_val.empty?
|
|
157
|
+
next true if query_val.is_a?(Array) && query_val.empty?
|
|
140
158
|
|
|
141
159
|
query_val == candidate.public_send(name)
|
|
142
160
|
end
|
|
@@ -153,7 +171,7 @@ module Pubid
|
|
|
153
171
|
excluded_args << :date if excluded_args.delete(:year)
|
|
154
172
|
|
|
155
173
|
attrs = self.class.attributes.each_with_object({}) do |(name, _), h|
|
|
156
|
-
h[name] = excluded_args.include?(name) ? nil :
|
|
174
|
+
h[name] = excluded_args.include?(name) ? nil : public_send(name)
|
|
157
175
|
end
|
|
158
176
|
self.class.new(**attrs)
|
|
159
177
|
end
|
|
@@ -166,7 +184,7 @@ module Pubid
|
|
|
166
184
|
def supplement_short
|
|
167
185
|
return "" unless supplement
|
|
168
186
|
|
|
169
|
-
prefix =
|
|
187
|
+
prefix = supplement.range? && !number ? " " : ""
|
|
170
188
|
rendered = supplement.to_s(:short)
|
|
171
189
|
prefix + (rendered.empty? ? "sup" : rendered)
|
|
172
190
|
end
|
|
@@ -194,6 +212,23 @@ module Pubid
|
|
|
194
212
|
translation_component
|
|
195
213
|
end
|
|
196
214
|
|
|
215
|
+
# Override parent render to pass NIST-specific format option through
|
|
216
|
+
# to the renderer. Pubid::Identifier#render only forwards
|
|
217
|
+
# :with_edition; NIST needs :nist_format for multi-format support.
|
|
218
|
+
def render(format: :human, **opts)
|
|
219
|
+
registry = self.class.format_registry
|
|
220
|
+
unless registry
|
|
221
|
+
raise ArgumentError, "No format registry configured on #{self.class}"
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
renderer = registry.renderer_for(format)
|
|
225
|
+
unless renderer
|
|
226
|
+
raise ArgumentError, "No renderer registered for format: #{format}"
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
renderer.new(self).render(**opts)
|
|
230
|
+
end
|
|
231
|
+
|
|
197
232
|
# Generate identifier string in specified format
|
|
198
233
|
# @param format [:full, :long, :abbreviated, :short, :mr] output format
|
|
199
234
|
def to_s(format = nil)
|
|
@@ -203,20 +238,7 @@ module Pubid
|
|
|
203
238
|
# Default to parsed_format if available (preserves input format on round-trip)
|
|
204
239
|
# Falls back to :short format for output (normalization)
|
|
205
240
|
# Explicit format parameter always overrides parsed_format
|
|
206
|
-
|
|
207
|
-
effective_format = effective_format.to_sym if effective_format.is_a?(String)
|
|
208
|
-
case effective_format
|
|
209
|
-
when :full, :long
|
|
210
|
-
to_full_style
|
|
211
|
-
when :abbreviated, :abbrev
|
|
212
|
-
to_abbreviated_style
|
|
213
|
-
when :short
|
|
214
|
-
to_short_style
|
|
215
|
-
when :mr
|
|
216
|
-
to_mr_style
|
|
217
|
-
else
|
|
218
|
-
to_short_style
|
|
219
|
-
end
|
|
241
|
+
render(format: :human, nist_format: format || parsed_format&.to_sym || :short)
|
|
220
242
|
end
|
|
221
243
|
|
|
222
244
|
# Returns weight based on amount of defined attributes
|
|
@@ -285,7 +307,7 @@ module Pubid
|
|
|
285
307
|
match ? match[1].to_i : nil
|
|
286
308
|
end
|
|
287
309
|
|
|
288
|
-
|
|
310
|
+
public
|
|
289
311
|
|
|
290
312
|
def to_full_style
|
|
291
313
|
# "National Institute of Standards and Technology Special Publication 800-27, Revision A"
|
|
@@ -387,15 +409,37 @@ module Pubid
|
|
|
387
409
|
result += " #{number}" if number
|
|
388
410
|
result += parts.map { |p| "-#{p}" }.join if parts&.any?
|
|
389
411
|
|
|
390
|
-
#
|
|
391
|
-
|
|
412
|
+
# Append every optional component the parser may have attached
|
|
413
|
+
# (volume, part, edition, version, supplement, update, stage, ...).
|
|
414
|
+
# Shared with the lossy subclasses so they cannot silently drop a
|
|
415
|
+
# distinguishing component and collide with another document.
|
|
416
|
+
result += append_short_components
|
|
417
|
+
|
|
418
|
+
result
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
# Render the optional component "tail" that follows
|
|
422
|
+
# publisher/series/number in short (human) form. Extracted from
|
|
423
|
+
# #to_short_style so subclasses that build a series-specific prefix can
|
|
424
|
+
# reuse it instead of hand-listing components (and forgetting some).
|
|
425
|
+
#
|
|
426
|
+
# skip_part: true lets a series that renders its part differently
|
|
427
|
+
# (e.g. FIPS uses dash "-1", not "pt1") emit the part itself and skip
|
|
428
|
+
# the generic part rendering here, while still getting volume/edition/
|
|
429
|
+
# supplement/etc.
|
|
430
|
+
def append_short_components(skip_part: false)
|
|
431
|
+
result = ""
|
|
432
|
+
effective_part = skip_part ? nil : part
|
|
433
|
+
|
|
434
|
+
# Volume and Part components (v6n1 notation for CSM, pt1 for SP)
|
|
435
|
+
if volume.is_a?(Components::Volume) && effective_part.is_a?(Components::Part)
|
|
392
436
|
# CSM series: v#n# notation
|
|
393
|
-
result += " #{volume}#{
|
|
394
|
-
elsif
|
|
437
|
+
result += " #{volume}#{effective_part}"
|
|
438
|
+
elsif effective_part.is_a?(Components::Part)
|
|
395
439
|
# SP and other series: use Part.type to determine format
|
|
396
|
-
result +=
|
|
440
|
+
result += effective_part.to_s
|
|
397
441
|
# Legacy: Render standalone volume (not part of v#n#)
|
|
398
|
-
elsif volume && !issue_number && !
|
|
442
|
+
elsif volume && !issue_number && !effective_part
|
|
399
443
|
vol_str = volume.is_a?(Components::Volume) ? volume.to_s : "v#{volume}"
|
|
400
444
|
result += vol_str
|
|
401
445
|
elsif volume && issue_number
|
|
@@ -404,7 +448,7 @@ module Pubid
|
|
|
404
448
|
result += "#{vol_str}n#{issue_number.number}"
|
|
405
449
|
end
|
|
406
450
|
|
|
407
|
-
#
|
|
451
|
+
# Use edition component properly (e2, e2021, r5, -3)
|
|
408
452
|
# NO space before edition when number present (per NIST spec)
|
|
409
453
|
# Only add space for bare edition (no number case) or if original_prefix has specific format
|
|
410
454
|
if edition
|
|
@@ -420,7 +464,7 @@ module Pubid
|
|
|
420
464
|
end
|
|
421
465
|
end
|
|
422
466
|
|
|
423
|
-
#
|
|
467
|
+
# Use version_component if available, else use version string.
|
|
424
468
|
# Attach directly (no leading space) to match edition rendering
|
|
425
469
|
# (e.g. "800-53r5"), so version reads "800-45ver2" not
|
|
426
470
|
# "800-45 ver2".
|
|
@@ -449,7 +493,7 @@ module Pubid
|
|
|
449
493
|
result += " Add."
|
|
450
494
|
end
|
|
451
495
|
|
|
452
|
-
#
|
|
496
|
+
# Use update_component if available, else use update string
|
|
453
497
|
if update_component
|
|
454
498
|
result += update_component.to_s(:short)
|
|
455
499
|
elsif update
|
|
@@ -463,12 +507,12 @@ module Pubid
|
|
|
463
507
|
result += "-draft"
|
|
464
508
|
end
|
|
465
509
|
|
|
466
|
-
#
|
|
510
|
+
# Add stage component (at end, before translation)
|
|
467
511
|
if stage
|
|
468
512
|
result += " #{stage.to_s(:short)}"
|
|
469
513
|
end
|
|
470
514
|
|
|
471
|
-
#
|
|
515
|
+
# Use translation_component if available, else use translation string
|
|
472
516
|
# Note: translation_component.to_s already includes the space prefix
|
|
473
517
|
if translation_component
|
|
474
518
|
result += translation_component.to_s(:short)
|
|
@@ -495,25 +539,44 @@ module Pubid
|
|
|
495
539
|
result += ".#{number}" if number
|
|
496
540
|
result += parts.map { |p| "-#{p}" }.join if parts&.any?
|
|
497
541
|
|
|
498
|
-
|
|
499
|
-
result += part.to_s if part.is_a?(Components::Part)
|
|
542
|
+
result += append_mr_components
|
|
500
543
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
544
|
+
result
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
# Render the optional component tail for machine-readable (MR) form.
|
|
548
|
+
# Mirrors #append_short_components so the MR output is just as lossless;
|
|
549
|
+
# subclasses that override #to_mr_style reuse this instead of
|
|
550
|
+
# hand-listing components. skip_part: behaves as in the short helper.
|
|
551
|
+
def append_mr_components(skip_part: false)
|
|
552
|
+
result = ""
|
|
553
|
+
effective_part = skip_part ? nil : part
|
|
554
|
+
|
|
555
|
+
# Volume / Part components (pt1, v6n1, etc.)
|
|
556
|
+
if volume.is_a?(Components::Volume) && effective_part.is_a?(Components::Part)
|
|
557
|
+
result += "#{volume}#{effective_part}"
|
|
558
|
+
elsif effective_part.is_a?(Components::Part)
|
|
559
|
+
result += effective_part.to_s
|
|
560
|
+
elsif volume && !issue_number && !effective_part
|
|
561
|
+
result += (volume.is_a?(Components::Volume) ? volume.to_s : "v#{volume}")
|
|
562
|
+
elsif volume && issue_number
|
|
563
|
+
vol_str = volume.is_a?(Components::Volume) ? volume.to_s : "v#{volume}"
|
|
564
|
+
result += "#{vol_str}n#{issue_number.number}"
|
|
508
565
|
end
|
|
509
566
|
|
|
510
|
-
#
|
|
567
|
+
# Use edition component - NO space before edition in MR format (per NIST spec)
|
|
568
|
+
result += edition.to_s if edition
|
|
569
|
+
|
|
570
|
+
# Use version_component
|
|
511
571
|
result += version_component.to_s(:mr) if version_component
|
|
512
572
|
|
|
513
|
-
#
|
|
573
|
+
# Supplement (e.g. ".9981sup7") - keep distinct documents distinct
|
|
574
|
+
result += supplement_short
|
|
575
|
+
|
|
576
|
+
# Use update_component
|
|
514
577
|
result += update_component.to_s(:mr) if update_component
|
|
515
578
|
|
|
516
|
-
#
|
|
579
|
+
# Use stage
|
|
517
580
|
result += ".#{stage.to_s(:mr)}" if stage
|
|
518
581
|
|
|
519
582
|
# Add addendum - render as ".Add." suffix in MR format
|
|
@@ -521,7 +584,7 @@ module Pubid
|
|
|
521
584
|
result += ".Add."
|
|
522
585
|
end
|
|
523
586
|
|
|
524
|
-
#
|
|
587
|
+
# Use translation_component
|
|
525
588
|
result += translation_component.to_s(:mr) if translation_component
|
|
526
589
|
|
|
527
590
|
result
|
|
@@ -22,7 +22,8 @@ module Pubid
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def type
|
|
25
|
-
{ key: :circ,
|
|
25
|
+
{ key: :circ,
|
|
26
|
+
web: :circular, title: "NBS Circular", short: "CIRC" }
|
|
26
27
|
end
|
|
27
28
|
end
|
|
28
29
|
|
|
@@ -41,8 +42,12 @@ module Pubid
|
|
|
41
42
|
super&.to_s || default_publisher
|
|
42
43
|
end
|
|
43
44
|
|
|
45
|
+
# Return the stored Code, or a default Code built from series_code when
|
|
46
|
+
# unset. Must return Components::Code (not a String): the lutaml-model
|
|
47
|
+
# key-value serializer reads attributes through this public getter, so a
|
|
48
|
+
# String here breaks to_hash for the Code-typed :series attribute.
|
|
44
49
|
def series
|
|
45
|
-
super
|
|
50
|
+
super || Components::Code.new(value: series_code)
|
|
46
51
|
end
|
|
47
52
|
|
|
48
53
|
# Override to_s for CIRC-specific edition+year rendering
|
|
@@ -21,7 +21,8 @@ module Pubid
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def type
|
|
24
|
-
{ key: :cse,
|
|
24
|
+
{ key: :cse,
|
|
25
|
+
web: :commercial_standard_emergency, title: "NBS Commercial Standard Emergency",
|
|
25
26
|
short: "CS-E" }
|
|
26
27
|
end
|
|
27
28
|
end
|
|
@@ -30,7 +31,7 @@ module Pubid
|
|
|
30
31
|
"CS-E"
|
|
31
32
|
end
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
public
|
|
34
35
|
|
|
35
36
|
def to_short_style
|
|
36
37
|
result = ""
|
|
@@ -45,8 +46,9 @@ module Pubid
|
|
|
45
46
|
# Number (already extracted from e104 → 104 in builder)
|
|
46
47
|
result += " #{number.value}" if number
|
|
47
48
|
|
|
48
|
-
# Edition (e1943 for e104-43 pattern)
|
|
49
|
-
|
|
49
|
+
# Edition (e1943 for e104-43 pattern) plus any other component the
|
|
50
|
+
# parser attached (volume, supplement, version, ...).
|
|
51
|
+
result += append_short_components
|
|
50
52
|
|
|
51
53
|
result
|
|
52
54
|
end
|
|
@@ -21,7 +21,8 @@ module Pubid
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def type
|
|
24
|
-
{ key: :csm,
|
|
24
|
+
{ key: :csm,
|
|
25
|
+
web: :commercial_standards_monthly, title: "Commercial Standards Monthly", short: "CSM" }
|
|
25
26
|
end
|
|
26
27
|
end
|
|
27
28
|
|
|
@@ -29,11 +30,17 @@ module Pubid
|
|
|
29
30
|
"NBS"
|
|
30
31
|
end
|
|
31
32
|
|
|
33
|
+
# Always the normalized "CSM" code, regardless of the parsed series
|
|
34
|
+
# (CS vNnN variants are routed here and stored with series "CS", but
|
|
35
|
+
# must still render/serialize as CSM). Returns a Components::Code (not a
|
|
36
|
+
# bare String): the lutaml-model key-value serializer reads attributes
|
|
37
|
+
# through this public getter, so a String breaks to_hash for the
|
|
38
|
+
# Code-typed :series attribute.
|
|
32
39
|
def series
|
|
33
|
-
"CSM"
|
|
40
|
+
Components::Code.new(value: "CSM")
|
|
34
41
|
end
|
|
35
42
|
|
|
36
|
-
def to_s
|
|
43
|
+
def to_s(format = nil)
|
|
37
44
|
result = "#{publisher} #{series}"
|
|
38
45
|
|
|
39
46
|
# Proper Volume and Part components
|
|
@@ -24,7 +24,8 @@ module Pubid
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def type
|
|
27
|
-
{ key: :crpl,
|
|
27
|
+
{ key: :crpl,
|
|
28
|
+
web: :crpl_report, title: "NBS CRPL Report", short: "CRPL" }
|
|
28
29
|
end
|
|
29
30
|
end
|
|
30
31
|
|
|
@@ -83,10 +84,10 @@ module Pubid
|
|
|
83
84
|
end
|
|
84
85
|
|
|
85
86
|
# Return new Code object with normalized value
|
|
86
|
-
Components::Code.new(
|
|
87
|
+
Components::Code.new(value: num_value)
|
|
87
88
|
end
|
|
88
89
|
|
|
89
|
-
def to_s
|
|
90
|
+
def to_s(format = nil)
|
|
90
91
|
# Use actual series attribute if it contains subseries (e.g., "CRPL-F-B")
|
|
91
92
|
# Otherwise use default series_code ("CRPL")
|
|
92
93
|
series_to_render = if series&.value&.include?("CRPL-F-")
|
|
@@ -117,11 +118,10 @@ module Pubid
|
|
|
117
118
|
result += " #{num_value}"
|
|
118
119
|
end
|
|
119
120
|
|
|
120
|
-
#
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
result += supplement_short
|
|
121
|
+
# Append the shared component tail (part, supplement, edition,
|
|
122
|
+
# index, section, ...) so distinct CRPL reports do not collide.
|
|
123
|
+
# range_notation is CRPL-specific and always trails the identifier.
|
|
124
|
+
result += append_short_components
|
|
125
125
|
|
|
126
126
|
result += range_notation if range_notation
|
|
127
127
|
result
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Nist
|
|
5
|
+
module Identifiers
|
|
6
|
+
# NIST date-style identifier with no series.
|
|
7
|
+
# Examples:
|
|
8
|
+
# - "NIST 2022-04-15 001" (short) / "NIST.2022-04-15.001" (mr/doi)
|
|
9
|
+
# DOI 10.6028/NIST.2022-04-15.001
|
|
10
|
+
class DatedDocument < Base
|
|
11
|
+
# Empty so the bare "NIST" abbr never shadows a series lookup; the
|
|
12
|
+
# Router guard (parsed_hash[:dated_date] && :dated_seq) is the dispatch path.
|
|
13
|
+
TYPED_STAGES = [].freeze
|
|
14
|
+
|
|
15
|
+
attribute :date_year, :string
|
|
16
|
+
attribute :date_month, :string
|
|
17
|
+
attribute :date_day, :string
|
|
18
|
+
attribute :dated_seq, :string
|
|
19
|
+
|
|
20
|
+
class << self
|
|
21
|
+
def typed_stages
|
|
22
|
+
TYPED_STAGES
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def type
|
|
26
|
+
{ key: :dated, title: "NIST Dated Document" }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_short_style
|
|
31
|
+
"#{publisher || 'NIST'} #{date_year}-#{date_month}-#{date_day} #{dated_seq}"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def to_mr_style
|
|
35
|
+
"#{publisher || 'NIST'}.#{date_year}-#{date_month}-#{date_day}.#{dated_seq}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# No series/number to expand; non-default formats fall back to short.
|
|
39
|
+
def to_full_style
|
|
40
|
+
to_short_style
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def to_abbreviated_style
|
|
44
|
+
to_short_style
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -22,7 +22,8 @@ module Pubid
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def type
|
|
25
|
-
{ key: :fips,
|
|
25
|
+
{ key: :fips,
|
|
26
|
+
web: :federal_information_processing_standards, title: "Federal Information Processing Standards",
|
|
26
27
|
short: "FIPS" }
|
|
27
28
|
end
|
|
28
29
|
end
|
|
@@ -41,21 +42,20 @@ module Pubid
|
|
|
41
42
|
# "FIPS.46e1977" (machine-readable with dots, no publisher prefix)
|
|
42
43
|
# Note: edition is appended directly to number without dot for FIPS
|
|
43
44
|
result = series_code
|
|
45
|
+
result += ".#{number}" if number
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
result += edition.to_s
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
47
|
+
# FIPS uses dash notation for parts; render here and skip the generic
|
|
48
|
+
# part rendering in the shared tail (which appends volume, edition,
|
|
49
|
+
# supplement, version, update, etc.).
|
|
50
|
+
result += "-#{part.value}" if part.is_a?(Components::Part)
|
|
53
51
|
result += parts.map { |p| "-#{p}" }.join if parts&.any?
|
|
54
52
|
|
|
53
|
+
result += append_mr_components(skip_part: true)
|
|
54
|
+
|
|
55
55
|
result
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
public
|
|
59
59
|
|
|
60
60
|
def to_short_style
|
|
61
61
|
# FIPS format: "FIPS 14e1971" or "NIST FIPS 140-3" (preserve publisher if set)
|
|
@@ -77,24 +77,15 @@ module Pubid
|
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
-
# FIPS uses dash notation for parts: -1, -2, -3 (not pt1, pt2, pt3)
|
|
80
|
+
# FIPS uses dash notation for parts: -1, -2, -3 (not pt1, pt2, pt3),
|
|
81
|
+
# so render the part here and skip the generic part rendering in the
|
|
82
|
+
# shared tail. The tail still appends volume, edition, version,
|
|
83
|
+
# supplement, update, etc. — components FIPS previously dropped.
|
|
81
84
|
if part.is_a?(Components::Part)
|
|
82
85
|
result += "-#{part.value}"
|
|
83
86
|
end
|
|
84
|
-
# Render edition for FIPS
|
|
85
|
-
# FIPS editions use "e" prefix: e1971, e198503, e19770930
|
|
86
|
-
if edition
|
|
87
|
-
result += "#{edition.type}#{edition.id}"
|
|
88
|
-
end
|
|
89
87
|
|
|
90
|
-
|
|
91
|
-
# to_short_style entirely, so update (e.g. /Upd2) would otherwise
|
|
92
|
-
# be dropped.
|
|
93
|
-
if update_component
|
|
94
|
-
result += update_component.to_s(:short)
|
|
95
|
-
elsif update
|
|
96
|
-
result += "-upd#{update}"
|
|
97
|
-
end
|
|
88
|
+
result += append_short_components(skip_part: true)
|
|
98
89
|
|
|
99
90
|
result
|
|
100
91
|
end
|
|
@@ -23,7 +23,8 @@ module Pubid
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def type
|
|
26
|
-
{ key: :mp,
|
|
26
|
+
{ key: :mp,
|
|
27
|
+
web: :miscellaneous_publication, title: "Miscellaneous Publication", short: "MP" }
|
|
27
28
|
end
|
|
28
29
|
end
|
|
29
30
|
|
|
@@ -44,19 +45,19 @@ module Pubid
|
|
|
44
45
|
end
|
|
45
46
|
end
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
public
|
|
48
49
|
|
|
49
50
|
def to_short_style
|
|
50
51
|
result = "#{default_publisher} #{series_code}"
|
|
51
52
|
result += " #{number.value}" if number
|
|
52
|
-
result +=
|
|
53
|
+
result += append_short_components
|
|
53
54
|
result
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
def to_mr_style
|
|
57
58
|
result = "#{default_publisher}.#{series_code}"
|
|
58
59
|
result += ".#{number.value}" if number
|
|
59
|
-
result +=
|
|
60
|
+
result += append_mr_components
|
|
60
61
|
result
|
|
61
62
|
end
|
|
62
63
|
end
|
|
@@ -25,7 +25,8 @@ module Pubid
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def type
|
|
28
|
-
{ key: :mono,
|
|
28
|
+
{ key: :mono,
|
|
29
|
+
web: :monograph, title: "Monograph", short: "MONO" }
|
|
29
30
|
end
|
|
30
31
|
end
|
|
31
32
|
|
|
@@ -59,8 +60,11 @@ module Pubid
|
|
|
59
60
|
result = (publisher || default_publisher).to_s
|
|
60
61
|
result += ".MN" # MR format uses MN per spec
|
|
61
62
|
result += ".#{number}" if number
|
|
62
|
-
#
|
|
63
|
-
|
|
63
|
+
# Append the shared component tail (part, volume, supplement,
|
|
64
|
+
# edition, ...) so distinct monographs do not collide. Letter-suffix
|
|
65
|
+
# variants (e.g. "1-1F") carry the letter inside the compound number
|
|
66
|
+
# and have no separate Part component, so this does not double them.
|
|
67
|
+
result += append_mr_components
|
|
64
68
|
result
|
|
65
69
|
end
|
|
66
70
|
end
|