pubid 2.0.0.alpha.10 → 2.0.0.pre.alpha.1
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 +51 -54
- data/data/iec/update_codes.yaml +0 -3
- data/data/ieee/update_codes.yaml +1 -107
- data/data/nist/update_codes.yaml +0 -35
- data/lib/pubid/amca/builder.rb +6 -6
- data/lib/pubid/amca/identifier.rb +16 -2
- data/lib/pubid/amca/identifiers/base.rb +46 -74
- data/lib/pubid/amca/identifiers/interpretation.rb +30 -17
- data/lib/pubid/amca/identifiers/publication.rb +27 -14
- data/lib/pubid/amca/identifiers/standard.rb +5 -3
- data/lib/pubid/amca/identifiers.rb +1 -0
- data/lib/pubid/amca/parser.rb +1 -1
- data/lib/pubid/amca/scheme.rb +16 -0
- data/lib/pubid/amca/single_identifier.rb +24 -1
- data/lib/pubid/amca/urn_generator.rb +3 -4
- data/lib/pubid/amca.rb +3 -50
- data/lib/pubid/ansi/builder.rb +5 -7
- data/lib/pubid/ansi/identifier.rb +1 -19
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +1 -2
- data/lib/pubid/ansi/identifiers/standard.rb +3 -2
- data/lib/pubid/ansi/parser.rb +1 -1
- data/lib/pubid/ansi/scheme.rb +15 -0
- data/lib/pubid/ansi/single_identifier.rb +31 -2
- data/lib/pubid/ansi/urn_generator.rb +38 -3
- data/lib/pubid/ansi.rb +6 -47
- data/lib/pubid/api/builder.rb +72 -45
- data/lib/pubid/api/identifier.rb +9 -30
- data/lib/pubid/api/identifiers/base.rb +14 -2
- data/lib/pubid/api/identifiers/bulletin.rb +2 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +2 -0
- data/lib/pubid/api/identifiers/mpms.rb +28 -10
- data/lib/pubid/api/identifiers/publication.rb +2 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +2 -0
- data/lib/pubid/api/identifiers/specification.rb +2 -0
- data/lib/pubid/api/identifiers/standard.rb +2 -0
- data/lib/pubid/api/identifiers/technical_report.rb +2 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +16 -0
- data/lib/pubid/api/parser.rb +1 -1
- data/lib/pubid/api/scheme.rb +66 -0
- data/lib/pubid/api/single_identifier.rb +32 -10
- data/lib/pubid/api/urn_generator.rb +18 -0
- data/lib/pubid/api.rb +5 -56
- data/lib/pubid/ashrae/builder.rb +35 -56
- data/lib/pubid/ashrae/identifier.rb +16 -6
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +11 -7
- data/lib/pubid/ashrae/identifiers/addendum.rb +20 -9
- data/lib/pubid/ashrae/identifiers/base.rb +15 -111
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +16 -8
- data/lib/pubid/ashrae/identifiers/errata.rb +10 -9
- data/lib/pubid/ashrae/identifiers/guideline.rb +0 -3
- data/lib/pubid/ashrae/identifiers/interpretation.rb +10 -16
- data/lib/pubid/ashrae/identifiers/standard.rb +0 -3
- data/lib/pubid/ashrae/identifiers.rb +1 -0
- data/lib/pubid/ashrae/parser.rb +16 -40
- data/lib/pubid/ashrae/scheme.rb +53 -0
- data/lib/pubid/ashrae/single_identifier.rb +14 -1
- data/lib/pubid/ashrae/supplement_identifier.rb +6 -21
- data/lib/pubid/ashrae/urn_generator.rb +10 -8
- data/lib/pubid/ashrae.rb +2 -58
- data/lib/pubid/asme/builder.rb +2 -11
- data/lib/pubid/asme/components/code.rb +2 -10
- data/lib/pubid/asme/identifier.rb +0 -9
- data/lib/pubid/asme/identifiers/base.rb +60 -0
- data/lib/pubid/asme/identifiers/standard.rb +2 -86
- data/lib/pubid/asme/parser.rb +1 -1
- data/lib/pubid/asme/scheme.rb +37 -0
- data/lib/pubid/asme/single_identifier.rb +2 -11
- data/lib/pubid/asme/urn_generator.rb +2 -2
- data/lib/pubid/asme.rb +1 -47
- data/lib/pubid/astm/builder.rb +3 -10
- data/lib/pubid/astm/components/code.rb +0 -9
- data/lib/pubid/astm/identifier.rb +0 -9
- data/lib/pubid/astm/identifiers/adjunct.rb +9 -16
- data/lib/pubid/astm/identifiers/data_series.rb +14 -2
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +34 -25
- data/lib/pubid/astm/identifiers/manual.rb +25 -8
- data/lib/pubid/astm/identifiers/monograph.rb +14 -2
- data/lib/pubid/astm/identifiers/research_report.rb +5 -8
- data/lib/pubid/astm/identifiers/standard.rb +37 -8
- data/lib/pubid/astm/identifiers/technical_report.rb +13 -2
- data/lib/pubid/astm/identifiers/work_in_progress.rb +10 -1
- data/lib/pubid/astm/parser.rb +1 -1
- data/lib/pubid/astm/scheme.rb +55 -0
- data/lib/pubid/astm/single_identifier.rb +10 -32
- data/lib/pubid/astm/urn_generator.rb +5 -7
- data/lib/pubid/astm.rb +27 -44
- data/lib/pubid/bsi/builder.rb +107 -119
- data/lib/pubid/bsi/identifier.rb +25 -4
- data/lib/pubid/bsi/identifiers/addendum_document.rb +37 -3
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +47 -19
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +39 -8
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +55 -2
- data/lib/pubid/bsi/identifiers/amendment.rb +22 -30
- data/lib/pubid/bsi/identifiers/base.rb +11 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +7 -1
- data/lib/pubid/bsi/identifiers/british_standard.rb +1 -2
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +87 -13
- data/lib/pubid/bsi/identifiers/committee_document.rb +17 -10
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +87 -19
- data/lib/pubid/bsi/identifiers/corrigendum.rb +10 -26
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +36 -0
- data/lib/pubid/bsi/identifiers/disc.rb +29 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +46 -2
- data/lib/pubid/bsi/identifiers/electronic_book.rb +38 -2
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +21 -10
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +47 -0
- data/lib/pubid/bsi/identifiers/flex.rb +34 -3
- data/lib/pubid/bsi/identifiers/handbook.rb +17 -1
- data/lib/pubid/bsi/identifiers/index.rb +32 -0
- data/lib/pubid/bsi/identifiers/method.rb +41 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +29 -4
- data/lib/pubid/bsi/identifiers/practice_guide.rb +7 -1
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +54 -2
- data/lib/pubid/bsi/identifiers/published_document.rb +54 -2
- data/lib/pubid/bsi/identifiers/section.rb +30 -0
- data/lib/pubid/bsi/identifiers/set.rb +20 -14
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -10
- data/lib/pubid/bsi/identifiers/supplement_document.rb +25 -3
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +46 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +47 -2
- data/lib/pubid/bsi/identifiers/test_method.rb +32 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +22 -7
- data/lib/pubid/bsi/identifiers.rb +1 -0
- data/lib/pubid/bsi/parser.rb +6 -20
- data/lib/pubid/bsi/scheme.rb +243 -0
- data/lib/pubid/bsi/single_identifier.rb +82 -94
- data/lib/pubid/bsi/urn_generator.rb +5 -13
- data/lib/pubid/bsi.rb +2 -252
- data/lib/pubid/builder/base.rb +13 -62
- data/lib/pubid/bundled_identifier.rb +10 -18
- data/lib/pubid/ccsds/builder.rb +4 -5
- data/lib/pubid/ccsds/identifier.rb +3 -63
- data/lib/pubid/ccsds/identifiers/base.rb +51 -14
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +8 -9
- data/lib/pubid/ccsds/parser.rb +3 -5
- data/lib/pubid/ccsds/scheme.rb +57 -0
- data/lib/pubid/ccsds/single_identifier.rb +3 -6
- data/lib/pubid/ccsds/supplement_identifier.rb +13 -17
- data/lib/pubid/ccsds/urn_generator.rb +6 -6
- data/lib/pubid/ccsds.rb +1 -44
- data/lib/pubid/cen_cenelec/builder.rb +29 -61
- data/lib/pubid/cen_cenelec/identifier.rb +5 -28
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +4 -9
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +12 -2
- data/lib/pubid/cen_cenelec/identifiers/base.rb +46 -5
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +27 -6
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +17 -2
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +4 -62
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +7 -20
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +6 -2
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -2
- data/lib/pubid/cen_cenelec/parser.rb +1 -1
- data/lib/pubid/cen_cenelec/scheme.rb +164 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +91 -10
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +7 -6
- data/lib/pubid/cen_cenelec/urn_generator.rb +7 -7
- data/lib/pubid/cen_cenelec.rb +1 -188
- data/lib/pubid/cie/builder.rb +24 -149
- data/lib/pubid/cie/components/code.rb +72 -0
- data/lib/pubid/cie/identifier.rb +5 -20
- data/lib/pubid/cie/identifiers/bundle.rb +5 -35
- data/lib/pubid/cie/identifiers/conference.rb +6 -11
- data/lib/pubid/cie/identifiers/corrigendum.rb +23 -17
- 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/standard.rb +8 -43
- data/lib/pubid/cie/identifiers/supplement.rb +25 -27
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +3 -7
- data/lib/pubid/cie/identifiers.rb +0 -2
- data/lib/pubid/cie/parser.rb +6 -55
- data/lib/pubid/cie/scheme.rb +64 -0
- data/lib/pubid/cie/single_identifier.rb +5 -44
- data/lib/pubid/cie/supplement_identifier.rb +16 -29
- data/lib/pubid/cie/urn_generator.rb +8 -11
- data/lib/pubid/cie.rb +2 -57
- data/lib/pubid/components/code.rb +8 -22
- data/lib/pubid/components/date.rb +18 -41
- data/lib/pubid/components/edition.rb +6 -9
- data/lib/pubid/components/language.rb +4 -6
- data/lib/pubid/components/locality.rb +1 -10
- data/lib/pubid/components/publisher.rb +6 -9
- data/lib/pubid/components/stage.rb +14 -5
- data/lib/pubid/components/type.rb +15 -5
- data/lib/pubid/components/typed_stage.rb +8 -11
- data/lib/pubid/components.rb +0 -4
- data/lib/pubid/core/update_codes.rb +7 -28
- data/lib/pubid/csa/builder.rb +48 -48
- data/lib/pubid/csa/composite_identifier.rb +7 -18
- data/lib/pubid/csa/identifier.rb +78 -191
- data/lib/pubid/csa/identifiers/base.rb +123 -0
- data/lib/pubid/csa/identifiers/bundled.rb +9 -25
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
- data/lib/pubid/csa/identifiers/cec.rb +103 -40
- data/lib/pubid/csa/identifiers/combined.rb +69 -97
- data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
- data/lib/pubid/csa/identifiers/package.rb +4 -4
- data/lib/pubid/csa/identifiers/series.rb +104 -0
- data/lib/pubid/csa/parser.rb +8 -12
- data/lib/pubid/csa/scheme.rb +44 -0
- data/lib/pubid/csa/single_identifier.rb +5 -94
- data/lib/pubid/csa/urn_generator.rb +2 -9
- data/lib/pubid/csa/wrapper_identifier.rb +10 -43
- data/lib/pubid/csa.rb +1 -56
- data/lib/pubid/etsi/builder.rb +4 -13
- data/lib/pubid/etsi/components/code.rb +9 -10
- data/lib/pubid/etsi/components/version.rb +5 -0
- data/lib/pubid/etsi/identifier.rb +12 -2
- data/lib/pubid/etsi/identifiers/base.rb +24 -60
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +4 -207
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +14 -46
- data/lib/pubid/etsi/identifiers.rb +1 -0
- data/lib/pubid/etsi/parser.rb +3 -9
- data/lib/pubid/etsi/scheme.rb +42 -0
- data/lib/pubid/etsi.rb +2 -52
- data/lib/pubid/export/data_class_exporter.rb +59 -0
- data/lib/pubid/export/exporter.rb +47 -6
- data/lib/pubid/export/flavor_exporter.rb +276 -124
- data/lib/pubid/export/ieee_exporter.rb +78 -0
- data/lib/pubid/export/itu_exporter.rb +66 -0
- data/lib/pubid/export/nist_exporter.rb +64 -0
- data/lib/pubid/export/registry_exporter.rb +90 -0
- data/lib/pubid/export/scheme_exporter.rb +70 -0
- data/lib/pubid/export.rb +6 -0
- data/lib/pubid/identifier.rb +37 -920
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/identifier_registry.rb +198 -0
- data/lib/pubid/idf/builder.rb +7 -7
- data/lib/pubid/idf/identifier.rb +13 -23
- data/lib/pubid/idf/identifiers/amendment.rb +1 -2
- data/lib/pubid/idf/identifiers/corrigendum.rb +1 -2
- data/lib/pubid/idf/identifiers/international_standard.rb +1 -2
- data/lib/pubid/idf/identifiers/reviewed_method.rb +1 -2
- data/lib/pubid/idf/parser.rb +5 -6
- data/lib/pubid/idf/scheme.rb +61 -0
- data/lib/pubid/idf/supplement_identifier.rb +13 -5
- data/lib/pubid/idf/urn_generator.rb +39 -4
- data/lib/pubid/idf.rb +1 -65
- data/lib/pubid/iec/builder.rb +91 -92
- data/lib/pubid/iec/components/code.rb +32 -9
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/identifier.rb +8 -328
- data/lib/pubid/iec/identifiers/amendment.rb +5 -8
- data/lib/pubid/iec/identifiers/base.rb +31 -7
- data/lib/pubid/iec/identifiers/component_specification.rb +13 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +12 -1
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +30 -29
- data/lib/pubid/iec/identifiers/corrigendum.rb +5 -4
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +36 -43
- data/lib/pubid/iec/identifiers/guide.rb +18 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +9 -24
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +3 -2
- data/lib/pubid/iec/identifiers/operational_document.rb +13 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +15 -2
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +24 -26
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +13 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +13 -2
- data/lib/pubid/iec/identifiers/technical_report.rb +21 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +21 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +12 -1
- data/lib/pubid/iec/identifiers/test_report_form.rb +46 -3
- data/lib/pubid/iec/identifiers/vap_identifier.rb +34 -33
- data/lib/pubid/iec/identifiers/white_paper.rb +13 -3
- data/lib/pubid/iec/identifiers/working_document.rb +60 -26
- data/lib/pubid/iec/parser.rb +42 -73
- data/lib/pubid/iec/scheme.rb +71 -0
- data/lib/pubid/iec/single_identifier.rb +23 -15
- data/lib/pubid/iec/supplement_identifier.rb +67 -84
- data/lib/pubid/iec/urn_generator.rb +143 -195
- data/lib/pubid/iec/urn_parser.rb +246 -85
- data/lib/pubid/iec.rb +66 -45
- data/lib/pubid/ieee/aiee/builder.rb +3 -17
- data/lib/pubid/ieee/aiee/identifier.rb +62 -46
- data/lib/pubid/ieee/aiee/parser.rb +1 -1
- data/lib/pubid/ieee/builder.rb +81 -398
- data/lib/pubid/ieee/components/code.rb +0 -8
- data/lib/pubid/ieee/components/draft.rb +0 -54
- data/lib/pubid/ieee/components/relationship.rb +149 -5
- data/lib/pubid/ieee/identifier.rb +11 -3
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +14 -62
- data/lib/pubid/ieee/identifiers/base.rb +547 -340
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +12 -6
- data/lib/pubid/ieee/identifiers/corrigendum.rb +12 -15
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +13 -24
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +7 -3
- data/lib/pubid/ieee/identifiers/dual_published.rb +7 -58
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +11 -99
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +11 -25
- data/lib/pubid/ieee/identifiers/joint_development.rb +15 -66
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +24 -58
- data/lib/pubid/ieee/identifiers/nesc/base.rb +19 -90
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +5 -20
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +5 -16
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +2 -11
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +3 -18
- data/lib/pubid/ieee/identifiers/nesc.rb +0 -1
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +9 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +6 -29
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +11 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +39 -4
- data/lib/pubid/ieee/identifiers/standard.rb +2 -5
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +7 -26
- data/lib/pubid/ieee/identifiers.rb +1 -2
- data/lib/pubid/ieee/ire/builder.rb +6 -7
- data/lib/pubid/ieee/ire/identifier.rb +33 -48
- data/lib/pubid/ieee/ire/parser.rb +1 -1
- data/lib/pubid/ieee/nesc/builder.rb +20 -33
- data/lib/pubid/ieee/nesc/parser.rb +15 -16
- data/lib/pubid/ieee/parser.rb +44 -462
- data/lib/pubid/ieee/scheme.rb +90 -0
- data/lib/pubid/ieee/typed_stages.rb +1 -12
- data/lib/pubid/ieee/urn_generator.rb +8 -35
- data/lib/pubid/ieee.rb +2 -133
- data/lib/pubid/ieee_debug.rb +1 -0
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +17 -5
- data/lib/pubid/iho/identifiers/base.rb +30 -64
- data/lib/pubid/iho/identifiers/bibliographic.rb +5 -1
- data/lib/pubid/iho/identifiers/circular_letter.rb +5 -1
- data/lib/pubid/iho/identifiers/miscellaneous.rb +5 -1
- data/lib/pubid/iho/identifiers/publication.rb +5 -1
- data/lib/pubid/iho/identifiers/standard.rb +5 -1
- data/lib/pubid/iho/identifiers.rb +1 -0
- data/lib/pubid/iho/parser.rb +4 -4
- data/lib/pubid/iho/scheme.rb +29 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho.rb +3 -59
- data/lib/pubid/iso/builder.rb +57 -68
- data/lib/pubid/iso/bundled_identifier.rb +3 -56
- data/lib/pubid/iso/combined_identifier.rb +4 -6
- data/lib/pubid/iso/components/code.rb +19 -7
- data/lib/pubid/iso/components/publisher.rb +8 -10
- data/lib/pubid/iso/components.rb +4 -2
- data/lib/pubid/iso/identifier.rb +11 -260
- data/lib/pubid/iso/identifiers/addendum.rb +6 -9
- data/lib/pubid/iso/identifiers/amendment.rb +4 -8
- data/lib/pubid/iso/identifiers/base.rb +115 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +1 -0
- data/lib/pubid/iso/identifiers/directives.rb +2 -8
- data/lib/pubid/iso/identifiers/directives_supplement.rb +26 -55
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +1 -0
- 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 +4 -10
- 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 +3 -11
- data/lib/pubid/iso/identifiers/tc_document.rb +15 -44
- 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 +1 -0
- data/lib/pubid/iso/parser.rb +19 -43
- data/lib/pubid/iso/scheme.rb +187 -0
- data/lib/pubid/iso/single_identifier.rb +7 -6
- data/lib/pubid/iso/supplement_identifier.rb +3 -29
- data/lib/pubid/iso/urn_generator.rb +177 -78
- data/lib/pubid/iso/urn_parser.rb +10 -29
- data/lib/pubid/iso.rb +2 -188
- data/lib/pubid/itu/builder.rb +41 -230
- data/lib/pubid/itu/components/code.rb +12 -57
- data/lib/pubid/itu/components/sector.rb +4 -15
- data/lib/pubid/itu/components/series.rb +4 -0
- data/lib/pubid/itu/identifier.rb +51 -2
- data/lib/pubid/itu/identifiers/amendment.rb +31 -7
- data/lib/pubid/itu/identifiers/annex.rb +4 -13
- data/lib/pubid/itu/identifiers/base.rb +128 -456
- data/lib/pubid/itu/identifiers/combined_identifier.rb +25 -99
- data/lib/pubid/itu/identifiers/corrigendum.rb +25 -16
- data/lib/pubid/itu/identifiers/recommendation.rb +4 -3
- data/lib/pubid/itu/identifiers/special_publication.rb +3 -3
- data/lib/pubid/itu/identifiers/supplement.rb +16 -119
- data/lib/pubid/itu/identifiers.rb +1 -10
- data/lib/pubid/itu/model.rb +1 -1
- data/lib/pubid/itu/parser.rb +27 -481
- data/lib/pubid/itu/scheme.rb +174 -0
- data/lib/pubid/itu/urn_generator.rb +6 -36
- data/lib/pubid/itu.rb +2 -58
- data/lib/pubid/jcgm/builder.rb +19 -37
- data/lib/pubid/jcgm/identifier.rb +0 -10
- data/lib/pubid/jcgm/identifiers/amendment.rb +11 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +15 -3
- data/lib/pubid/jcgm/identifiers.rb +0 -2
- data/lib/pubid/jcgm/parser.rb +7 -74
- data/lib/pubid/jcgm/scheme.rb +60 -0
- data/lib/pubid/jcgm/single_identifier.rb +14 -84
- data/lib/pubid/jcgm/supplement_identifier.rb +4 -39
- data/lib/pubid/jcgm/urn_generator.rb +19 -25
- data/lib/pubid/jcgm.rb +2 -57
- data/lib/pubid/jis/builder.rb +52 -44
- data/lib/pubid/jis/components/code.rb +59 -0
- data/lib/pubid/{astm → jis}/components.rb +1 -1
- data/lib/pubid/jis/identifier.rb +5 -181
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/base.rb +72 -0
- data/lib/pubid/jis/identifiers/standard.rb +1 -2
- data/lib/pubid/jis/identifiers/technical_report.rb +1 -2
- data/lib/pubid/jis/identifiers/technical_specification.rb +1 -2
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +6 -32
- data/lib/pubid/jis/scheme.rb +49 -0
- data/lib/pubid/jis/single_identifier.rb +12 -6
- data/lib/pubid/jis/supplement_identifier.rb +14 -17
- data/lib/pubid/jis.rb +2 -48
- data/lib/pubid/nist/builder.rb +1765 -146
- data/lib/pubid/nist/components/code.rb +20 -9
- data/lib/pubid/nist/components/edition.rb +0 -16
- data/lib/pubid/nist/components/publisher.rb +24 -0
- data/lib/pubid/nist/components/supplement.rb +21 -91
- data/lib/pubid/nist/components.rb +1 -0
- data/lib/pubid/nist/configuration.rb +2 -12
- data/lib/pubid/nist/identifiers/base.rb +417 -662
- data/lib/pubid/nist/identifiers/circular.rb +5 -17
- data/lib/pubid/nist/identifiers/circular_supplement.rb +6 -16
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -3
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +5 -7
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +5 -18
- data/lib/pubid/nist/identifiers/crpl_report.rb +13 -16
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -18
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -3
- data/lib/pubid/nist/identifiers/handbook.rb +4 -12
- data/lib/pubid/nist/identifiers/internal_report.rb +7 -15
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -3
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +11 -20
- data/lib/pubid/nist/identifiers/monograph.rb +11 -22
- 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 +10 -19
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -12
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -4
- data/lib/pubid/nist/identifiers.rb +1 -1
- data/lib/pubid/nist/parser.rb +429 -97
- data/lib/pubid/nist/scheme.rb +199 -0
- data/lib/pubid/nist/supplement_identifier.rb +34 -35
- data/lib/pubid/nist/urn_generator.rb +8 -14
- data/lib/pubid/nist.rb +5 -107
- data/lib/pubid/oiml/builder.rb +10 -91
- data/lib/pubid/oiml/components/code.rb +0 -17
- data/lib/pubid/oiml/identifier.rb +0 -53
- data/lib/pubid/oiml/identifiers/annex.rb +46 -13
- data/lib/pubid/oiml/identifiers/base.rb +36 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +0 -2
- data/lib/pubid/oiml/identifiers/document.rb +0 -2
- data/lib/pubid/oiml/identifiers/expert_report.rb +0 -2
- data/lib/pubid/oiml/identifiers/guide.rb +0 -2
- data/lib/pubid/oiml/identifiers/recommendation.rb +0 -2
- data/lib/pubid/oiml/identifiers/seminar_report.rb +0 -2
- data/lib/pubid/oiml/identifiers/vocabulary.rb +0 -2
- data/lib/pubid/oiml/identifiers.rb +1 -3
- data/lib/pubid/oiml/parser.rb +17 -118
- data/lib/pubid/oiml/scheme.rb +46 -0
- data/lib/pubid/oiml/single_identifier.rb +43 -66
- data/lib/pubid/oiml/supplement_identifier.rb +17 -62
- data/lib/pubid/oiml/urn_generator.rb +8 -22
- data/lib/pubid/oiml.rb +1 -56
- data/lib/pubid/parser.rb +0 -1
- data/lib/pubid/parsers/mr_string.rb +7 -120
- data/lib/pubid/plateau/builder.rb +4 -8
- data/lib/pubid/plateau/identifiers/base.rb +36 -40
- data/lib/pubid/plateau/identifiers/handbook.rb +7 -1
- data/lib/pubid/plateau/identifiers/technical_report.rb +5 -1
- data/lib/pubid/plateau/identifiers.rb +1 -0
- data/lib/pubid/plateau/parser.rb +6 -16
- data/lib/pubid/plateau/scheme.rb +45 -0
- data/lib/pubid/plateau/supplement_identifier.rb +15 -11
- data/lib/pubid/plateau.rb +1 -58
- data/lib/pubid/renderers/base.rb +0 -47
- data/lib/pubid/renderers/directives_renderer.rb +14 -27
- data/lib/pubid/renderers/guide_renderer.rb +1 -7
- data/lib/pubid/renderers/human_readable.rb +9 -34
- data/lib/pubid/renderers/iwa_renderer.rb +1 -5
- data/lib/pubid/renderers/mr_string.rb +6 -54
- data/lib/pubid/renderers/supplement_renderer.rb +2 -5
- data/lib/pubid/renderers.rb +0 -1
- data/lib/pubid/rendering/base.rb +73 -0
- data/lib/pubid/rendering/common.rb +211 -0
- data/lib/pubid/rendering/context.rb +21 -33
- data/lib/pubid/rendering/format.rb +25 -0
- data/lib/pubid/rendering/numbering.rb +7 -25
- data/lib/pubid/rendering/supplement.rb +4 -4
- data/lib/pubid/rendering.rb +3 -0
- data/lib/pubid/sae/builder.rb +1 -1
- data/lib/pubid/sae/components/date.rb +0 -8
- data/lib/pubid/sae/components/type.rb +1 -5
- data/lib/pubid/sae/identifier.rb +12 -2
- data/lib/pubid/sae/identifiers/base.rb +28 -33
- data/lib/pubid/sae/identifiers.rb +1 -0
- data/lib/pubid/sae/parser.rb +1 -1
- data/lib/pubid/sae/scheme.rb +47 -0
- data/lib/pubid/sae/urn_generator.rb +10 -2
- data/lib/pubid/sae.rb +2 -49
- data/lib/pubid/scheme.rb +207 -0
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +10 -424
- data/lib/tasks/export.rake +5 -6
- data/lib/tasks/website-data.json +1796 -1854
- metadata +45 -307
- data/data/bipm/update_codes.yaml +0 -9
- data/data/nist/series.yaml +0 -155
- data/lib/pubid/adobe/builder.rb +0 -52
- data/lib/pubid/adobe/identifier.rb +0 -47
- data/lib/pubid/adobe/identifiers/publication.rb +0 -31
- data/lib/pubid/adobe/identifiers/tech_note.rb +0 -32
- data/lib/pubid/adobe/identifiers.rb +0 -10
- data/lib/pubid/adobe/parser.rb +0 -136
- data/lib/pubid/adobe/renderer.rb +0 -39
- data/lib/pubid/adobe/urn_generator.rb +0 -42
- data/lib/pubid/adobe/urn_parser.rb +0 -69
- data/lib/pubid/adobe.rb +0 -60
- data/lib/pubid/amca/renderer.rb +0 -82
- data/lib/pubid/amca/urn_parser.rb +0 -28
- data/lib/pubid/ansi/renderer.rb +0 -53
- data/lib/pubid/ansi/urn_parser.rb +0 -23
- data/lib/pubid/api/identifiers.rb +0 -18
- data/lib/pubid/api/renderer.rb +0 -98
- data/lib/pubid/api/urn_parser.rb +0 -35
- data/lib/pubid/ashrae/renderer.rb +0 -117
- data/lib/pubid/ashrae/urn_parser.rb +0 -27
- data/lib/pubid/asme/renderer.rb +0 -66
- data/lib/pubid/asme/urn_parser.rb +0 -31
- data/lib/pubid/astm/identifiers/code_number.rb +0 -81
- data/lib/pubid/astm/identifiers.rb +0 -19
- data/lib/pubid/astm/renderer.rb +0 -172
- data/lib/pubid/astm/urn_parser.rb +0 -30
- data/lib/pubid/bipm/builder.rb +0 -163
- data/lib/pubid/bipm/identifier.rb +0 -285
- data/lib/pubid/bipm/identifiers/committee_document.rb +0 -36
- data/lib/pubid/bipm/identifiers/guide.rb +0 -35
- data/lib/pubid/bipm/identifiers/meeting.rb +0 -53
- data/lib/pubid/bipm/identifiers/mep.rb +0 -33
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +0 -48
- data/lib/pubid/bipm/identifiers/si_brochure.rb +0 -33
- data/lib/pubid/bipm/identifiers.rb +0 -15
- data/lib/pubid/bipm/parser.rb +0 -237
- data/lib/pubid/bipm/renderer.rb +0 -118
- data/lib/pubid/bipm/urn_generator.rb +0 -58
- data/lib/pubid/bipm/urn_parser.rb +0 -60
- data/lib/pubid/bipm.rb +0 -91
- data/lib/pubid/bsi/renderer.rb +0 -1064
- data/lib/pubid/bsi/urn_parser.rb +0 -52
- data/lib/pubid/calconnect/builder.rb +0 -38
- data/lib/pubid/calconnect/identifier.rb +0 -121
- data/lib/pubid/calconnect/identifiers/standard.rb +0 -29
- data/lib/pubid/calconnect/identifiers.rb +0 -9
- data/lib/pubid/calconnect/parser.rb +0 -54
- data/lib/pubid/calconnect/renderer.rb +0 -36
- data/lib/pubid/calconnect/urn_generator.rb +0 -33
- data/lib/pubid/calconnect/urn_parser.rb +0 -34
- data/lib/pubid/calconnect.rb +0 -82
- data/lib/pubid/ccsds/urn_parser.rb +0 -20
- data/lib/pubid/cen_cenelec/renderer.rb +0 -261
- data/lib/pubid/cen_cenelec/urn_parser.rb +0 -28
- data/lib/pubid/cie/identifiers/code_attributes.rb +0 -52
- data/lib/pubid/cie/identifiers/proceedings.rb +0 -41
- data/lib/pubid/cie/urn_parser.rb +0 -28
- data/lib/pubid/components/adoption.rb +0 -104
- data/lib/pubid/components/iteration.rb +0 -32
- data/lib/pubid/components/relationship.rb +0 -151
- data/lib/pubid/components/supplement.rb +0 -184
- data/lib/pubid/csa/renderer.rb +0 -300
- data/lib/pubid/csa/urn_parser.rb +0 -33
- data/lib/pubid/doi/builder.rb +0 -18
- data/lib/pubid/doi/identifier.rb +0 -49
- data/lib/pubid/doi/identifiers/resource.rb +0 -30
- data/lib/pubid/doi/identifiers.rb +0 -9
- data/lib/pubid/doi/parser.rb +0 -52
- data/lib/pubid/doi/renderer.rb +0 -13
- data/lib/pubid/doi.rb +0 -55
- data/lib/pubid/easc/builder.rb +0 -55
- data/lib/pubid/easc/identifier.rb +0 -59
- data/lib/pubid/easc/identifiers/pmg.rb +0 -20
- data/lib/pubid/easc/identifiers/rmg.rb +0 -19
- data/lib/pubid/easc/identifiers.rb +0 -10
- data/lib/pubid/easc/parser.rb +0 -88
- data/lib/pubid/easc/renderer.rb +0 -48
- data/lib/pubid/easc/urn_generator.rb +0 -46
- data/lib/pubid/easc/urn_parser.rb +0 -57
- data/lib/pubid/easc.rb +0 -52
- data/lib/pubid/ecma/builder.rb +0 -45
- data/lib/pubid/ecma/identifier.rb +0 -147
- data/lib/pubid/ecma/identifiers/memento.rb +0 -30
- data/lib/pubid/ecma/identifiers/standard.rb +0 -31
- data/lib/pubid/ecma/identifiers/technical_report.rb +0 -31
- data/lib/pubid/ecma/identifiers.rb +0 -11
- data/lib/pubid/ecma/parser.rb +0 -76
- data/lib/pubid/ecma/renderer.rb +0 -67
- data/lib/pubid/ecma/urn_generator.rb +0 -46
- data/lib/pubid/ecma/urn_parser.rb +0 -51
- data/lib/pubid/ecma.rb +0 -67
- data/lib/pubid/errors.rb +0 -79
- data/lib/pubid/etsi/renderer.rb +0 -48
- data/lib/pubid/etsi/urn_parser.rb +0 -34
- data/lib/pubid/gb/builder.rb +0 -45
- data/lib/pubid/gb/identifier.rb +0 -67
- data/lib/pubid/gb/identifiers/standard.rb +0 -34
- data/lib/pubid/gb/identifiers.rb +0 -9
- data/lib/pubid/gb/parser.rb +0 -63
- data/lib/pubid/gb/renderer.rb +0 -35
- data/lib/pubid/gb.rb +0 -87
- data/lib/pubid/gost/builder.rb +0 -148
- data/lib/pubid/gost/identifier.rb +0 -47
- data/lib/pubid/gost/identifiers/foreign_reference.rb +0 -25
- data/lib/pubid/gost/identifiers/harmonized.rb +0 -39
- data/lib/pubid/gost/identifiers/identical_adoption.rb +0 -39
- data/lib/pubid/gost/identifiers/interstate_standard.rb +0 -20
- data/lib/pubid/gost/identifiers/national_standard.rb +0 -19
- data/lib/pubid/gost/identifiers.rb +0 -13
- data/lib/pubid/gost/parser.rb +0 -105
- data/lib/pubid/gost/renderer.rb +0 -48
- data/lib/pubid/gost/urn_generator.rb +0 -46
- data/lib/pubid/gost/urn_parser.rb +0 -52
- data/lib/pubid/gost.rb +0 -49
- data/lib/pubid/iala/builder.rb +0 -102
- data/lib/pubid/iala/identifier.rb +0 -90
- data/lib/pubid/iala/identifiers/advice.rb +0 -15
- data/lib/pubid/iala/identifiers/annex.rb +0 -57
- data/lib/pubid/iala/identifiers/general_assembly.rb +0 -19
- data/lib/pubid/iala/identifiers/guideline.rb +0 -17
- data/lib/pubid/iala/identifiers/letter.rb +0 -16
- data/lib/pubid/iala/identifiers/manual.rb +0 -18
- data/lib/pubid/iala/identifiers/model_course.rb +0 -17
- data/lib/pubid/iala/identifiers/recommendation.rb +0 -17
- data/lib/pubid/iala/identifiers/report.rb +0 -16
- data/lib/pubid/iala/identifiers/resolution.rb +0 -16
- data/lib/pubid/iala/identifiers/standard.rb +0 -17
- data/lib/pubid/iala/identifiers.rb +0 -19
- data/lib/pubid/iala/parser.rb +0 -138
- data/lib/pubid/iala/renderer.rb +0 -36
- data/lib/pubid/iala/urn_generator.rb +0 -49
- data/lib/pubid/iala/urn_parser.rb +0 -67
- data/lib/pubid/iala.rb +0 -71
- data/lib/pubid/iana/builder.rb +0 -22
- data/lib/pubid/iana/identifier.rb +0 -140
- data/lib/pubid/iana/identifiers/registry.rb +0 -69
- data/lib/pubid/iana/identifiers.rb +0 -9
- data/lib/pubid/iana/parser.rb +0 -38
- data/lib/pubid/iana/renderer.rb +0 -32
- data/lib/pubid/iana/urn_generator.rb +0 -19
- data/lib/pubid/iana/urn_parser.rb +0 -24
- data/lib/pubid/iana.rb +0 -69
- data/lib/pubid/idf/renderer.rb +0 -84
- data/lib/pubid/idf/urn_parser.rb +0 -25
- data/lib/pubid/iec/components.rb +0 -14
- data/lib/pubid/iec/identifiers/technical_group.rb +0 -30
- data/lib/pubid/iec/identifiers.rb +0 -31
- data/lib/pubid/iec/renderer.rb +0 -267
- data/lib/pubid/ieee/compaction.rb +0 -121
- data/lib/pubid/ieee/identifiers/amendment.rb +0 -40
- data/lib/pubid/ieee/identifiers/code_number.rb +0 -82
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +0 -32
- data/lib/pubid/ieee/pre_parser.rb +0 -301
- data/lib/pubid/ieee/renderer.rb +0 -408
- data/lib/pubid/ieee/urn_parser.rb +0 -34
- data/lib/pubid/ietf/builder.rb +0 -78
- data/lib/pubid/ietf/identifier.rb +0 -5
- data/lib/pubid/ietf/identifiers/base.rb +0 -72
- data/lib/pubid/ietf/identifiers/bcp.rb +0 -36
- data/lib/pubid/ietf/identifiers/fyi.rb +0 -36
- data/lib/pubid/ietf/identifiers/internet_draft.rb +0 -45
- data/lib/pubid/ietf/identifiers/rfc.rb +0 -27
- data/lib/pubid/ietf/identifiers/serialization.rb +0 -51
- data/lib/pubid/ietf/identifiers/std.rb +0 -36
- data/lib/pubid/ietf/identifiers.rb +0 -14
- data/lib/pubid/ietf/parser.rb +0 -61
- data/lib/pubid/ietf/renderer.rb +0 -64
- data/lib/pubid/ietf/urn_generator.rb +0 -37
- data/lib/pubid/ietf/urn_parser.rb +0 -43
- data/lib/pubid/ietf.rb +0 -85
- data/lib/pubid/iho/renderer.rb +0 -30
- data/lib/pubid/iho/urn_parser.rb +0 -58
- data/lib/pubid/isbn/builder.rb +0 -44
- data/lib/pubid/isbn/check_digit.rb +0 -53
- data/lib/pubid/isbn/identifier.rb +0 -81
- data/lib/pubid/isbn/identifiers/book.rb +0 -30
- data/lib/pubid/isbn/identifiers.rb +0 -9
- data/lib/pubid/isbn/parser.rb +0 -45
- data/lib/pubid/isbn/renderer.rb +0 -16
- data/lib/pubid/isbn.rb +0 -52
- data/lib/pubid/iso/normalizer.rb +0 -89
- data/lib/pubid/itu/components/designation.rb +0 -35
- data/lib/pubid/itu/components.rb +0 -12
- data/lib/pubid/itu/identifiers/addendum.rb +0 -15
- data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +0 -87
- data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +0 -92
- data/lib/pubid/itu/identifiers/errata.rb +0 -15
- data/lib/pubid/itu/identifiers/handbook.rb +0 -38
- data/lib/pubid/itu/identifiers/question.rb +0 -63
- data/lib/pubid/itu/identifiers/report.rb +0 -39
- data/lib/pubid/itu/identifiers/standard_serialization.rb +0 -58
- data/lib/pubid/itu/urn_parser.rb +0 -31
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +0 -34
- data/lib/pubid/jcgm/identifiers/meeting.rb +0 -47
- data/lib/pubid/jcgm/renderer.rb +0 -89
- data/lib/pubid/jcgm/urn_parser.rb +0 -177
- data/lib/pubid/jis/identifiers/corrigendum.rb +0 -16
- data/lib/pubid/jis/renderer.rb +0 -69
- data/lib/pubid/jis/urn_parser.rb +0 -23
- data/lib/pubid/nist/caster.rb +0 -1234
- data/lib/pubid/nist/circular_supplement_builder.rb +0 -293
- data/lib/pubid/nist/identifier.rb +0 -8
- data/lib/pubid/nist/identifiers/dated_document.rb +0 -49
- data/lib/pubid/nist/parser_output_normalizer.rb +0 -233
- data/lib/pubid/nist/preprocessor.rb +0 -443
- data/lib/pubid/nist/renderer.rb +0 -43
- data/lib/pubid/nist/router.rb +0 -149
- data/lib/pubid/nist/series/base.rb +0 -58
- data/lib/pubid/nist/series/crpl.rb +0 -13
- data/lib/pubid/nist/series/fips.rb +0 -14
- data/lib/pubid/nist/series/ir.rb +0 -57
- data/lib/pubid/nist/series/letter_preserving.rb +0 -15
- data/lib/pubid/nist/series/mono.rb +0 -19
- data/lib/pubid/nist/series/ncstar.rb +0 -20
- data/lib/pubid/nist/series.rb +0 -49
- data/lib/pubid/nist/urn_parser.rb +0 -67
- data/lib/pubid/oasis/builder.rb +0 -79
- data/lib/pubid/oasis/identifier.rb +0 -160
- data/lib/pubid/oasis/identifiers/standard.rb +0 -29
- data/lib/pubid/oasis/identifiers.rb +0 -9
- data/lib/pubid/oasis/parser.rb +0 -34
- data/lib/pubid/oasis/renderer.rb +0 -29
- data/lib/pubid/oasis/urn_generator.rb +0 -25
- data/lib/pubid/oasis/urn_parser.rb +0 -22
- data/lib/pubid/oasis.rb +0 -79
- data/lib/pubid/ogc/builder.rb +0 -33
- data/lib/pubid/ogc/identifier.rb +0 -81
- data/lib/pubid/ogc/identifiers/document.rb +0 -26
- data/lib/pubid/ogc/identifiers.rb +0 -10
- data/lib/pubid/ogc/parser.rb +0 -40
- data/lib/pubid/ogc/renderer.rb +0 -33
- data/lib/pubid/ogc/urn_generator.rb +0 -14
- data/lib/pubid/ogc/urn_parser.rb +0 -22
- data/lib/pubid/ogc.rb +0 -71
- data/lib/pubid/oiml/identifiers/bulletin.rb +0 -137
- data/lib/pubid/oiml/identifiers/code_number.rb +0 -90
- data/lib/pubid/oiml/identifiers/errata.rb +0 -15
- data/lib/pubid/oiml/renderer.rb +0 -232
- data/lib/pubid/oiml/urn_parser.rb +0 -39
- data/lib/pubid/omg/builder.rb +0 -19
- data/lib/pubid/omg/identifier.rb +0 -47
- data/lib/pubid/omg/identifiers/specification.rb +0 -32
- data/lib/pubid/omg/identifiers.rb +0 -9
- data/lib/pubid/omg/parser.rb +0 -40
- data/lib/pubid/omg/renderer.rb +0 -19
- data/lib/pubid/omg.rb +0 -51
- data/lib/pubid/parser/grammar.rb +0 -74
- data/lib/pubid/plateau/identifier.rb +0 -4
- data/lib/pubid/plateau/renderer.rb +0 -51
- data/lib/pubid/plateau/urn_parser.rb +0 -43
- data/lib/pubid/prefixes_support.rb +0 -51
- data/lib/pubid/renderers/annotator.rb +0 -233
- data/lib/pubid/sae/renderer.rb +0 -36
- data/lib/pubid/sae/urn_parser.rb +0 -36
- data/lib/pubid/tgpp/builder.rb +0 -41
- data/lib/pubid/tgpp/identifier.rb +0 -107
- data/lib/pubid/tgpp/identifiers/technical_report.rb +0 -32
- data/lib/pubid/tgpp/identifiers/technical_specification.rb +0 -33
- data/lib/pubid/tgpp/identifiers.rb +0 -11
- data/lib/pubid/tgpp/parser.rb +0 -78
- data/lib/pubid/tgpp/renderer.rb +0 -52
- data/lib/pubid/tgpp/urn_generator.rb +0 -39
- data/lib/pubid/tgpp/urn_parser.rb +0 -30
- data/lib/pubid/tgpp.rb +0 -83
- data/lib/pubid/type_resolver.rb +0 -59
- data/lib/pubid/un/builder.rb +0 -42
- data/lib/pubid/un/identifier.rb +0 -40
- data/lib/pubid/un/identifiers/document.rb +0 -24
- data/lib/pubid/un/identifiers.rb +0 -9
- data/lib/pubid/un/parser.rb +0 -25
- data/lib/pubid/un/renderer.rb +0 -11
- data/lib/pubid/un.rb +0 -46
- data/lib/pubid/urn_parser/base.rb +0 -81
- data/lib/pubid/urn_parser/errors.rb +0 -16
- data/lib/pubid/urn_parser.rb +0 -14
- data/lib/pubid/w3c/builder.rb +0 -55
- data/lib/pubid/w3c/identifier.rb +0 -130
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +0 -31
- data/lib/pubid/w3c/identifiers/draft_note.rb +0 -31
- data/lib/pubid/w3c/identifiers/note.rb +0 -30
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/standard.rb +0 -12
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/working_draft.rb +0 -30
- data/lib/pubid/w3c/identifiers.rb +0 -25
- data/lib/pubid/w3c/parser.rb +0 -43
- data/lib/pubid/w3c/renderer.rb +0 -35
- data/lib/pubid/w3c/urn_generator.rb +0 -18
- data/lib/pubid/w3c/urn_parser.rb +0 -36
- data/lib/pubid/w3c.rb +0 -67
- data/lib/pubid/xsf/builder.rb +0 -17
- data/lib/pubid/xsf/identifier.rb +0 -66
- data/lib/pubid/xsf/identifiers/xep.rb +0 -31
- data/lib/pubid/xsf/identifiers.rb +0 -9
- data/lib/pubid/xsf/parser.rb +0 -25
- data/lib/pubid/xsf/renderer.rb +0 -23
- data/lib/pubid/xsf/urn_generator.rb +0 -13
- data/lib/pubid/xsf/urn_parser.rb +0 -18
- data/lib/pubid/xsf.rb +0 -81
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
# Builder dedicated to CIRC/LCIRC supplement identifier construction.
|
|
6
|
-
#
|
|
7
|
-
# Extracted from Builder.build_circular_supplement* methods to keep the
|
|
8
|
-
# main Builder focused on orchestration. The circular supplement
|
|
9
|
-
# construction pipeline is a self-contained sub-flow that:
|
|
10
|
-
#
|
|
11
|
-
# 1. Decides between the wrapper class (CircularSupplement) for V1-compat
|
|
12
|
-
# update forms (slash-year "118supp3/1926" -> ".../Upd1-192603";
|
|
13
|
-
# implicit revision "145r11/1925") and the normal Circular /
|
|
14
|
-
# LetterCircular classes for everything else.
|
|
15
|
-
# 2. Builds the base identifier recursively via Builder#build.
|
|
16
|
-
# 3. Attaches the supplement as either an isolated component on the normal
|
|
17
|
-
# class, or a structured edition/update on the wrapper.
|
|
18
|
-
#
|
|
19
|
-
# Single Responsibility: Construct CIRC/LCIRC supplement identifier
|
|
20
|
-
# objects from parsed data, calling back to the parent Builder for base
|
|
21
|
-
# identifier construction.
|
|
22
|
-
class CircularSupplementBuilder
|
|
23
|
-
# @param builder [Builder] the parent builder (for recursive base build)
|
|
24
|
-
def initialize(builder)
|
|
25
|
-
@builder = builder
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Build CircularSupplement with base wrapping
|
|
29
|
-
# @param parsed_hash [Hash] the parsed supplement data
|
|
30
|
-
# Build a CIRC/LCIRC supplement. Most forms collapse onto the base
|
|
31
|
-
# identifier's normal class (Circular / LetterCircular) with isolated
|
|
32
|
-
# supplement attributes, so they share one model with every other series
|
|
33
|
-
# and are queryable by part. The V1-compat update forms (slash-year
|
|
34
|
-
# "118supp3/1926" -> ".../Upd1-192603"; implicit revision "145r11/1925")
|
|
35
|
-
# render through an Update component the flat supplement model can't
|
|
36
|
-
# express, so they stay on the CircularSupplement wrapper for now.
|
|
37
|
-
def build_circular_supplement(parsed_hash)
|
|
38
|
-
if parsed_hash[:supplement_slash_year].is_a?(Hash) ||
|
|
39
|
-
parsed_hash[:implicit_supplement].is_a?(Hash)
|
|
40
|
-
return build_circular_supplement_wrapper(parsed_hash)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
series_value = if parsed_hash[:circ_series].is_a?(Hash)
|
|
44
|
-
parsed_hash[:circ_series][:series]
|
|
45
|
-
else
|
|
46
|
-
parsed_hash[:series]
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Date-range supplement (no base document): a plain base identifier with
|
|
50
|
-
# no number, carrying the range. parsed_format is left at the default so
|
|
51
|
-
# a dotted MR input still normalizes to the spaced short form.
|
|
52
|
-
if parsed_hash[:supplement_date_range].is_a?(Hash)
|
|
53
|
-
range = parsed_hash[:supplement_date_range]
|
|
54
|
-
identifier = @builder.build({ series: series_value })
|
|
55
|
-
ms = range[:supp_month_start]&.to_s
|
|
56
|
-
ys = range[:supp_year_start]&.to_s
|
|
57
|
-
me = range[:supp_month_end]&.to_s
|
|
58
|
-
ye = range[:supp_year_end]&.to_s
|
|
59
|
-
# Month is optional: a year-only range ("sup1925-1926") passes just the
|
|
60
|
-
# bare year, which supplement_from parses into year/year_end.
|
|
61
|
-
identifier.supplement = @builder.supplement_from(
|
|
62
|
-
value: nil, has_revision: false,
|
|
63
|
-
range_start: (ys ? "#{ms}#{ys}" : nil),
|
|
64
|
-
range_end: (ye ? "#{me}#{ye}" : nil)
|
|
65
|
-
)
|
|
66
|
-
return identifier
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
# Based supplement: build the base, then attach the supplement as an
|
|
70
|
-
# isolated component on that normal class.
|
|
71
|
-
identifier = build_circular_supplement_base(parsed_hash, series_value)
|
|
72
|
-
raw = if parsed_hash[:supplement_month_year]
|
|
73
|
-
parsed_hash[:supplement_month_year].to_s
|
|
74
|
-
elsif parsed_hash[:supplement_year]
|
|
75
|
-
parsed_hash[:supplement_year].to_s
|
|
76
|
-
else
|
|
77
|
-
"" # supplement_empty or bare marker
|
|
78
|
-
end
|
|
79
|
-
identifier.supplement = Components::Supplement.from_raw(raw)
|
|
80
|
-
identifier
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Build just the base identifier for a based CIRC/LCIRC supplement, from
|
|
84
|
-
# base_portion (number, optional edition "101e2" or letter suffix "378G")
|
|
85
|
-
# or the merged first_number fallback. Returns the normal class.
|
|
86
|
-
def build_circular_supplement_base(parsed_hash, series_value)
|
|
87
|
-
base_portion = parsed_hash[:base_portion]
|
|
88
|
-
unless base_portion
|
|
89
|
-
return @builder.build({
|
|
90
|
-
publisher: parsed_hash[:publisher],
|
|
91
|
-
series: series_value || parsed_hash[:series],
|
|
92
|
-
first_number: parsed_hash[:first_number],
|
|
93
|
-
parsed_format: parsed_hash[:parsed_format],
|
|
94
|
-
})
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
base_number = if base_portion.is_a?(Hash)
|
|
98
|
-
base_portion[:simple_number] || base_portion[:base_number]
|
|
99
|
-
else
|
|
100
|
-
base_portion
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
letter_suffix = nil
|
|
104
|
-
if base_portion.is_a?(Hash) && base_portion[:letter_suffix]
|
|
105
|
-
letter_suffix = base_portion[:letter_suffix].to_s.upcase
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
publisher_value = nil
|
|
109
|
-
if parsed_hash[:circ_series].is_a?(Hash) && parsed_hash[:circ_series][:series]
|
|
110
|
-
series_str = parsed_hash[:circ_series][:series].to_s
|
|
111
|
-
publisher_value = series_str.split.first if series_str.include?(" ")
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
has_edition = base_portion.is_a?(Hash) && base_portion[:edition_number]
|
|
115
|
-
|
|
116
|
-
base_number_with_suffix = base_number.to_s
|
|
117
|
-
base_number_with_suffix += letter_suffix if letter_suffix
|
|
118
|
-
if has_edition
|
|
119
|
-
base_number_with_suffix += "e#{base_portion[:edition_number]}"
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
base_hash = {
|
|
123
|
-
series: series_value,
|
|
124
|
-
first_number: base_number_with_suffix,
|
|
125
|
-
parsed_format: parsed_hash[:parsed_format],
|
|
126
|
-
}
|
|
127
|
-
base_hash[:publisher] = publisher_value if publisher_value
|
|
128
|
-
base_hash[:edition_e] =
|
|
129
|
-
{ edition_id: base_portion[:edition_number] } if has_edition
|
|
130
|
-
|
|
131
|
-
@builder.build(base_hash)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# @return [Identifiers::CircularSupplement] the supplement identifier
|
|
135
|
-
def build_circular_supplement_wrapper(parsed_hash)
|
|
136
|
-
supplement = Identifiers::CircularSupplement.new
|
|
137
|
-
|
|
138
|
-
# Extract series from circ_series if present (nested structure from parser)
|
|
139
|
-
series_value = nil
|
|
140
|
-
if parsed_hash[:circ_series].is_a?(Hash)
|
|
141
|
-
series_value = parsed_hash[:circ_series][:series]
|
|
142
|
-
elsif parsed_hash[:series]
|
|
143
|
-
series_value = parsed_hash[:series]
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
# Handle date range supplement (no base)
|
|
147
|
-
if parsed_hash[:supplement_date_range].is_a?(Hash)
|
|
148
|
-
range = parsed_hash[:supplement_date_range]
|
|
149
|
-
month_start = range[:supp_month_start]&.to_s
|
|
150
|
-
year_start = range[:supp_year_start]&.to_s
|
|
151
|
-
month_end = range[:supp_month_end]&.to_s
|
|
152
|
-
year_end = range[:supp_year_end]&.to_s
|
|
153
|
-
|
|
154
|
-
supplement.supplement_date_range_start = "#{month_start}#{year_start}" if month_start && year_start
|
|
155
|
-
supplement.supplement_date_range_end = "#{month_end}#{year_end}" if month_end && year_end
|
|
156
|
-
|
|
157
|
-
return supplement
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
# Build base identifier from base_portion (if present)
|
|
161
|
-
# If not present (because it was merged during parsing), use first_number
|
|
162
|
-
if parsed_hash[:base_portion]
|
|
163
|
-
# Extract the actual number value from base_portion hash
|
|
164
|
-
# base_portion can be: {:simple_number=>"118"}, {:base_number=>"145", :revision_letter=>"r", :revision_number=>"11"}, etc.
|
|
165
|
-
base_portion = parsed_hash[:base_portion]
|
|
166
|
-
base_number = if base_portion.is_a?(Hash)
|
|
167
|
-
# Extract the value from whichever key is present
|
|
168
|
-
base_portion[:simple_number] || base_portion[:base_number]
|
|
169
|
-
else
|
|
170
|
-
base_portion
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
# Check for letter suffix in base_portion (e.g., "378G")
|
|
174
|
-
letter_suffix = nil
|
|
175
|
-
if base_portion.is_a?(Hash) && base_portion[:letter_suffix]
|
|
176
|
-
letter_suffix = base_portion[:letter_suffix].to_s.upcase
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
# Extract publisher from circ_series if present
|
|
180
|
-
publisher_value = nil
|
|
181
|
-
if parsed_hash[:circ_series].is_a?(Hash) && parsed_hash[:circ_series][:series]
|
|
182
|
-
series_str = parsed_hash[:circ_series][:series].to_s
|
|
183
|
-
# Extract publisher from series (e.g., "NBS LCIRC" -> "NBS")
|
|
184
|
-
publisher_value = series_str.split.first if series_str.include?(" ")
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
# Check if base_portion has revision (for patterns like "145r11/1925")
|
|
188
|
-
has_revision = base_portion.is_a?(Hash) && base_portion[:revision_letter] && base_portion[:revision_number]
|
|
189
|
-
|
|
190
|
-
# NEW: Check if base_portion has edition_number (for patterns like "101e2")
|
|
191
|
-
has_edition = base_portion.is_a?(Hash) && base_portion[:edition_number]
|
|
192
|
-
|
|
193
|
-
# Include letter suffix in base_number if present
|
|
194
|
-
# Also include edition_number if present (for "101e2" pattern)
|
|
195
|
-
base_number_with_suffix = base_number.to_s
|
|
196
|
-
if letter_suffix
|
|
197
|
-
base_number_with_suffix += letter_suffix
|
|
198
|
-
end
|
|
199
|
-
if has_edition
|
|
200
|
-
base_number_with_suffix += "e#{base_portion[:edition_number]}"
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
# Reconstruct parse hash for base identifier
|
|
204
|
-
base_hash = {
|
|
205
|
-
series: series_value,
|
|
206
|
-
first_number: base_number_with_suffix,
|
|
207
|
-
parsed_format: parsed_hash[:parsed_format],
|
|
208
|
-
}
|
|
209
|
-
base_hash[:publisher] = publisher_value if publisher_value
|
|
210
|
-
|
|
211
|
-
# NEW: Add edition_number to base_hash for patterns like "101e2"
|
|
212
|
-
# This will be processed by the normal build() logic to create Edition component
|
|
213
|
-
if has_edition
|
|
214
|
-
# Create edition_e hash that will be converted to Edition with type="e"
|
|
215
|
-
base_hash[:edition_e] =
|
|
216
|
-
{ edition_id: base_portion[:edition_number] }
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
# Recursively build base identifier
|
|
220
|
-
# This will go through normal build() process which extracts edition from "101e2"
|
|
221
|
-
supplement.base = @builder.build(base_hash)
|
|
222
|
-
|
|
223
|
-
# NEW: Handle revision + implicit supplement pattern (e.g., "145r11/1925")
|
|
224
|
-
# Create update format: "Upd1-{year}{revision_number}"
|
|
225
|
-
if has_revision && parsed_hash[:implicit_supplement].is_a?(Hash)
|
|
226
|
-
revision_number = base_portion[:revision_number].to_s
|
|
227
|
-
supplement_year = parsed_hash[:implicit_supplement][:implicit_supplement_year].to_s
|
|
228
|
-
|
|
229
|
-
# Create Update component for revision+supplement pattern.
|
|
230
|
-
# Renders "/Upd1-{year}{revision_number}" via Update#to_s(:short).
|
|
231
|
-
# The year+revision are fused into the year field (month left nil) so
|
|
232
|
-
# the revision is NOT zero-padded (e.g. "145r6/1925" -> "Upd1-19256",
|
|
233
|
-
# not "192506"). Must be a Components::Update (not a String) so
|
|
234
|
-
# :update serializes.
|
|
235
|
-
supplement.update = Components::Update.new(
|
|
236
|
-
number: "1", year: "#{supplement_year}#{revision_number}",
|
|
237
|
-
prefix: "slash"
|
|
238
|
-
)
|
|
239
|
-
supplement.implicit_supplement = true # Mark as implicit supplement for rendering
|
|
240
|
-
end
|
|
241
|
-
elsif parsed_hash[:first_number]
|
|
242
|
-
# base_portion was lost during merge, use first_number to build base identifier
|
|
243
|
-
base_hash = {
|
|
244
|
-
publisher: parsed_hash[:publisher],
|
|
245
|
-
series: series_value || parsed_hash[:series],
|
|
246
|
-
first_number: parsed_hash[:first_number],
|
|
247
|
-
parsed_format: parsed_hash[:parsed_format],
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
# Recursively build base identifier
|
|
251
|
-
supplement.base = @builder.build(base_hash)
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
# Build supplement edition from captured data
|
|
255
|
-
if parsed_hash[:supplement_month_year]
|
|
256
|
-
# Parse month+year format like "Jan1924"
|
|
257
|
-
month_year = parsed_hash[:supplement_month_year].to_s
|
|
258
|
-
supplement.edition = Components::Edition.new(type: "s",
|
|
259
|
-
id: month_year)
|
|
260
|
-
elsif parsed_hash[:supplement_year]
|
|
261
|
-
# Just year: 1924
|
|
262
|
-
supplement.edition = Components::Edition.new(type: "s",
|
|
263
|
-
id: parsed_hash[:supplement_year].to_s)
|
|
264
|
-
elsif parsed_hash[:supplement_slash_year].is_a?(Hash)
|
|
265
|
-
# NEW: Handle supplement_slash_year pattern (e.g., "sup12/1926", "sup1/1927")
|
|
266
|
-
# V1 format: "Upd1-192612" where "1" is fixed and "192612" is year+number concatenated
|
|
267
|
-
# Single digit numbers are zero-padded: "sup1/1927" -> "Upd1-192701"
|
|
268
|
-
supp_hash = parsed_hash[:supplement_slash_year]
|
|
269
|
-
supp_number = supp_hash[:supp_number]&.to_s
|
|
270
|
-
supp_year = supp_hash[:supp_year]&.to_s
|
|
271
|
-
|
|
272
|
-
# Pad supplement number to 2 digits for single-digit numbers
|
|
273
|
-
supp_number_padded = supp_number.rjust(2, "0")
|
|
274
|
-
|
|
275
|
-
# Create Update component for supplement (V1 compatibility uses Update for supplements).
|
|
276
|
-
# Renders "/Upd1-{year}{padded_number}" via Update#to_s(:short). The
|
|
277
|
-
# year and already-padded number are fused into the year field (month
|
|
278
|
-
# left nil) so rendering reproduces the V1 string exactly. Must be a
|
|
279
|
-
# Components::Update (not a String) so :update serializes.
|
|
280
|
-
supplement.update = Components::Update.new(
|
|
281
|
-
number: "1", year: "#{supp_year}#{supp_number_padded}",
|
|
282
|
-
prefix: "slash"
|
|
283
|
-
)
|
|
284
|
-
elsif parsed_hash[:supplement_empty]
|
|
285
|
-
# Empty supplement - no edition
|
|
286
|
-
# supplement.edition remains nil
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
supplement
|
|
290
|
-
end
|
|
291
|
-
end
|
|
292
|
-
end
|
|
293
|
-
end
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# The NIST flavor base class is Pubid::Nist::Identifier — a real
|
|
4
|
-
# Pubid::Identifier subclass that every concrete NIST identifier descends from,
|
|
5
|
-
# so `id.is_a?(Pubid::Nist::Identifier)` and the shared polymorphic `from_hash`
|
|
6
|
-
# work natively (no facade needed). Its full body and `.parse` are defined in identifiers/base.rb to keep
|
|
7
|
-
# that large body in one place; this file just ensures it is loaded when a
|
|
8
|
-
# consumer references Pubid::Nist::Identifier directly.
|
|
@@ -1,49 +0,0 @@
|
|
|
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 < Identifier
|
|
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
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
# Normalizes the raw hash produced by the NIST parser before the Builder
|
|
6
|
-
# constructs the identifier object.
|
|
7
|
-
#
|
|
8
|
-
# The parser emits a flat hash with keys like :first_number, :second_number,
|
|
9
|
-
# :edition_dash_year, :update_prefix, etc. Many of those keys are
|
|
10
|
-
# *incompatible shapes* — e.g. parser captures a year as :edition_dash_year
|
|
11
|
-
# when it is actually a second_number, or a letter+digits suffix lives
|
|
12
|
-
# inside :first_number when it should become a Part component.
|
|
13
|
-
#
|
|
14
|
-
# Each `normalize_*` method here performs one such shape correction,
|
|
15
|
-
# mutating the hash in place. The Normalizer is intentionally
|
|
16
|
-
# *side-effect-only*: it never reads from the Builder, the Caster, or the
|
|
17
|
-
# identifier classes, so it can be tested in isolation.
|
|
18
|
-
#
|
|
19
|
-
# Pre-processing blocks that need to surface extracted components to the
|
|
20
|
-
# Builder (e.g. letter-suffix Part components, embedded-edition objects)
|
|
21
|
-
# remain in Builder#build because they create local variables that flow
|
|
22
|
-
# into the construction phase. All other normalizations live here.
|
|
23
|
-
class ParserOutputNormalizer
|
|
24
|
-
# Range of years we treat as "looks like a calendar year" when
|
|
25
|
-
# disambiguating :edition_dash_year from :second_number.
|
|
26
|
-
VALID_YEAR_RANGE = (1901..2026).freeze
|
|
27
|
-
|
|
28
|
-
# Series that treat :edition_dash_year as a year-only edition when the
|
|
29
|
-
# dash year falls in VALID_YEAR_RANGE. For other series with a dash-year
|
|
30
|
-
# in this range, the dash-year is interpreted differently (or kept as
|
|
31
|
-
# a compound number, depending on the branch).
|
|
32
|
-
DASH_YEAR_AS_EDITION_SERIES = %w[HB CS FIPS].freeze
|
|
33
|
-
|
|
34
|
-
# Apply all normalizations to the parsed hash in the correct order.
|
|
35
|
-
# @param parsed_hash [Hash] parser output (mutated in place)
|
|
36
|
-
# @return [Hash] the same hash, normalized
|
|
37
|
-
def normalize(parsed_hash)
|
|
38
|
-
merge_edition_e_into_update(parsed_hash)
|
|
39
|
-
extract_embedded_edition_with_year(parsed_hash)
|
|
40
|
-
extract_embedded_edition_without_dash_year(parsed_hash)
|
|
41
|
-
split_second_number_edition_year(parsed_hash)
|
|
42
|
-
split_fips_month_year_after_part(parsed_hash)
|
|
43
|
-
disambiguate_ir_compound_vs_edition(parsed_hash)
|
|
44
|
-
disambiguate_dash_year(parsed_hash)
|
|
45
|
-
parsed_hash
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
private
|
|
49
|
-
|
|
50
|
-
# Pattern: "800-53r4/Upd3-2015"
|
|
51
|
-
# Parser captures "-2015" as :edition_e but it belongs on :update.
|
|
52
|
-
def merge_edition_e_into_update(parsed_hash)
|
|
53
|
-
return unless parsed_hash[:update_prefix] && parsed_hash[:update] && parsed_hash[:edition_e]
|
|
54
|
-
|
|
55
|
-
edition_id = parsed_hash[:edition_e][:edition_id]
|
|
56
|
-
parsed_hash[:update] = parsed_hash[:update].merge(update_year: edition_id)
|
|
57
|
-
parsed_hash.delete(:edition_e)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# Pattern: "44e2-1955"
|
|
61
|
-
# first_number="44e2", edition_dash_year="1955"
|
|
62
|
-
# Result: first_number="44", edition(type:"e", id:"2", additional_text:"1955")
|
|
63
|
-
def extract_embedded_edition_with_year(parsed_hash)
|
|
64
|
-
return unless parsed_hash[:first_number]&.to_s&.match?(/^[0-9]+[a-zA-Z]\d+$/) &&
|
|
65
|
-
parsed_hash[:edition_dash_year]
|
|
66
|
-
|
|
67
|
-
number_str = parsed_hash[:first_number].to_s
|
|
68
|
-
return unless (match_data = number_str.match(/^(\d+)([a-zA-Z])(\d+)$/))
|
|
69
|
-
|
|
70
|
-
base_number, edition_type, edition_id = match_data[1], match_data[2].downcase, match_data[3]
|
|
71
|
-
|
|
72
|
-
parsed_hash[:first_number] = Components::Code.new(value: base_number)
|
|
73
|
-
parsed_hash[:edition_with_year] = Components::Edition.new(
|
|
74
|
-
type: edition_type,
|
|
75
|
-
id: edition_id,
|
|
76
|
-
additional_text: parsed_hash[:edition_dash_year][:dash_year],
|
|
77
|
-
)
|
|
78
|
-
parsed_hash.delete(:edition_dash_year)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Pattern: "8115r1" (with no edition_dash_year)
|
|
82
|
-
# first_number="8115r1", no second_number
|
|
83
|
-
# Result: first_number="8115", edition(type:"r", id:"1")
|
|
84
|
-
#
|
|
85
|
-
# CRITICAL: Only when no :second_number is present, otherwise the
|
|
86
|
-
# compound-number logic in the Builder handles the pattern.
|
|
87
|
-
def extract_embedded_edition_without_dash_year(parsed_hash)
|
|
88
|
-
return if parsed_hash[:second_number]
|
|
89
|
-
return unless parsed_hash[:first_number]&.to_s&.match?(/^[0-9]+[a-zA-Z]\d+$/)
|
|
90
|
-
return if parsed_hash[:edition_dash_year]
|
|
91
|
-
|
|
92
|
-
number_str = parsed_hash[:first_number].to_s
|
|
93
|
-
return unless (match_data = number_str.match(/^(\d+)([a-zA-Z])(\d+)$/))
|
|
94
|
-
|
|
95
|
-
base_number, edition_type, edition_id = match_data[1], match_data[2].downcase, match_data[3]
|
|
96
|
-
|
|
97
|
-
parsed_hash[:first_number] = Components::Code.new(value: base_number)
|
|
98
|
-
parsed_hash[:edition_with_year] = Components::Edition.new(
|
|
99
|
-
type: edition_type,
|
|
100
|
-
id: edition_id,
|
|
101
|
-
)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Pattern: "105-1-1990"
|
|
105
|
-
# Parser returns second_number_edition_year={second_number:"1", dash_year:"1990"}
|
|
106
|
-
# Result: :second_number="1", plus either :edition_from_year (HB series)
|
|
107
|
-
# or :edition_dash_year (other series) for further downstream processing.
|
|
108
|
-
def split_second_number_edition_year(parsed_hash)
|
|
109
|
-
return unless parsed_hash[:second_number_edition_year]
|
|
110
|
-
|
|
111
|
-
combined = parsed_hash[:second_number_edition_year]
|
|
112
|
-
parsed_hash[:second_number] = combined[:second_number]
|
|
113
|
-
dash_year = combined[:dash_year]
|
|
114
|
-
|
|
115
|
-
is_handbook = safely_to_s(parsed_hash[:series]) == "HB"
|
|
116
|
-
if is_handbook && dash_year.to_s.match?(/^\d{4}$/)
|
|
117
|
-
parsed_hash[:edition_from_year] = Components::Edition.new(type: "e", id: dash_year)
|
|
118
|
-
else
|
|
119
|
-
parsed_hash[:edition_dash_year] = { dash_year: dash_year }
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
parsed_hash.delete(:second_number_edition_year)
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# Pattern: "11-1-Sep1977"
|
|
126
|
-
# Parser returns fips_month_year_after_part={second_number:"1", edition_month:"Sep", edition_year:"1977"}
|
|
127
|
-
# Result: :second_number="1", :edition_from_year(type:"e", id:"197709")
|
|
128
|
-
def split_fips_month_year_after_part(parsed_hash)
|
|
129
|
-
return unless parsed_hash[:fips_month_year_after_part]
|
|
130
|
-
|
|
131
|
-
combined = parsed_hash[:fips_month_year_after_part]
|
|
132
|
-
parsed_hash[:second_number] = combined[:second_number]
|
|
133
|
-
month_str = combined[:edition_month]
|
|
134
|
-
year_str = combined[:edition_year]
|
|
135
|
-
|
|
136
|
-
month_num = month_to_number(month_str)
|
|
137
|
-
edition_id = month_num&.positive? ? "#{year_str}#{format('%02d', month_num)}" : year_str
|
|
138
|
-
|
|
139
|
-
parsed_hash[:edition_from_year] = Components::Edition.new(type: "e", id: edition_id)
|
|
140
|
-
parsed_hash.delete(:fips_month_year_after_part)
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
# Pattern: "84-2946" with series=IR
|
|
144
|
-
# For IR (Interagency Report), a 2-digit first_number followed by a
|
|
145
|
-
# 4-digit dash-year is *almost* always a year-only edition (e.g.
|
|
146
|
-
# "76e1100") — except when the 4-digit number is clearly not a year
|
|
147
|
-
# (>= 2700) or there is an embedded :edition_e (compound number).
|
|
148
|
-
def disambiguate_ir_compound_vs_edition(parsed_hash)
|
|
149
|
-
return unless safely_to_s(parsed_hash[:series]) == "IR"
|
|
150
|
-
return unless parsed_hash[:first_number] && parsed_hash[:edition_dash_year]
|
|
151
|
-
|
|
152
|
-
first_num = parsed_hash[:first_number].to_s
|
|
153
|
-
dash_year = parsed_hash[:edition_dash_year][:dash_year].to_s
|
|
154
|
-
return unless first_num.match?(/^\d{2}$/) && dash_year.match?(/^\d{4}$/)
|
|
155
|
-
|
|
156
|
-
dash_year_num = dash_year.to_i
|
|
157
|
-
is_valid_year = VALID_YEAR_RANGE.cover?(dash_year_num)
|
|
158
|
-
has_embedded_edition = parsed_hash[:edition_e]
|
|
159
|
-
|
|
160
|
-
if is_valid_year && !has_embedded_edition
|
|
161
|
-
parsed_hash[:first_number] = Components::Code.new(value: first_num)
|
|
162
|
-
parsed_hash[:edition] = Components::Edition.new(type: "e", id: dash_year)
|
|
163
|
-
else
|
|
164
|
-
parsed_hash[:first_number] = Components::Code.new(value: "#{first_num}-#{dash_year}")
|
|
165
|
-
end
|
|
166
|
-
parsed_hash.delete(:edition_dash_year)
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# Pattern: "250-1039" or "15-1000" or "1946-1947" (RPT)
|
|
170
|
-
# When the parser captures a :first_number plus :edition_dash_year, the
|
|
171
|
-
# dash year is interpreted differently per series:
|
|
172
|
-
# - RPT: always join into a compound (date range), regardless of year
|
|
173
|
-
# - GCR: always convert dash-year to year-only edition
|
|
174
|
-
# - IR: convert dash-year to year-only edition only if it is a valid year
|
|
175
|
-
# - HB/CS/FIPS: convert dash-year to year-only edition only if valid year
|
|
176
|
-
# - others: drop :edition_dash_year, or stash as :second_number if < 1900
|
|
177
|
-
def disambiguate_dash_year(parsed_hash)
|
|
178
|
-
return unless parsed_hash[:first_number] && parsed_hash[:edition_dash_year]
|
|
179
|
-
return if parsed_hash[:first_number].to_s.match?(/^[0-9]+[a-zA-Z]\d+$/)
|
|
180
|
-
|
|
181
|
-
dash_year = parsed_hash[:edition_dash_year][:dash_year].to_s
|
|
182
|
-
series = safely_to_s(parsed_hash[:series])
|
|
183
|
-
dash_year_num = dash_year.to_i
|
|
184
|
-
is_valid_year = VALID_YEAR_RANGE.cover?(dash_year_num)
|
|
185
|
-
|
|
186
|
-
if series == "RPT"
|
|
187
|
-
# RPT date ranges: "1946-1947" -> "1946-1947"
|
|
188
|
-
parsed_hash[:first_number] =
|
|
189
|
-
Components::Code.new(value: "#{parsed_hash[:first_number]}-#{dash_year}")
|
|
190
|
-
parsed_hash.delete(:edition_dash_year)
|
|
191
|
-
elsif series == "GCR"
|
|
192
|
-
# GCR always converts dash-year to edition
|
|
193
|
-
stash_edition_from_year(parsed_hash, dash_year)
|
|
194
|
-
elsif series == "IR" && is_valid_year
|
|
195
|
-
# IR converts valid years to edition
|
|
196
|
-
stash_edition_from_year(parsed_hash, dash_year)
|
|
197
|
-
elsif DASH_YEAR_AS_EDITION_SERIES.include?(series) && is_valid_year
|
|
198
|
-
# HB/CS/FIPS: convert dash-year to edition only if valid year
|
|
199
|
-
stash_edition_from_year(parsed_hash, dash_year)
|
|
200
|
-
elsif dash_year_num < 1900
|
|
201
|
-
# For other series, dash-year < 1900 is a second_number
|
|
202
|
-
parsed_hash[:second_number] = dash_year
|
|
203
|
-
parsed_hash.delete(:edition_dash_year)
|
|
204
|
-
end
|
|
205
|
-
# Other cases (non-HB/CS/FIPS with a valid year): leave the keys alone
|
|
206
|
-
# so downstream Builder logic can handle them.
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
# Convert dash-year into a year-only Edition and stash for the Builder
|
|
210
|
-
# to assign after construction.
|
|
211
|
-
def stash_edition_from_year(parsed_hash, dash_year)
|
|
212
|
-
parsed_hash[:edition_from_year] = Components::Edition.new(type: "e", id: dash_year)
|
|
213
|
-
parsed_hash.delete(:edition_dash_year)
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
# Safely coerce arbitrary values to strings (parsers can hand us Parslet
|
|
217
|
-
# nodes that raise on #to_s in some scenarios).
|
|
218
|
-
def safely_to_s(value)
|
|
219
|
-
value.to_s
|
|
220
|
-
rescue StandardError
|
|
221
|
-
""
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
# Convert a month abbreviation or name to a 1-based month number.
|
|
225
|
-
# Returns nil when the value is not a recognizable month.
|
|
226
|
-
def month_to_number(month_str)
|
|
227
|
-
Date::ABBR_MONTHNAMES.index(month_str) ||
|
|
228
|
-
Date::MONTHNAMES.index(month_str) ||
|
|
229
|
-
month_str.to_i
|
|
230
|
-
end
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
end
|