pubid 2.0.0.pre.alpha.2 → 2.0.0.pre.alpha.4
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 +4 -55
- data/lib/pubid/amca/identifiers/base.rb +58 -47
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -21
- data/lib/pubid/amca/identifiers/publication.rb +0 -17
- data/lib/pubid/amca/identifiers/standard.rb +0 -4
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_generator.rb +2 -1
- 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 +33 -74
- data/lib/pubid/api/identifier.rb +5 -52
- data/lib/pubid/api/identifiers/base.rb +2 -14
- 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 +0 -20
- 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 +0 -16
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +5 -20
- 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 +7 -55
- 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 +29 -15
- 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/parser.rb +4 -0
- 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 +46 -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/single_identifier.rb +3 -1
- 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 +3 -11
- 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 +5 -85
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -36
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +8 -48
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +8 -39
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +2 -55
- data/lib/pubid/bsi/identifiers/amendment.rb +2 -22
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +1 -6
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -87
- data/lib/pubid/bsi/identifiers/committee_document.rb +0 -16
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -87
- data/lib/pubid/bsi/identifiers/corrigendum.rb +2 -10
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +0 -36
- data/lib/pubid/bsi/identifiers/disc.rb +0 -29
- data/lib/pubid/bsi/identifiers/draft_document.rb +2 -46
- data/lib/pubid/bsi/identifiers/electronic_book.rb +2 -38
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +2 -18
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +0 -47
- data/lib/pubid/bsi/identifiers/flex.rb +0 -35
- data/lib/pubid/bsi/identifiers/handbook.rb +1 -15
- data/lib/pubid/bsi/identifiers/index.rb +0 -32
- data/lib/pubid/bsi/identifiers/method.rb +0 -41
- data/lib/pubid/bsi/identifiers/national_annex.rb +4 -29
- data/lib/pubid/bsi/identifiers/practice_guide.rb +1 -6
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +2 -54
- data/lib/pubid/bsi/identifiers/published_document.rb +2 -54
- data/lib/pubid/bsi/identifiers/section.rb +0 -30
- data/lib/pubid/bsi/identifiers/set.rb +3 -20
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +0 -9
- data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -24
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +0 -46
- data/lib/pubid/bsi/identifiers/technical_specification.rb +2 -47
- data/lib/pubid/bsi/identifiers/test_method.rb +0 -32
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +2 -17
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +33 -78
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +232 -2
- 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 +53 -68
- 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 +11 -40
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +9 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +0 -10
- data/lib/pubid/cen_cenelec/identifiers/base.rb +2 -45
- 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 +0 -27
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +0 -15
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +0 -4
- 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 +9 -90
- 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 +172 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +10 -57
- data/lib/pubid/cie/single_identifier.rb +4 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +47 -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 +9 -59
- data/lib/pubid/csa/identifiers/base.rb +0 -123
- data/lib/pubid/csa/identifiers/cec.rb +0 -103
- data/lib/pubid/csa/identifiers/series.rb +0 -104
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/single_identifier.rb +1 -1
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +46 -1
- data/lib/pubid/etsi/components/code.rb +10 -9
- data/lib/pubid/etsi/components/version.rb +0 -5
- data/lib/pubid/etsi/identifier.rb +4 -55
- data/lib/pubid/etsi/identifiers/base.rb +31 -27
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +1 -11
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +44 -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 +92 -18
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +7 -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 +55 -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 +5 -33
- 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 +23 -26
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +35 -24
- 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 +17 -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 +3 -35
- data/lib/pubid/iec/identifiers/vap_identifier.rb +24 -21
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +2 -50
- 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 +43 -67
- 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 +5 -52
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +0 -9
- data/lib/pubid/ieee/identifiers/base.rb +221 -556
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +0 -10
- data/lib/pubid/ieee/identifiers/corrigendum.rb +0 -12
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +0 -10
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +0 -4
- data/lib/pubid/ieee/identifiers/dual_published.rb +0 -4
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +0 -9
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +0 -10
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +0 -18
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +0 -6
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +0 -7
- data/lib/pubid/ieee/identifiers/si_standard.rb +0 -38
- 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 +66 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +7 -59
- data/lib/pubid/iho/identifiers/base.rb +64 -31
- 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 +52 -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 +219 -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/single_identifier.rb +0 -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 +177 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +9 -7
- data/lib/pubid/itu/components/sector.rb +15 -4
- data/lib/pubid/itu/components/series.rb +0 -4
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +4 -116
- 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 +124 -128
- 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 +44 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifier.rb +0 -43
- data/lib/pubid/jcgm/identifiers/amendment.rb +0 -9
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +0 -12
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +0 -8
- 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 +120 -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 +8 -60
- data/lib/pubid/nist/identifiers/base.rb +564 -492
- 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 +428 -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 +86 -4
- data/lib/pubid/oiml/builder.rb +21 -3
- data/lib/pubid/oiml/components/code.rb +17 -0
- data/lib/pubid/oiml/identifier.rb +40 -46
- data/lib/pubid/oiml/identifiers/annex.rb +13 -46
- data/lib/pubid/oiml/identifiers/errata.rb +15 -0
- data/lib/pubid/oiml/identifiers.rb +1 -1
- data/lib/pubid/oiml/parser.rb +59 -12
- data/lib/pubid/oiml/renderer.rb +171 -0
- data/lib/pubid/oiml/single_identifier.rb +61 -42
- data/lib/pubid/oiml/supplement_identifier.rb +31 -17
- 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 +4 -55
- data/lib/pubid/plateau/identifiers/base.rb +45 -36
- data/lib/pubid/plateau/identifiers/handbook.rb +0 -6
- data/lib/pubid/plateau/identifiers/technical_report.rb +0 -4
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +0 -4
- 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 +4 -35
- data/lib/pubid/sae/identifiers/base.rb +26 -31
- 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 +45 -7
- data/lib/tasks/export.rake +6 -5
- data/lib/tasks/website-data.json +1940 -1882
- metadata +75 -45
- 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/identifiers/base.rb +0 -36
- 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
|
@@ -5,11 +5,19 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Asme
|
|
7
7
|
module Components
|
|
8
|
+
# Code component for ASME identifiers.
|
|
9
|
+
#
|
|
10
|
+
# Stays independent of Pubid::Components::Code because ASME uses
|
|
11
|
+
# +designator+ (a flavor-specific letter prefix) plus +number+.
|
|
8
12
|
class Code < Lutaml::Model::Serializable
|
|
9
|
-
attribute :designator, :string
|
|
10
|
-
attribute :number, :string
|
|
13
|
+
attribute :designator, :string
|
|
14
|
+
attribute :number, :string
|
|
11
15
|
|
|
12
16
|
def to_s
|
|
17
|
+
render
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def render(context: nil)
|
|
13
21
|
"#{designator}#{number}"
|
|
14
22
|
end
|
|
15
23
|
end
|
|
@@ -10,52 +10,6 @@ module Pubid
|
|
|
10
10
|
parsed = parser.parse(str)
|
|
11
11
|
builder.build(parsed)
|
|
12
12
|
end
|
|
13
|
-
|
|
14
|
-
# Factory that builds an ASME identifier from a hash of primitives.
|
|
15
|
-
# Default is {Identifiers::Standard}. ASME's Code Component has
|
|
16
|
-
# `:designator` (leading letters, e.g. "B") and `:number` (rest,
|
|
17
|
-
# e.g. "16.34"); `.create` accepts either an already-split pair or
|
|
18
|
-
# a combined `:code` string which it splits at the first digit.
|
|
19
|
-
def self.create(**opts)
|
|
20
|
-
Identifiers::Standard.new(**coerce_create_attrs(opts))
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.coerce_create_attrs(opts)
|
|
24
|
-
attrs = { publisher: (opts[:publisher] || "ASME").to_s }
|
|
25
|
-
|
|
26
|
-
if opts[:designator] || opts[:number]
|
|
27
|
-
attrs[:code] = Pubid::Asme::Components::Code.new(
|
|
28
|
-
designator: opts[:designator]&.to_s,
|
|
29
|
-
number: opts[:number]&.to_s,
|
|
30
|
-
)
|
|
31
|
-
elsif (combined = opts[:code])
|
|
32
|
-
designator, number = split_asme_code(combined.to_s)
|
|
33
|
-
attrs[:code] = Pubid::Asme::Components::Code.new(
|
|
34
|
-
designator: designator,
|
|
35
|
-
number: number,
|
|
36
|
-
)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
%i[year reaffirmation language csa_number draft_year
|
|
40
|
-
revision_note parenthetical_revision ptc_suffix
|
|
41
|
-
joint_publisher first_publisher first_code].each do |k|
|
|
42
|
-
attrs[k] = opts[k].to_s unless opts[k].nil?
|
|
43
|
-
end
|
|
44
|
-
attrs[:handbook] = opts[:handbook] if opts.key?(:handbook)
|
|
45
|
-
attrs
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# ASME codes pair a letter designator with a numeric/dotted number.
|
|
49
|
-
# Split at the first digit. "B16.34" → ["B", "16.34"]; "Y14.5" →
|
|
50
|
-
# ["Y", "14.5"]; "BPVC.III.1.NB" → ["BPVC.III.1.NB", nil] (no
|
|
51
|
-
# leading all-letters before the first digit — pass through).
|
|
52
|
-
def self.split_asme_code(str)
|
|
53
|
-
match = str.match(/\A([A-Za-z]+)(\d.*)\z/)
|
|
54
|
-
return match.captures if match
|
|
55
|
-
|
|
56
|
-
[str, nil]
|
|
57
|
-
end
|
|
58
|
-
private_class_method :coerce_create_attrs, :split_asme_code
|
|
59
13
|
end
|
|
60
14
|
end
|
|
61
15
|
end
|
|
@@ -4,66 +4,6 @@ module Pubid
|
|
|
4
4
|
module Asme
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Base < SingleIdentifier
|
|
7
|
-
def to_s
|
|
8
|
-
# Handle joint published identifiers
|
|
9
|
-
parts = []
|
|
10
|
-
if first_publisher && first_code
|
|
11
|
-
# CSA B44.10/ASME A17.10 or API 579-2/ASME PTB-14 format
|
|
12
|
-
parts << first_publisher
|
|
13
|
-
parts << first_code
|
|
14
|
-
parts << "/#{second_publisher}" if second_publisher
|
|
15
|
-
parts << code.to_s if code && code.to_s != ""
|
|
16
|
-
|
|
17
|
-
elsif joint_publisher
|
|
18
|
-
# ISO/ASME or ASME/ANS format
|
|
19
|
-
parts << joint_publisher
|
|
20
|
-
parts << code.to_s if code && code.to_s != ""
|
|
21
|
-
|
|
22
|
-
else
|
|
23
|
-
# Standard ASME format
|
|
24
|
-
parts << publisher if publisher
|
|
25
|
-
parts << code.to_s if code
|
|
26
|
-
|
|
27
|
-
end
|
|
28
|
-
result = parts.join(" ")
|
|
29
|
-
|
|
30
|
-
# PTC suffix (space-separated)
|
|
31
|
-
if ptc_suffix
|
|
32
|
-
result += " #{ptc_suffix}"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# CSA dual-published (for ASME/CSA format)
|
|
36
|
-
if csa_number
|
|
37
|
-
result += "/CSA #{csa_number}"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Handbook keyword
|
|
41
|
-
if handbook
|
|
42
|
-
result += " Handbook"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Year
|
|
46
|
-
if draft_year
|
|
47
|
-
result += "-#{draft_year}"
|
|
48
|
-
elsif year
|
|
49
|
-
result += "-#{year}"
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Parenthetical revision (comes after year)
|
|
53
|
-
result += " #{parenthetical_revision}" if parenthetical_revision
|
|
54
|
-
|
|
55
|
-
# Language (can appear in rendered output)
|
|
56
|
-
result += " (#{language})" if language
|
|
57
|
-
|
|
58
|
-
# Reaffirmation
|
|
59
|
-
result += " (#{reaffirmation})" if reaffirmation
|
|
60
|
-
|
|
61
|
-
# Revision note
|
|
62
|
-
result += " #{revision_note}" if revision_note
|
|
63
|
-
|
|
64
|
-
# Normalize all em-dashes (–, —) and en-dashes to regular dash (-)
|
|
65
|
-
result.gsub(/[–—]/, "-")
|
|
66
|
-
end
|
|
67
7
|
end
|
|
68
8
|
end
|
|
69
9
|
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Asme
|
|
5
|
+
# Human-readable renderer for ASME identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "ASME B16.5-2020"
|
|
9
|
+
# "CSA B44.10/ASME A17.10"
|
|
10
|
+
# "ASME BPVC III.1.NB-2023"
|
|
11
|
+
# "ASME PTC 4-2013"
|
|
12
|
+
#
|
|
13
|
+
# The renderer is registered as the `:human` format in the ASME format
|
|
14
|
+
# registry and invoked via `render(format: :human)`.
|
|
15
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
16
|
+
def render(context: nil, **opts)
|
|
17
|
+
id = @id
|
|
18
|
+
parts = []
|
|
19
|
+
|
|
20
|
+
if id.first_publisher && id.first_code
|
|
21
|
+
# CSA B44.10/ASME A17.10 or API 579-2/ASME PTB-14 format
|
|
22
|
+
parts << id.first_publisher
|
|
23
|
+
parts << id.first_code
|
|
24
|
+
parts << "/#{id.second_publisher}" if id.second_publisher
|
|
25
|
+
parts << id.code.to_s if id.code && id.code.to_s != ""
|
|
26
|
+
elsif id.joint_publisher
|
|
27
|
+
# ISO/ASME or ASME/ANS format
|
|
28
|
+
parts << id.joint_publisher
|
|
29
|
+
parts << id.code.to_s if id.code && id.code.to_s != ""
|
|
30
|
+
else
|
|
31
|
+
# Standard ASME format
|
|
32
|
+
parts << id.publisher if id.publisher
|
|
33
|
+
parts << id.code.to_s if id.code
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
result = parts.join(" ")
|
|
37
|
+
|
|
38
|
+
if id.ptc_suffix
|
|
39
|
+
result += " #{id.ptc_suffix}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if id.csa_number
|
|
43
|
+
result += "/CSA #{id.csa_number}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if id.handbook
|
|
47
|
+
result += " Handbook"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if id.draft_year
|
|
51
|
+
result += "-#{id.draft_year}"
|
|
52
|
+
elsif id.year
|
|
53
|
+
result += "-#{id.year}"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
result += " #{id.parenthetical_revision}" if id.parenthetical_revision
|
|
57
|
+
result += " (#{id.language})" if id.language
|
|
58
|
+
result += " (#{id.reaffirmation})" if id.reaffirmation
|
|
59
|
+
result += " #{id.revision_note}" if id.revision_note
|
|
60
|
+
|
|
61
|
+
# Normalize all em-dashes and en-dashes to regular dash
|
|
62
|
+
result.gsub(/[–—]/, "-")
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Asme
|
|
5
|
-
|
|
5
|
+
# Descends from Pubid::Asme::Identifier (the flavor base) so every concrete
|
|
6
|
+
# ASME identifier is `is_a?(Pubid::Asme::Identifier)`.
|
|
7
|
+
class SingleIdentifier < Identifier
|
|
6
8
|
# Generate URN for this identifier
|
|
7
9
|
#
|
|
8
10
|
# @return [String] URN representation
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Asme
|
|
5
|
+
# Parses ASME URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:asme:{publisher}:{code}:{year}
|
|
9
|
+
#
|
|
10
|
+
# publisher is the lowercase publisher string. code is the alphanumeric
|
|
11
|
+
# designation (e.g., "B16.5", "PTC1", "BPVC-2023"). The year separator
|
|
12
|
+
# in human-readable form is `-`, not `:`.
|
|
13
|
+
#
|
|
14
|
+
# Examples:
|
|
15
|
+
# - urn:asme:asme:B16.5:2020 → ASME B16.5-2020
|
|
16
|
+
# - urn:asme:asme:PTC1:2020 → ASME PTC1-2020
|
|
17
|
+
# - urn:asme:asme:BPVC-2023 → ASME BPVC-2023
|
|
18
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
19
|
+
def parse_urn(urn)
|
|
20
|
+
body = strip_namespace(urn)
|
|
21
|
+
parts = split_parts(body)
|
|
22
|
+
|
|
23
|
+
_publisher, code, year = parts
|
|
24
|
+
|
|
25
|
+
text = "ASME #{code}"
|
|
26
|
+
text += "-#{year}" if year
|
|
27
|
+
flavor_parse(text)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/pubid/asme.rb
CHANGED
|
@@ -7,13 +7,54 @@ module Pubid
|
|
|
7
7
|
autoload :Identifier, "#{__dir__}/asme/identifier"
|
|
8
8
|
autoload :Identifiers, "#{__dir__}/asme/identifiers"
|
|
9
9
|
autoload :Parser, "#{__dir__}/asme/parser"
|
|
10
|
-
autoload :
|
|
10
|
+
autoload :Renderer, "#{__dir__}/asme/renderer"
|
|
11
11
|
autoload :SingleIdentifier, "#{__dir__}/asme/single_identifier"
|
|
12
12
|
autoload :UrnGenerator, "#{__dir__}/asme/urn_generator"
|
|
13
|
+
autoload :UrnParser, "#{__dir__}/asme/urn_parser"
|
|
13
14
|
|
|
14
15
|
def self.parse(str)
|
|
15
16
|
Identifier.parse(str)
|
|
16
17
|
end
|
|
18
|
+
|
|
19
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
20
|
+
SingleIdentifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
21
|
+
SingleIdentifier.format_registry.register(:human, renderer: Asme::Renderer)
|
|
22
|
+
|
|
23
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
24
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
25
|
+
def self.identifier_types
|
|
26
|
+
@identifier_types ||= Identifiers.constants
|
|
27
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
28
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
29
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Build typed stage index from identifier types
|
|
33
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
34
|
+
def self.all_typed_stages
|
|
35
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
36
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
37
|
+
klass.const_get(:TYPED_STAGES)
|
|
38
|
+
else
|
|
39
|
+
[]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Lookup: type code -> identifier class
|
|
45
|
+
# @param code [String, Symbol] the type key to find
|
|
46
|
+
# @return [Class, nil] the matching identifier class
|
|
47
|
+
def self.locate_type(code)
|
|
48
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Lookup: abbreviation -> typed stage
|
|
52
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
53
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
54
|
+
def self.locate_stage(abbr)
|
|
55
|
+
abbr_str = abbr.to_s.upcase
|
|
56
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
57
|
+
end
|
|
17
58
|
end
|
|
18
59
|
end
|
|
19
60
|
|
|
@@ -5,6 +5,11 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Astm
|
|
7
7
|
module Components
|
|
8
|
+
# Code component for ASTM identifiers.
|
|
9
|
+
#
|
|
10
|
+
# Stays independent of Pubid::Components::Code because ASTM has a
|
|
11
|
+
# rich taxonomy: +letter+ (A-G for standards), +suffix+ (A/B/C for
|
|
12
|
+
# data series), +subseries+ (S1/S4/S10), and +dual_m+ (metric flag).
|
|
8
13
|
class Code < Lutaml::Model::Serializable
|
|
9
14
|
attribute :letter, :string # A-G for standards
|
|
10
15
|
attribute :number, :string # Main number
|
|
@@ -27,6 +32,10 @@ module Pubid
|
|
|
27
32
|
end
|
|
28
33
|
result
|
|
29
34
|
end
|
|
35
|
+
|
|
36
|
+
def render(context: nil)
|
|
37
|
+
to_s
|
|
38
|
+
end
|
|
30
39
|
end
|
|
31
40
|
end
|
|
32
41
|
end
|
|
@@ -10,83 +10,6 @@ module Pubid
|
|
|
10
10
|
parsed = parser.parse(str)
|
|
11
11
|
builder.build(parsed)
|
|
12
12
|
end
|
|
13
|
-
|
|
14
|
-
# Factory that builds an ASTM identifier from a hash of primitives.
|
|
15
|
-
# Default is {Identifiers::Standard}.
|
|
16
|
-
#
|
|
17
|
-
# ASTM's Code Component has :letter (single letter A–Z) + :number
|
|
18
|
-
# (rest); `.create` accepts either an already-split pair or a
|
|
19
|
-
# combined `:code` string which it splits at the first digit.
|
|
20
|
-
TYPE_KEY_TO_KLASS = {
|
|
21
|
-
standard: "Standard",
|
|
22
|
-
adjunct: "Adjunct",
|
|
23
|
-
manual: "Manual",
|
|
24
|
-
monograph: "Monograph",
|
|
25
|
-
research_report: "ResearchReport",
|
|
26
|
-
technical_report: "TechnicalReport",
|
|
27
|
-
data_series: "DataSeries",
|
|
28
|
-
iso_dual_published: "IsoDualPublished",
|
|
29
|
-
work_in_progress: "WorkInProgress",
|
|
30
|
-
}.freeze
|
|
31
|
-
|
|
32
|
-
def self.create(type: nil, **opts)
|
|
33
|
-
klass = resolve_create_class(type)
|
|
34
|
-
klass.new(**coerce_create_attrs(opts, klass: klass))
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def self.resolve_create_class(type)
|
|
38
|
-
return Identifiers::Standard if type.nil?
|
|
39
|
-
|
|
40
|
-
klass_name = TYPE_KEY_TO_KLASS[type.to_sym]
|
|
41
|
-
raise ArgumentError, "Unknown ASTM type: #{type.inspect}" unless klass_name
|
|
42
|
-
|
|
43
|
-
Identifiers.const_get(klass_name)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def self.coerce_create_attrs(opts, klass:)
|
|
47
|
-
attrs = { publisher: (opts[:publisher] || "ASTM").to_s }
|
|
48
|
-
|
|
49
|
-
if opts[:letter] || opts[:number]
|
|
50
|
-
attrs[:code] = Pubid::Astm::Components::Code.new(
|
|
51
|
-
letter: opts[:letter]&.to_s,
|
|
52
|
-
number: opts[:number]&.to_s,
|
|
53
|
-
suffix: opts[:suffix]&.to_s,
|
|
54
|
-
subseries: opts[:subseries]&.to_s,
|
|
55
|
-
dual_m: opts[:dual_m],
|
|
56
|
-
)
|
|
57
|
-
elsif (combined = opts[:code])
|
|
58
|
-
letter, number = split_astm_code(combined.to_s)
|
|
59
|
-
attrs[:code] = Pubid::Astm::Components::Code.new(
|
|
60
|
-
letter: letter, number: number,
|
|
61
|
-
)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
attrs[:year] = opts[:year].to_s if opts[:year]
|
|
65
|
-
attrs[:format_suffix] = opts[:format_suffix].to_s if opts[:format_suffix]
|
|
66
|
-
|
|
67
|
-
# Pass through subclass-specific kwargs (designation, edition,
|
|
68
|
-
# committee, …) when the class declares them.
|
|
69
|
-
opts.each do |k, v|
|
|
70
|
-
next if attrs.key?(k)
|
|
71
|
-
next if %i[publisher code letter number suffix subseries
|
|
72
|
-
dual_m year format_suffix].include?(k)
|
|
73
|
-
attrs[k] = v if klass.attributes.key?(k)
|
|
74
|
-
end
|
|
75
|
-
attrs
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
# ASTM codes use a single letter prefix (A–Z) followed by digits.
|
|
79
|
-
# "A36" → ["A", "36"]; "E1444" → ["E", "1444"]. Codes without a
|
|
80
|
-
# leading letter (data series numbers, etc.) pass through with
|
|
81
|
-
# letter: nil.
|
|
82
|
-
def self.split_astm_code(str)
|
|
83
|
-
match = str.match(/\A([A-Za-z])(\d.*)\z/)
|
|
84
|
-
return match.captures if match
|
|
85
|
-
|
|
86
|
-
[nil, str]
|
|
87
|
-
end
|
|
88
|
-
private_class_method :resolve_create_class, :coerce_create_attrs,
|
|
89
|
-
:split_astm_code
|
|
90
13
|
end
|
|
91
14
|
end
|
|
92
15
|
end
|
|
@@ -7,14 +7,6 @@ module Pubid
|
|
|
7
7
|
attribute :designation, :string # D2148, F3504, G0088, C062702
|
|
8
8
|
attribute :ea_suffix, :boolean # -EA
|
|
9
9
|
attribute :dvd_suffix, :boolean # DVD
|
|
10
|
-
|
|
11
|
-
def to_s
|
|
12
|
-
result = []
|
|
13
|
-
# Only include publisher for simple adjuncts (no EA or DVD suffix)
|
|
14
|
-
result << publisher if publisher && !ea_suffix && !dvd_suffix
|
|
15
|
-
result << "ADJ#{designation}#{'-EA' if ea_suffix}#{'DVD' if dvd_suffix}"
|
|
16
|
-
result.compact.join(" ")
|
|
17
|
-
end
|
|
18
10
|
end
|
|
19
11
|
end
|
|
20
12
|
end
|
|
@@ -5,20 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
class DataSeries < Base
|
|
7
7
|
attribute :hol_suffix, :boolean # HOL suffix
|
|
8
|
-
|
|
9
|
-
def to_s
|
|
10
|
-
parts = []
|
|
11
|
-
parts << publisher if publisher
|
|
12
|
-
|
|
13
|
-
result = parts.join(" ")
|
|
14
|
-
result += " " if publisher && !result.end_with?(" ")
|
|
15
|
-
|
|
16
|
-
result += "DS"
|
|
17
|
-
result += code.to_s if code
|
|
18
|
-
result += "HOL" if hol_suffix
|
|
19
|
-
result += format_suffix if format_suffix
|
|
20
|
-
result
|
|
21
|
-
end
|
|
22
8
|
end
|
|
23
9
|
end
|
|
24
10
|
end
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "../../iso/components/publisher"
|
|
4
|
-
require_relative "../../components/date"
|
|
5
|
-
|
|
6
3
|
module Pubid
|
|
7
4
|
module Astm
|
|
8
5
|
module Identifiers
|
|
@@ -28,45 +25,23 @@ module Pubid
|
|
|
28
25
|
# Rendering is identical to Standard
|
|
29
26
|
# Example: ASTM 52303-24e1
|
|
30
27
|
|
|
31
|
-
# Convert to ISO/ASTM dual-published format
|
|
32
|
-
#
|
|
28
|
+
# Convert to ISO/ASTM dual-published format.
|
|
29
|
+
# Uses Pubid::Iso.build so this flavor never reaches into ISO's
|
|
30
|
+
# internal class hierarchy.
|
|
31
|
+
# @return [Pubid::Iso::Identifier] ISO version
|
|
33
32
|
#
|
|
34
33
|
# @example Convert ASTM to ISO format
|
|
35
34
|
# astm = Pubid::Astm.parse("ASTM 52303-24e1")
|
|
36
35
|
# iso = astm.to_iso_identifier
|
|
37
36
|
# iso.to_s # => "ISO/ASTM 52303:2024"
|
|
38
37
|
def to_iso_identifier
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
require_relative "../../components/publisher"
|
|
42
|
-
|
|
43
|
-
iso = Pubid::Iso::Identifiers::InternationalStandard.new
|
|
44
|
-
|
|
45
|
-
# Set publisher as ISO with ASTM as copublisher (in Publisher component)
|
|
46
|
-
iso.publisher = Pubid::Iso::Components::Publisher.new(
|
|
38
|
+
Pubid::Iso.build(
|
|
39
|
+
type: :is,
|
|
47
40
|
publisher: "ISO",
|
|
48
|
-
|
|
41
|
+
copublishers: ["ASTM"],
|
|
42
|
+
number: code&.number,
|
|
43
|
+
year: year&.to_s,
|
|
49
44
|
)
|
|
50
|
-
|
|
51
|
-
# Also set copublishers attribute (array of Publisher objects) for rendering
|
|
52
|
-
astm_publisher = ::Pubid::Components::Publisher.new(body: "ASTM")
|
|
53
|
-
iso.copublishers = [astm_publisher]
|
|
54
|
-
|
|
55
|
-
# Set code number (same as ASTM) - use ISO Code component
|
|
56
|
-
if code
|
|
57
|
-
iso_code = Pubid::Iso::Components::Code.new
|
|
58
|
-
iso_code.number = code.number
|
|
59
|
-
iso.number = iso_code
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Set year as date component - use base Date component
|
|
63
|
-
if year
|
|
64
|
-
iso_date = ::Pubid::Components::Date.new
|
|
65
|
-
iso_date.year = year.to_s
|
|
66
|
-
iso.date = iso_date
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
iso
|
|
70
45
|
end
|
|
71
46
|
end
|
|
72
47
|
end
|
|
@@ -7,33 +7,6 @@ module Pubid
|
|
|
7
7
|
attribute :edition, :string # 9TH, 2ND
|
|
8
8
|
attribute :supplement, :boolean # -SUP-
|
|
9
9
|
attribute :tp_designation, :string # TP for technical publications
|
|
10
|
-
|
|
11
|
-
def to_s
|
|
12
|
-
parts = []
|
|
13
|
-
parts << publisher if publisher
|
|
14
|
-
parts << "MNL"
|
|
15
|
-
parts << "TP" if tp_designation
|
|
16
|
-
parts << code.number if code
|
|
17
|
-
|
|
18
|
-
result = parts.join
|
|
19
|
-
|
|
20
|
-
# Edition with dash separator
|
|
21
|
-
result += "-#{edition}" if edition
|
|
22
|
-
|
|
23
|
-
# Add separator after publisher
|
|
24
|
-
if publisher
|
|
25
|
-
# Insert space after publisher
|
|
26
|
-
result = "#{publisher} #{result[publisher.length..]}"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Add supplement if present
|
|
30
|
-
result += "-SUP" if supplement
|
|
31
|
-
|
|
32
|
-
# Add format suffix (already has dash from builder)
|
|
33
|
-
result += format_suffix if format_suffix
|
|
34
|
-
|
|
35
|
-
result
|
|
36
|
-
end
|
|
37
10
|
end
|
|
38
11
|
end
|
|
39
12
|
end
|
|
@@ -5,20 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Monograph < Base
|
|
7
7
|
attribute :edition, :string # 2ND, 4TH
|
|
8
|
-
|
|
9
|
-
def to_s
|
|
10
|
-
parts = []
|
|
11
|
-
parts << publisher if publisher
|
|
12
|
-
|
|
13
|
-
result = parts.join(" ")
|
|
14
|
-
result += " " if publisher && !result.end_with?(" ")
|
|
15
|
-
|
|
16
|
-
result += "MONO"
|
|
17
|
-
result += code.number if code
|
|
18
|
-
result += "-#{edition}" if edition
|
|
19
|
-
result += format_suffix if format_suffix
|
|
20
|
-
result
|
|
21
|
-
end
|
|
22
8
|
end
|
|
23
9
|
end
|
|
24
10
|
end
|
|
@@ -5,13 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
class ResearchReport < Base
|
|
7
7
|
attribute :committee, :string # A01, C09
|
|
8
|
-
|
|
9
|
-
def to_s
|
|
10
|
-
parts = []
|
|
11
|
-
parts << publisher if publisher
|
|
12
|
-
parts << "RR:#{committee}-#{code.number}" if committee && code
|
|
13
|
-
parts.join(" ")
|
|
14
|
-
end
|
|
15
8
|
end
|
|
16
9
|
end
|
|
17
10
|
end
|
|
@@ -7,45 +7,6 @@ module Pubid
|
|
|
7
7
|
attribute :sub_year, :string # a, b, c
|
|
8
8
|
attribute :reapproval, :string # (2023)
|
|
9
9
|
attribute :edition, :string # e1
|
|
10
|
-
|
|
11
|
-
def to_s
|
|
12
|
-
parts = []
|
|
13
|
-
parts << publisher if publisher
|
|
14
|
-
|
|
15
|
-
# Code with potential dual unit
|
|
16
|
-
if code
|
|
17
|
-
code_str = code.to_s
|
|
18
|
-
# Check if this is a dual unit designation
|
|
19
|
-
if code.dual_m
|
|
20
|
-
# F1862/F1862M format
|
|
21
|
-
base_code = "#{code.letter}#{code.number}"
|
|
22
|
-
code_str = "#{base_code}/#{base_code}M"
|
|
23
|
-
end
|
|
24
|
-
parts << code_str
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Join parts with space (ASTM E2938)
|
|
28
|
-
result = parts.join(" ")
|
|
29
|
-
|
|
30
|
-
# Append year directly without space
|
|
31
|
-
if year
|
|
32
|
-
result += "-#{year_portion}"
|
|
33
|
-
result += sub_year if sub_year
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Append reapproval
|
|
37
|
-
result += "(#{reapproval})" if reapproval
|
|
38
|
-
|
|
39
|
-
# Append edition
|
|
40
|
-
result += "e#{edition}" if edition
|
|
41
|
-
|
|
42
|
-
result
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def year_portion
|
|
46
|
-
# Convert 4-digit to 2-digit (e.g., 2015 → 15)
|
|
47
|
-
year.to_s.length == 4 ? year.to_s[-2..] : year.to_s
|
|
48
|
-
end
|
|
49
10
|
end
|
|
50
11
|
end
|
|
51
12
|
end
|
|
@@ -4,19 +4,6 @@ module Pubid
|
|
|
4
4
|
module Astm
|
|
5
5
|
module Identifiers
|
|
6
6
|
class TechnicalReport < Base
|
|
7
|
-
def to_s
|
|
8
|
-
# Check if ISO/ASTM format: publisher "ISO/ASTM" without TR letter in code
|
|
9
|
-
if publisher == "ISO/ASTM" && (code.nil? || code.letter.nil?)
|
|
10
|
-
result = "ISO/ASTMTR"
|
|
11
|
-
else
|
|
12
|
-
# Simple TR format
|
|
13
|
-
result = "TR"
|
|
14
|
-
result += code.letter if code&.letter
|
|
15
|
-
end
|
|
16
|
-
result += code.number if code&.number
|
|
17
|
-
result += format_suffix if format_suffix
|
|
18
|
-
result
|
|
19
|
-
end
|
|
20
7
|
end
|
|
21
8
|
end
|
|
22
9
|
end
|
|
@@ -4,17 +4,6 @@ module Pubid
|
|
|
4
4
|
module Astm
|
|
5
5
|
module Identifiers
|
|
6
6
|
class WorkInProgress < Base
|
|
7
|
-
def to_s
|
|
8
|
-
parts = []
|
|
9
|
-
parts << publisher if publisher
|
|
10
|
-
|
|
11
|
-
result = parts.join(" ")
|
|
12
|
-
result += " " if publisher && !result.end_with?(" ")
|
|
13
|
-
|
|
14
|
-
result += "WK"
|
|
15
|
-
result += code.number if code
|
|
16
|
-
result
|
|
17
|
-
end
|
|
18
7
|
end
|
|
19
8
|
end
|
|
20
9
|
end
|