pubid 2.0.0.pre.alpha.2 → 2.0.0.pre.alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.adoc +5 -1
- data/data/nist/update_codes.yaml +25 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -39
- data/lib/pubid/amca/identifiers/base.rb +0 -26
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -17
- data/lib/pubid/amca/identifiers/publication.rb +0 -13
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +42 -1
- data/lib/pubid/ansi/builder.rb +5 -3
- data/lib/pubid/ansi/identifier.rb +1 -43
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
- data/lib/pubid/ansi/identifiers/standard.rb +2 -3
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +2 -31
- data/lib/pubid/ansi/urn_generator.rb +3 -38
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +38 -3
- data/lib/pubid/api/builder.rb +29 -74
- data/lib/pubid/api/identifier.rb +0 -51
- data/lib/pubid/api/identifiers/base.rb +0 -2
- data/lib/pubid/api/identifiers/bulletin.rb +0 -2
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
- data/lib/pubid/api/identifiers/mpms.rb +1 -17
- data/lib/pubid/api/identifiers/publication.rb +0 -2
- data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
- data/lib/pubid/api/identifiers/specification.rb +0 -2
- data/lib/pubid/api/identifiers/standard.rb +0 -2
- data/lib/pubid/api/identifiers/technical_report.rb +0 -2
- data/lib/pubid/api/identifiers/typeless_standard.rb +1 -14
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +1 -13
- data/lib/pubid/api/urn_generator.rb +0 -18
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +51 -5
- data/lib/pubid/ashrae/builder.rb +3 -3
- data/lib/pubid/ashrae/identifier.rb +6 -39
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
- data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
- data/lib/pubid/ashrae/identifiers/base.rb +3 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
- data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
- data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +0 -13
- data/lib/pubid/ashrae/urn_generator.rb +0 -8
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +42 -1
- data/lib/pubid/asme/components/code.rb +10 -2
- data/lib/pubid/asme/identifier.rb +0 -46
- data/lib/pubid/asme/identifiers/base.rb +0 -60
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +42 -1
- data/lib/pubid/astm/components/code.rb +9 -0
- data/lib/pubid/{jis → astm}/components.rb +1 -1
- data/lib/pubid/astm/identifier.rb +0 -77
- data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
- data/lib/pubid/astm/identifiers/data_series.rb +0 -14
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
- data/lib/pubid/astm/identifiers/manual.rb +0 -27
- data/lib/pubid/astm/identifiers/monograph.rb +0 -14
- data/lib/pubid/astm/identifiers/research_report.rb +0 -7
- data/lib/pubid/astm/identifiers/standard.rb +0 -39
- data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
- data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
- data/lib/pubid/astm/identifiers.rb +18 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +0 -10
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +39 -27
- data/lib/pubid/bsi/builder.rb +21 -12
- data/lib/pubid/bsi/identifier.rb +8 -62
- data/lib/pubid/bsi/identifiers/addendum_document.rb +3 -33
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +11 -47
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +11 -38
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +3 -53
- data/lib/pubid/bsi/identifiers/amendment.rb +3 -19
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +2 -4
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/committee_document.rb +1 -14
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/corrigendum.rb +3 -7
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +1 -34
- data/lib/pubid/bsi/identifiers/disc.rb +1 -27
- data/lib/pubid/bsi/identifiers/draft_document.rb +3 -44
- data/lib/pubid/bsi/identifiers/electronic_book.rb +3 -36
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +3 -15
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +1 -45
- data/lib/pubid/bsi/identifiers/flex.rb +1 -33
- data/lib/pubid/bsi/identifiers/handbook.rb +2 -13
- data/lib/pubid/bsi/identifiers/index.rb +1 -30
- data/lib/pubid/bsi/identifiers/method.rb +1 -39
- data/lib/pubid/bsi/identifiers/national_annex.rb +5 -27
- data/lib/pubid/bsi/identifiers/practice_guide.rb +2 -4
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +3 -52
- data/lib/pubid/bsi/identifiers/published_document.rb +3 -52
- data/lib/pubid/bsi/identifiers/section.rb +1 -28
- data/lib/pubid/bsi/identifiers/set.rb +3 -17
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +1 -7
- data/lib/pubid/bsi/identifiers/supplement_document.rb +3 -21
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +1 -44
- data/lib/pubid/bsi/identifiers/technical_specification.rb +3 -45
- data/lib/pubid/bsi/identifiers/test_method.rb +1 -30
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +3 -14
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +6 -70
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +224 -1
- data/lib/pubid/builder/base.rb +57 -10
- data/lib/pubid/bundled_identifier.rb +0 -1
- data/lib/pubid/ccsds/builder.rb +4 -3
- data/lib/pubid/ccsds/identifier.rb +63 -66
- data/lib/pubid/ccsds/identifiers/base.rb +11 -61
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +39 -1
- data/lib/pubid/cen_cenelec/builder.rb +12 -14
- data/lib/pubid/cen_cenelec/identifier.rb +7 -38
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +13 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/base.rb +5 -41
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +2 -25
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -13
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +4 -7
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +11 -89
- data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +168 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +6 -57
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +43 -1
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +22 -8
- data/lib/pubid/components/date.rb +23 -16
- data/lib/pubid/components/edition.rb +9 -6
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +6 -4
- data/lib/pubid/components/locality.rb +10 -1
- data/lib/pubid/components/publisher.rb +9 -6
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +5 -14
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +5 -15
- data/lib/pubid/components/typed_stage.rb +10 -11
- data/lib/pubid/components.rb +4 -1
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -59
- data/lib/pubid/csa/identifiers/base.rb +2 -122
- data/lib/pubid/csa/identifiers/cec.rb +2 -101
- data/lib/pubid/csa/identifiers/series.rb +2 -102
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +42 -1
- data/lib/pubid/etsi/components/code.rb +9 -2
- data/lib/pubid/etsi/identifier.rb +0 -43
- data/lib/pubid/etsi/identifiers/base.rb +1 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +2 -9
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +42 -1
- data/lib/pubid/export/exporter.rb +4 -46
- data/lib/pubid/export/flavor_exporter.rb +111 -278
- data/lib/pubid/export.rb +0 -6
- data/lib/pubid/identifier.rb +2 -17
- data/lib/pubid/identifier_facade.rb +114 -0
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +3 -66
- data/lib/pubid/idf/identifiers/amendment.rb +2 -1
- data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
- data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
- data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
- data/lib/pubid/idf/parser.rb +3 -2
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/supplement_identifier.rb +2 -10
- data/lib/pubid/idf/urn_generator.rb +4 -39
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +51 -1
- data/lib/pubid/iec/builder.rb +46 -64
- data/lib/pubid/iec/components/code.rb +8 -32
- data/lib/pubid/iec/components/publisher.rb +0 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +251 -213
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -32
- data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +27 -26
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -22
- data/lib/pubid/iec/identifiers/guide.rb +0 -2
- data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
- data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +21 -11
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
- data/lib/pubid/iec/identifiers/test_report_form.rb +5 -34
- data/lib/pubid/iec/identifiers/vap_identifier.rb +26 -19
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +4 -48
- data/lib/pubid/iec/identifiers.rb +30 -0
- data/lib/pubid/iec/parser.rb +13 -12
- data/lib/pubid/iec/renderer.rb +254 -0
- data/lib/pubid/iec/single_identifier.rb +6 -12
- data/lib/pubid/iec/supplement_identifier.rb +58 -54
- data/lib/pubid/iec/urn_generator.rb +3 -3
- data/lib/pubid/iec/urn_parser.rb +3 -3
- data/lib/pubid/iec.rb +40 -68
- data/lib/pubid/ieee/builder.rb +12 -12
- data/lib/pubid/ieee/components/code.rb +8 -0
- data/lib/pubid/ieee/components/draft.rb +14 -0
- data/lib/pubid/ieee/components/relationship.rb +5 -149
- data/lib/pubid/ieee/identifier.rb +6 -41
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +1 -6
- data/lib/pubid/ieee/identifiers/base.rb +101 -458
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/corrigendum.rb +1 -9
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +1 -7
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +1 -1
- data/lib/pubid/ieee/identifiers/dual_published.rb +1 -1
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +1 -6
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -15
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +1 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +1 -35
- data/lib/pubid/ieee/identifiers/standard.rb +1 -1
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +307 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +62 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +8 -42
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +2 -2
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +55 -53
- data/lib/pubid/iso/bundled_identifier.rb +51 -0
- data/lib/pubid/iso/components/code.rb +7 -19
- data/lib/pubid/iso/components/publisher.rb +10 -8
- data/lib/pubid/iso/components.rb +2 -4
- data/lib/pubid/iso/identifier.rb +218 -252
- data/lib/pubid/iso/identifiers/addendum.rb +9 -6
- data/lib/pubid/iso/identifiers/amendment.rb +8 -4
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +0 -1
- data/lib/pubid/iso/identifiers/directives.rb +8 -2
- data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +0 -1
- data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +10 -4
- data/lib/pubid/iso/identifiers/pas.rb +2 -2
- data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
- data/lib/pubid/iso/identifiers/supplement.rb +11 -3
- data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
- data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
- data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
- data/lib/pubid/iso/identifiers.rb +0 -1
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +22 -4
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +66 -182
- data/lib/pubid/iso/urn_parser.rb +12 -7
- data/lib/pubid/iso.rb +173 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +8 -0
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +6 -104
- data/lib/pubid/itu/identifiers/amendment.rb +0 -2
- data/lib/pubid/itu/identifiers/annex.rb +0 -2
- data/lib/pubid/itu/identifiers/base.rb +0 -6
- data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
- data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
- data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
- data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
- data/lib/pubid/itu/identifiers/supplement.rb +0 -2
- data/lib/pubid/itu/urn_parser.rb +23 -0
- data/lib/pubid/itu.rb +42 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifier.rb +0 -43
- data/lib/pubid/jcgm/identifiers/amendment.rb +2 -7
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +2 -10
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +1 -5
- data/lib/pubid/jcgm/urn_generator.rb +4 -6
- data/lib/pubid/jcgm/urn_parser.rb +23 -0
- data/lib/pubid/jcgm.rb +43 -2
- data/lib/pubid/jis/builder.rb +44 -52
- data/lib/pubid/jis/identifier.rb +132 -46
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +31 -5
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +6 -12
- data/lib/pubid/jis/supplement_identifier.rb +17 -14
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +42 -2
- data/lib/pubid/nist/builder.rb +63 -1871
- data/lib/pubid/nist/caster.rb +1272 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
- data/lib/pubid/nist/components/code.rb +9 -20
- data/lib/pubid/nist/components/supplement.rb +2 -2
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +11 -48
- data/lib/pubid/nist/identifiers/base.rb +110 -47
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -8
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +15 -24
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
- data/lib/pubid/nist/identifiers/handbook.rb +2 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
- data/lib/pubid/nist/identifiers/monograph.rb +7 -3
- data/lib/pubid/nist/identifiers/report.rb +4 -2
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
- data/lib/pubid/nist/identifiers.rb +1 -0
- data/lib/pubid/nist/parser.rb +62 -452
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +416 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +148 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +60 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +3 -1
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +82 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifier.rb +0 -50
- data/lib/pubid/oiml/identifiers/annex.rb +3 -45
- data/lib/pubid/oiml/identifiers/base.rb +2 -17
- data/lib/pubid/oiml/renderer.rb +161 -0
- data/lib/pubid/oiml/single_identifier.rb +6 -45
- data/lib/pubid/oiml/supplement_identifier.rb +4 -19
- data/lib/pubid/oiml/urn_generator.rb +0 -8
- data/lib/pubid/oiml/urn_parser.rb +22 -0
- data/lib/pubid/oiml.rb +42 -1
- data/lib/pubid/plateau/identifier.rb +7 -41
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -3
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +1 -1
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +43 -1
- data/lib/pubid/renderers/directives_renderer.rb +22 -8
- data/lib/pubid/renderers/guide_renderer.rb +4 -2
- data/lib/pubid/renderers/human_readable.rb +18 -7
- data/lib/pubid/rendering/context.rb +28 -19
- data/lib/pubid/rendering.rb +0 -3
- data/lib/pubid/sae/components/date.rb +8 -0
- data/lib/pubid/sae/components/type.rb +5 -1
- data/lib/pubid/sae/identifier.rb +0 -23
- data/lib/pubid/sae/identifiers/base.rb +2 -16
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +2 -10
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +42 -1
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +9 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +29 -7
- data/lib/tasks/website-data.json +1940 -1882
- metadata +75 -44
- data/lib/pubid/amca/scheme.rb +0 -16
- data/lib/pubid/ansi/scheme.rb +0 -15
- data/lib/pubid/api/scheme.rb +0 -66
- data/lib/pubid/ashrae/scheme.rb +0 -53
- data/lib/pubid/asme/scheme.rb +0 -37
- data/lib/pubid/astm/scheme.rb +0 -55
- data/lib/pubid/bsi/identifiers/base.rb +0 -11
- data/lib/pubid/bsi/scheme.rb +0 -243
- data/lib/pubid/ccsds/scheme.rb +0 -57
- data/lib/pubid/cen_cenelec/scheme.rb +0 -164
- data/lib/pubid/cie/scheme.rb +0 -64
- data/lib/pubid/components/factory.rb +0 -50
- data/lib/pubid/csa/scheme.rb +0 -44
- data/lib/pubid/etsi/scheme.rb +0 -42
- data/lib/pubid/export/data_class_exporter.rb +0 -59
- data/lib/pubid/export/ieee_exporter.rb +0 -78
- data/lib/pubid/export/itu_exporter.rb +0 -66
- data/lib/pubid/export/nist_exporter.rb +0 -64
- data/lib/pubid/export/registry_exporter.rb +0 -90
- data/lib/pubid/export/scheme_exporter.rb +0 -70
- data/lib/pubid/identifier_registry.rb +0 -198
- data/lib/pubid/idf/scheme.rb +0 -61
- data/lib/pubid/iec/scheme.rb +0 -71
- data/lib/pubid/ieee/scheme.rb +0 -90
- data/lib/pubid/iho/scheme.rb +0 -29
- data/lib/pubid/iso/identifiers/base.rb +0 -115
- data/lib/pubid/iso/scheme.rb +0 -193
- data/lib/pubid/itu/scheme.rb +0 -174
- data/lib/pubid/jcgm/scheme.rb +0 -60
- data/lib/pubid/jis/components/code.rb +0 -59
- data/lib/pubid/jis/identifiers/base.rb +0 -72
- data/lib/pubid/jis/scheme.rb +0 -49
- data/lib/pubid/nist/components/publisher.rb +0 -24
- data/lib/pubid/nist/scheme.rb +0 -199
- data/lib/pubid/oiml/scheme.rb +0 -46
- data/lib/pubid/plateau/scheme.rb +0 -45
- data/lib/pubid/rendering/base.rb +0 -73
- data/lib/pubid/rendering/common.rb +0 -211
- data/lib/pubid/rendering/format.rb +0 -25
- data/lib/pubid/sae/scheme.rb +0 -47
- data/lib/pubid/scheme.rb +0 -219
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
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
module Identifiers
|
|
6
|
+
autoload :Base, "#{__dir__}/identifiers/base"
|
|
7
|
+
autoload :Standard, "#{__dir__}/identifiers/standard"
|
|
8
|
+
autoload :IsoDualPublished, "#{__dir__}/identifiers/iso_dual_published"
|
|
9
|
+
autoload :Manual, "#{__dir__}/identifiers/manual"
|
|
10
|
+
autoload :ResearchReport, "#{__dir__}/identifiers/research_report"
|
|
11
|
+
autoload :DataSeries, "#{__dir__}/identifiers/data_series"
|
|
12
|
+
autoload :TechnicalReport, "#{__dir__}/identifiers/technical_report"
|
|
13
|
+
autoload :Monograph, "#{__dir__}/identifiers/monograph"
|
|
14
|
+
autoload :Adjunct, "#{__dir__}/identifiers/adjunct"
|
|
15
|
+
autoload :WorkInProgress, "#{__dir__}/identifiers/work_in_progress"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
# Human-readable renderer for ASTM identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Consolidates the per-type rendering logic that used to live inline on
|
|
8
|
+
# each identifier class. Produces strings like:
|
|
9
|
+
# "ASTM E2938-15"
|
|
10
|
+
# "ASTM RR:A01-1234"
|
|
11
|
+
# "ASTM MNL45-EB"
|
|
12
|
+
# "ASTM ADJD2148"
|
|
13
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
14
|
+
def render(context: nil, **opts)
|
|
15
|
+
id = @id
|
|
16
|
+
|
|
17
|
+
case id
|
|
18
|
+
when Identifiers::Standard
|
|
19
|
+
render_standard(id)
|
|
20
|
+
when Identifiers::IsoDualPublished
|
|
21
|
+
render_standard(id)
|
|
22
|
+
when Identifiers::ResearchReport
|
|
23
|
+
render_research_report(id)
|
|
24
|
+
when Identifiers::DataSeries
|
|
25
|
+
render_data_series(id)
|
|
26
|
+
when Identifiers::TechnicalReport
|
|
27
|
+
render_technical_report(id)
|
|
28
|
+
when Identifiers::Monograph
|
|
29
|
+
render_monograph(id)
|
|
30
|
+
when Identifiers::Adjunct
|
|
31
|
+
render_adjunct(id)
|
|
32
|
+
when Identifiers::WorkInProgress
|
|
33
|
+
render_work_in_progress(id)
|
|
34
|
+
when Identifiers::Manual
|
|
35
|
+
render_manual(id)
|
|
36
|
+
else
|
|
37
|
+
render_single(id)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def render_single(id)
|
|
44
|
+
parts = []
|
|
45
|
+
parts << id.publisher if id.publisher
|
|
46
|
+
parts << id.prefix if id.class.attributes.key?(:prefix) && id.prefix
|
|
47
|
+
parts << id.code.to_s if id.code
|
|
48
|
+
parts << "-#{id.year}" if id.year
|
|
49
|
+
parts << id.format_suffix if id.format_suffix
|
|
50
|
+
parts.join(" ")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def render_standard(id)
|
|
54
|
+
parts = []
|
|
55
|
+
parts << id.publisher if id.publisher
|
|
56
|
+
|
|
57
|
+
if id.code
|
|
58
|
+
code_str = id.code.to_s
|
|
59
|
+
if id.code.dual_m
|
|
60
|
+
base_code = "#{id.code.letter}#{id.code.number}"
|
|
61
|
+
code_str = "#{base_code}/#{base_code}M"
|
|
62
|
+
end
|
|
63
|
+
parts << code_str
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
result = parts.join(" ")
|
|
67
|
+
|
|
68
|
+
if id.year
|
|
69
|
+
result += "-#{year_portion(id)}"
|
|
70
|
+
result += id.sub_year if id.sub_year
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
result += "(#{id.reapproval})" if id.reapproval
|
|
74
|
+
result += "e#{id.edition}" if id.edition
|
|
75
|
+
|
|
76
|
+
result
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def year_portion(id)
|
|
80
|
+
year_str = id.year.to_s
|
|
81
|
+
year_str.length == 4 ? year_str[-2..] : year_str
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def render_research_report(id)
|
|
85
|
+
parts = []
|
|
86
|
+
parts << id.publisher if id.publisher
|
|
87
|
+
parts << "RR:#{id.committee}-#{id.code.number}" if id.committee && id.code
|
|
88
|
+
parts.join(" ")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def render_data_series(id)
|
|
92
|
+
parts = []
|
|
93
|
+
parts << id.publisher if id.publisher
|
|
94
|
+
|
|
95
|
+
result = parts.join(" ")
|
|
96
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
97
|
+
|
|
98
|
+
result += "DS"
|
|
99
|
+
result += id.code.to_s if id.code
|
|
100
|
+
result += "HOL" if id.hol_suffix
|
|
101
|
+
result += id.format_suffix if id.format_suffix
|
|
102
|
+
result
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def render_technical_report(id)
|
|
106
|
+
if id.publisher == "ISO/ASTM" && (id.code.nil? || id.code.letter.nil?)
|
|
107
|
+
result = "ISO/ASTMTR"
|
|
108
|
+
else
|
|
109
|
+
result = "TR"
|
|
110
|
+
result += id.code.letter if id.code&.letter
|
|
111
|
+
end
|
|
112
|
+
result += id.code.number if id.code&.number
|
|
113
|
+
result += id.format_suffix if id.format_suffix
|
|
114
|
+
result
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def render_monograph(id)
|
|
118
|
+
parts = []
|
|
119
|
+
parts << id.publisher if id.publisher
|
|
120
|
+
|
|
121
|
+
result = parts.join(" ")
|
|
122
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
123
|
+
|
|
124
|
+
result += "MONO"
|
|
125
|
+
result += id.code.number if id.code
|
|
126
|
+
result += "-#{id.edition}" if id.edition
|
|
127
|
+
result += id.format_suffix if id.format_suffix
|
|
128
|
+
result
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def render_adjunct(id)
|
|
132
|
+
result = []
|
|
133
|
+
result << id.publisher if id.publisher && !id.ea_suffix && !id.dvd_suffix
|
|
134
|
+
result << "ADJ#{id.designation}#{'-EA' if id.ea_suffix}#{'DVD' if id.dvd_suffix}"
|
|
135
|
+
result.compact.join(" ")
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def render_work_in_progress(id)
|
|
139
|
+
parts = []
|
|
140
|
+
parts << id.publisher if id.publisher
|
|
141
|
+
|
|
142
|
+
result = parts.join(" ")
|
|
143
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
144
|
+
|
|
145
|
+
result += "WK"
|
|
146
|
+
result += id.code.number if id.code
|
|
147
|
+
result
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def render_manual(id)
|
|
151
|
+
parts = []
|
|
152
|
+
parts << id.publisher if id.publisher
|
|
153
|
+
parts << "MNL"
|
|
154
|
+
parts << "TP" if id.tp_designation
|
|
155
|
+
parts << id.code.number if id.code
|
|
156
|
+
|
|
157
|
+
result = parts.join
|
|
158
|
+
|
|
159
|
+
result += "-#{id.edition}" if id.edition
|
|
160
|
+
|
|
161
|
+
if id.publisher
|
|
162
|
+
result = "#{id.publisher} #{result[id.publisher.length..]}"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
result += "-SUP" if id.supplement
|
|
166
|
+
result += id.format_suffix if id.format_suffix
|
|
167
|
+
|
|
168
|
+
result
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -10,16 +10,6 @@ module Pubid
|
|
|
10
10
|
attribute :code, Components::Code
|
|
11
11
|
attribute :year, :string
|
|
12
12
|
attribute :format_suffix, :string # -EB for eBook
|
|
13
|
-
|
|
14
|
-
def to_s
|
|
15
|
-
parts = []
|
|
16
|
-
parts << publisher if publisher
|
|
17
|
-
parts << prefix if self.class.attributes.key?(:prefix) && prefix
|
|
18
|
-
parts << code.to_s if code
|
|
19
|
-
parts << "-#{year}" if year
|
|
20
|
-
parts << format_suffix if format_suffix
|
|
21
|
-
parts.join(" ")
|
|
22
|
-
end
|
|
23
13
|
end
|
|
24
14
|
end
|
|
25
15
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
# Parses ASTM URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:astm:{publisher}:{code}:{year}[:sub_year][:reapp.X][:eX][:wip][:wk.X]
|
|
9
|
+
#
|
|
10
|
+
# The publisher slot is the lowercase publisher string ("astm" or
|
|
11
|
+
# "pub-copub"). The code slot is the alphanumeric ASTM code (e.g.,
|
|
12
|
+
# "D2148", "A1"). Year is **2 digits** in the URN.
|
|
13
|
+
#
|
|
14
|
+
# Examples:
|
|
15
|
+
# - urn:astm:astm:D2148:2022 → ASTM D2148-22
|
|
16
|
+
# - urn:astm:astm:A1:2002 → ASTM A1-02
|
|
17
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
18
|
+
def parse_urn(urn)
|
|
19
|
+
body = strip_namespace(urn)
|
|
20
|
+
parts = split_parts(body)
|
|
21
|
+
|
|
22
|
+
_publisher, code, year = parts
|
|
23
|
+
|
|
24
|
+
text = "ASTM #{code}"
|
|
25
|
+
text += "-#{year[-2..]}" if year && year.length >= 2
|
|
26
|
+
flavor_parse(text)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|