pubid 1.15.19 → 2.0.0.pre.alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.adoc +2041 -53
- data/archived-gems/pubid-ccsds/update_codes.yaml +1 -0
- data/archived-gems/pubid-iec/stages.yaml +129 -0
- data/archived-gems/pubid-iec/update_codes.yaml +67 -0
- data/archived-gems/pubid-ieee/update_codes.yaml +104 -0
- data/archived-gems/pubid-iso/stages.yaml +106 -0
- data/archived-gems/pubid-iso/update_codes.yaml +4 -0
- data/archived-gems/pubid-itu/i18n.yaml +13 -0
- data/archived-gems/pubid-itu/series.yaml +42 -0
- data/archived-gems/pubid-nist/publishers.yaml +6 -0
- data/archived-gems/pubid-nist/series.yaml +121 -0
- data/archived-gems/pubid-nist/stages.yaml +16 -0
- data/archived-gems/pubid-nist/update_codes.yaml +93 -0
- data/archived-gems/pubid-plateau/update_codes.yaml +6 -0
- data/data/ccsds/update_codes.yaml +1 -0
- data/data/iec/update_codes.yaml +67 -0
- data/data/ieee/update_codes.yaml +104 -0
- data/data/iso/update_codes.yaml +21 -0
- data/data/nist/update_codes.yaml +87 -0
- data/data/plateau/update_codes.yaml +6 -0
- data/lib/pubid/amca/builder.rb +176 -0
- data/lib/pubid/amca/identifier.rb +18 -0
- data/lib/pubid/amca/identifiers/base.rb +64 -0
- data/lib/pubid/amca/identifiers/interpretation.rb +51 -0
- data/lib/pubid/amca/identifiers/publication.rb +47 -0
- data/lib/pubid/amca/identifiers/standard.rb +22 -0
- data/lib/pubid/amca/identifiers.rb +12 -0
- data/lib/pubid/amca/parser.rb +153 -0
- data/lib/pubid/amca/scheme.rb +16 -0
- data/lib/pubid/amca/single_identifier.rb +33 -0
- data/lib/pubid/amca/urn_generator.rb +50 -0
- data/lib/pubid/amca.rb +26 -0
- data/lib/pubid/ansi/builder.rb +52 -0
- data/lib/pubid/ansi/identifier.rb +13 -0
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +12 -0
- data/lib/pubid/ansi/identifiers/standard.rb +16 -0
- data/lib/pubid/ansi/identifiers.rb +11 -0
- data/lib/pubid/ansi/parser.rb +91 -0
- data/lib/pubid/ansi/scheme.rb +15 -0
- data/lib/pubid/ansi/single_identifier.rb +45 -0
- data/lib/pubid/ansi/urn_generator.rb +76 -0
- data/lib/pubid/ansi.rb +27 -0
- data/lib/pubid/api/builder.rb +85 -0
- data/lib/pubid/api/components/code.rb +9 -0
- data/lib/pubid/api/identifier.rb +21 -0
- data/lib/pubid/api/identifiers/base.rb +24 -0
- data/lib/pubid/api/identifiers/bulletin.rb +15 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +15 -0
- data/lib/pubid/api/identifiers/mpms.rb +44 -0
- data/lib/pubid/api/identifiers/publication.rb +15 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +15 -0
- data/lib/pubid/api/identifiers/specification.rb +15 -0
- data/lib/pubid/api/identifiers/standard.rb +15 -0
- data/lib/pubid/api/identifiers/technical_report.rb +15 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +27 -0
- data/lib/pubid/api/parser.rb +140 -0
- data/lib/pubid/api/scheme.rb +66 -0
- data/lib/pubid/api/single_identifier.rb +46 -0
- data/lib/pubid/api/urn_generator.rb +41 -0
- data/lib/pubid/api.rb +17 -0
- data/lib/pubid/ashrae/builder.rb +498 -0
- data/lib/pubid/ashrae/identifier.rb +18 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +46 -0
- data/lib/pubid/ashrae/identifiers/addendum.rb +55 -0
- data/lib/pubid/ashrae/identifiers/base.rb +23 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +51 -0
- data/lib/pubid/ashrae/identifiers/errata.rb +40 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +38 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +39 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +38 -0
- data/lib/pubid/ashrae/identifiers.rb +16 -0
- data/lib/pubid/ashrae/parser.rb +724 -0
- data/lib/pubid/ashrae/scheme.rb +53 -0
- data/lib/pubid/ashrae/single_identifier.rb +23 -0
- data/lib/pubid/ashrae/supplement_identifier.rb +23 -0
- data/lib/pubid/ashrae/urn_generator.rb +59 -0
- data/lib/pubid/ashrae.rb +21 -0
- data/lib/pubid/asme/builder.rb +153 -0
- data/lib/pubid/asme/components/code.rb +18 -0
- data/lib/pubid/asme/identifier.rb +15 -0
- data/lib/pubid/asme/identifiers/base.rb +70 -0
- data/lib/pubid/asme/identifiers/standard.rb +12 -0
- data/lib/pubid/asme/identifiers.rb +10 -0
- data/lib/pubid/asme/parser.rb +308 -0
- data/lib/pubid/asme/scheme.rb +37 -0
- data/lib/pubid/asme/single_identifier.rb +29 -0
- data/lib/pubid/asme/urn_generator.rb +133 -0
- data/lib/pubid/asme.rb +21 -0
- data/lib/pubid/astm/builder.rb +159 -0
- data/lib/pubid/astm/components/code.rb +33 -0
- data/lib/pubid/astm/identifier.rb +15 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +21 -0
- data/lib/pubid/astm/identifiers/base.rb +13 -0
- data/lib/pubid/astm/identifiers/data_series.rb +25 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +74 -0
- data/lib/pubid/astm/identifiers/manual.rb +40 -0
- data/lib/pubid/astm/identifiers/monograph.rb +25 -0
- data/lib/pubid/astm/identifiers/research_report.rb +18 -0
- data/lib/pubid/astm/identifiers/standard.rb +52 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +23 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +21 -0
- data/lib/pubid/astm/parser.rb +244 -0
- data/lib/pubid/astm/scheme.rb +55 -0
- data/lib/pubid/astm/single_identifier.rb +25 -0
- data/lib/pubid/astm/urn_generator.rb +99 -0
- data/lib/pubid/astm.rb +38 -0
- data/lib/pubid/bsi/builder.rb +1483 -0
- data/lib/pubid/bsi/components/code.rb +11 -0
- data/lib/pubid/bsi/components/date.rb +11 -0
- data/lib/pubid/bsi/components/publisher.rb +11 -0
- data/lib/pubid/bsi/components/type.rb +11 -0
- data/lib/pubid/bsi/identifier.rb +27 -0
- data/lib/pubid/bsi/identifiers/addendum_document.rb +64 -0
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +95 -0
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +82 -0
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +118 -0
- data/lib/pubid/bsi/identifiers/amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/base.rb +11 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +27 -0
- data/lib/pubid/bsi/identifiers/british_standard.rb +33 -0
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +114 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +51 -0
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +152 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +28 -0
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +69 -0
- data/lib/pubid/bsi/identifiers/disc.rb +56 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +71 -0
- data/lib/pubid/bsi/identifiers/electronic_book.rb +52 -0
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +47 -0
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +82 -0
- data/lib/pubid/bsi/identifiers/flex.rb +61 -0
- data/lib/pubid/bsi/identifiers/handbook.rb +39 -0
- data/lib/pubid/bsi/identifiers/index.rb +62 -0
- data/lib/pubid/bsi/identifiers/method.rb +76 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +73 -0
- data/lib/pubid/bsi/identifiers/practice_guide.rb +27 -0
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +79 -0
- data/lib/pubid/bsi/identifiers/published_document.rb +79 -0
- data/lib/pubid/bsi/identifiers/section.rb +62 -0
- data/lib/pubid/bsi/identifiers/set.rb +46 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/supplement_document.rb +51 -0
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +81 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +79 -0
- data/lib/pubid/bsi/identifiers/test_method.rb +67 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +52 -0
- data/lib/pubid/bsi/identifiers.rb +52 -0
- data/lib/pubid/bsi/model.rb +196 -0
- data/lib/pubid/bsi/parser.rb +659 -0
- data/lib/pubid/bsi/scheme.rb +243 -0
- data/lib/pubid/bsi/single_identifier.rb +129 -0
- data/lib/pubid/bsi/urn_generator.rb +84 -0
- data/lib/pubid/bsi.rb +32 -0
- data/lib/pubid/builder/base.rb +138 -0
- data/lib/pubid/bundled_identifier.rb +126 -0
- data/lib/pubid/ccsds/builder.rb +56 -0
- data/lib/pubid/ccsds/identifier.rb +16 -0
- data/lib/pubid/ccsds/identifiers/base.rb +78 -0
- data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +39 -0
- data/lib/pubid/ccsds/identifiers.rb +10 -0
- data/lib/pubid/ccsds/parser.rb +71 -0
- data/lib/pubid/ccsds/scheme.rb +57 -0
- data/lib/pubid/ccsds/single_identifier.rb +74 -0
- data/lib/pubid/ccsds/supplement_identifier.rb +33 -0
- data/lib/pubid/ccsds/urn_generator.rb +115 -0
- data/lib/pubid/ccsds.rb +21 -0
- data/lib/pubid/cen_cenelec/builder.rb +330 -0
- data/lib/pubid/cen_cenelec/identifier.rb +15 -0
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +40 -0
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/base.rb +75 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +61 -0
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +35 -0
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +41 -0
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +37 -0
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +22 -0
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +35 -0
- data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
- data/lib/pubid/cen_cenelec/parser.rb +144 -0
- data/lib/pubid/cen_cenelec/scheme.rb +164 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +130 -0
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +48 -0
- data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
- data/lib/pubid/cen_cenelec.rb +21 -0
- data/lib/pubid/cie/builder.rb +399 -0
- data/lib/pubid/cie/components/code.rb +72 -0
- data/lib/pubid/cie/components/language.rb +58 -0
- data/lib/pubid/cie/identifier.rb +18 -0
- data/lib/pubid/cie/identifiers/bundle.rb +20 -0
- data/lib/pubid/cie/identifiers/conference.rb +32 -0
- data/lib/pubid/cie/identifiers/corrigendum.rb +40 -0
- data/lib/pubid/cie/identifiers/dual_published.rb +41 -0
- data/lib/pubid/cie/identifiers/identical.rb +64 -0
- data/lib/pubid/cie/identifiers/joint_published.rb +52 -0
- data/lib/pubid/cie/identifiers/standard.rb +58 -0
- data/lib/pubid/cie/identifiers/supplement.rb +45 -0
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +20 -0
- data/lib/pubid/cie/identifiers.rb +17 -0
- data/lib/pubid/cie/parser.rb +347 -0
- data/lib/pubid/cie/scheme.rb +64 -0
- data/lib/pubid/cie/single_identifier.rb +30 -0
- data/lib/pubid/cie/supplement_identifier.rb +26 -0
- data/lib/pubid/cie/urn_generator.rb +123 -0
- data/lib/pubid/cie.rb +28 -0
- data/lib/pubid/components/code.rb +33 -0
- data/lib/pubid/components/date.rb +49 -0
- data/lib/pubid/components/edition.rb +32 -0
- data/lib/pubid/components/language.rb +37 -0
- data/lib/pubid/components/locality.rb +10 -0
- data/lib/pubid/components/publisher.rb +36 -0
- data/lib/pubid/components/stage.rb +54 -0
- data/lib/pubid/components/type.rb +58 -0
- data/lib/pubid/components/typed_stage.rb +55 -0
- data/lib/pubid/components.rb +15 -0
- data/lib/pubid/core/pattern_doc_generator.rb +272 -0
- data/lib/pubid/core/update_codes.rb +77 -0
- data/lib/pubid/core.rb +8 -0
- data/lib/pubid/csa/builder.rb +671 -0
- data/lib/pubid/csa/components/code.rb +9 -0
- data/lib/pubid/csa/components.rb +9 -0
- data/lib/pubid/csa/composite_identifier.rb +27 -0
- data/lib/pubid/csa/identifier.rb +457 -0
- data/lib/pubid/csa/identifiers/base.rb +133 -0
- data/lib/pubid/csa/identifiers/bundled.rb +125 -0
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
- data/lib/pubid/csa/identifiers/cec.rb +129 -0
- data/lib/pubid/csa/identifiers/combined.rb +130 -0
- data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
- data/lib/pubid/csa/identifiers/package.rb +65 -0
- data/lib/pubid/csa/identifiers/series.rb +127 -0
- data/lib/pubid/csa/identifiers/standard.rb +10 -0
- data/lib/pubid/csa/identifiers.rb +17 -0
- data/lib/pubid/csa/parser.rb +445 -0
- data/lib/pubid/csa/scheme.rb +44 -0
- data/lib/pubid/csa/single_identifier.rb +30 -0
- data/lib/pubid/csa/urn_generator.rb +80 -0
- data/lib/pubid/csa/wrapper_identifier.rb +31 -0
- data/lib/pubid/csa.rb +25 -0
- data/lib/pubid/etsi/builder.rb +133 -0
- data/lib/pubid/etsi/components/code.rb +42 -0
- data/lib/pubid/etsi/components/version.rb +37 -0
- data/lib/pubid/etsi/components.rb +10 -0
- data/lib/pubid/etsi/identifier.rb +14 -0
- data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
- data/lib/pubid/etsi/identifiers/base.rb +38 -0
- data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +19 -0
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +91 -0
- data/lib/pubid/etsi/identifiers.rb +14 -0
- data/lib/pubid/etsi/parser.rb +133 -0
- data/lib/pubid/etsi/scheme.rb +42 -0
- data/lib/pubid/etsi/urn_generator.rb +76 -0
- data/lib/pubid/etsi.rb +21 -0
- data/lib/pubid/export/auditor.rb +89 -0
- data/lib/pubid/export/data_class_exporter.rb +59 -0
- data/lib/pubid/export/exporter.rb +74 -0
- data/lib/pubid/export/flavor_exporter.rb +402 -0
- data/lib/pubid/export/ieee_exporter.rb +78 -0
- data/lib/pubid/export/itu_exporter.rb +66 -0
- data/lib/pubid/export/nist_exporter.rb +64 -0
- data/lib/pubid/export/registry_exporter.rb +90 -0
- data/lib/pubid/export/result.rb +97 -0
- data/lib/pubid/export/scheme_exporter.rb +70 -0
- data/lib/pubid/export.rb +18 -0
- data/lib/pubid/format_detector.rb +16 -0
- data/lib/pubid/format_registry.rb +42 -0
- data/lib/pubid/identifier.rb +235 -0
- data/lib/pubid/identifier_metadata.rb +148 -0
- data/lib/pubid/identifier_registry.rb +198 -0
- data/lib/pubid/idf/builder.rb +82 -0
- data/lib/pubid/idf/identifier.rb +69 -0
- data/lib/pubid/idf/identifiers/amendment.rb +27 -0
- data/lib/pubid/idf/identifiers/corrigendum.rb +27 -0
- data/lib/pubid/idf/identifiers/international_standard.rb +123 -0
- data/lib/pubid/idf/identifiers/reviewed_method.rb +100 -0
- data/lib/pubid/idf/identifiers.rb +13 -0
- data/lib/pubid/idf/parser.rb +143 -0
- data/lib/pubid/idf/scheme.rb +61 -0
- data/lib/pubid/idf/single_identifier.rb +19 -0
- data/lib/pubid/idf/supplement_identifier.rb +43 -0
- data/lib/pubid/idf/urn_generator.rb +84 -0
- data/lib/pubid/idf.rb +25 -0
- data/lib/pubid/iec/builder.rb +457 -0
- data/lib/pubid/iec/components/code.rb +59 -0
- data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
- data/lib/pubid/iec/components/publisher.rb +35 -0
- data/lib/pubid/iec/components/sheet.rb +32 -0
- data/lib/pubid/iec/components/trf_info.rb +38 -0
- data/lib/pubid/iec/components/vap_suffix.rb +41 -0
- data/lib/pubid/iec/identifier.rb +21 -0
- data/lib/pubid/iec/identifiers/amendment.rb +94 -0
- data/lib/pubid/iec/identifiers/base.rb +78 -0
- data/lib/pubid/iec/identifiers/component_specification.rb +39 -0
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +39 -0
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +86 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +94 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +141 -0
- data/lib/pubid/iec/identifiers/guide.rb +104 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +147 -0
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +104 -0
- data/lib/pubid/iec/identifiers/operational_document.rb +39 -0
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +101 -0
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +66 -0
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +40 -0
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +40 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +132 -0
- data/lib/pubid/iec/identifiers/technical_specification.rb +132 -0
- data/lib/pubid/iec/identifiers/technology_report.rb +39 -0
- data/lib/pubid/iec/identifiers/test_report_form.rb +78 -0
- data/lib/pubid/iec/identifiers/vap_identifier.rb +77 -0
- data/lib/pubid/iec/identifiers/white_paper.rb +39 -0
- data/lib/pubid/iec/identifiers/working_document.rb +96 -0
- data/lib/pubid/iec/parser.rb +412 -0
- data/lib/pubid/iec/rendering_style.rb +113 -0
- data/lib/pubid/iec/scheme.rb +71 -0
- data/lib/pubid/iec/single_identifier.rb +80 -0
- data/lib/pubid/iec/supplement_identifier.rb +161 -0
- data/lib/pubid/iec/urn_generator.rb +193 -0
- data/lib/pubid/iec/urn_parser.rb +289 -0
- data/lib/pubid/iec.rb +85 -0
- data/lib/pubid/ieee/aiee/builder.rb +71 -0
- data/lib/pubid/ieee/aiee/identifier.rb +105 -0
- data/lib/pubid/ieee/aiee/parser.rb +130 -0
- data/lib/pubid/ieee/aiee.rb +11 -0
- data/lib/pubid/ieee/builder.rb +1237 -0
- data/lib/pubid/ieee/components/code.rb +102 -0
- data/lib/pubid/ieee/components/draft.rb +93 -0
- data/lib/pubid/ieee/components/relationship.rb +157 -0
- data/lib/pubid/ieee/components/typed_stage.rb +100 -0
- data/lib/pubid/ieee/identifier.rb +13 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +33 -0
- data/lib/pubid/ieee/identifiers/base.rb +591 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +35 -0
- data/lib/pubid/ieee/identifiers/corrigendum.rb +37 -0
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +51 -0
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +18 -0
- data/lib/pubid/ieee/identifiers/dual_published.rb +28 -0
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +27 -0
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +34 -0
- data/lib/pubid/ieee/identifiers/joint_development.rb +172 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +51 -0
- data/lib/pubid/ieee/identifiers/nesc/base.rb +56 -0
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +28 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +26 -0
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +26 -0
- data/lib/pubid/ieee/identifiers/nesc.rb +15 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +20 -0
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +26 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +33 -0
- data/lib/pubid/ieee/identifiers/si_standard.rb +73 -0
- data/lib/pubid/ieee/identifiers/standard.rb +41 -0
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +23 -0
- data/lib/pubid/ieee/identifiers.rb +33 -0
- data/lib/pubid/ieee/ire/builder.rb +61 -0
- data/lib/pubid/ieee/ire/identifier.rb +58 -0
- data/lib/pubid/ieee/ire/parser.rb +91 -0
- data/lib/pubid/ieee/ire.rb +11 -0
- data/lib/pubid/ieee/nesc/builder.rb +101 -0
- data/lib/pubid/ieee/nesc/parser.rb +154 -0
- data/lib/pubid/ieee/nesc.rb +10 -0
- data/lib/pubid/ieee/parser.rb +1226 -0
- data/lib/pubid/ieee/scheme.rb +90 -0
- data/lib/pubid/ieee/typed_stages.rb +172 -0
- data/lib/pubid/ieee/urn_generator.rb +188 -0
- data/lib/pubid/ieee.rb +32 -0
- data/lib/pubid/ieee_debug.rb +31 -0
- data/lib/pubid/iho/builder.rb +37 -0
- data/lib/pubid/iho/identifier.rb +19 -0
- data/lib/pubid/iho/identifiers/base.rb +41 -0
- data/lib/pubid/iho/identifiers/bibliographic.rb +20 -0
- data/lib/pubid/iho/identifiers/circular_letter.rb +19 -0
- data/lib/pubid/iho/identifiers/miscellaneous.rb +20 -0
- data/lib/pubid/iho/identifiers/publication.rb +19 -0
- data/lib/pubid/iho/identifiers/standard.rb +19 -0
- data/lib/pubid/iho/identifiers.rb +14 -0
- data/lib/pubid/iho/parser.rb +68 -0
- data/lib/pubid/iho/scheme.rb +29 -0
- data/lib/pubid/iho/urn_generator.rb +29 -0
- data/lib/pubid/iho.rb +21 -0
- data/lib/pubid/iso/builder.rb +305 -0
- data/lib/pubid/iso/bundled_identifier.rb +85 -0
- data/lib/pubid/iso/combined_identifier.rb +22 -0
- data/lib/pubid/iso/components/code.rb +36 -0
- data/lib/pubid/iso/components/publisher.rb +60 -0
- data/lib/pubid/iso/components.rb +12 -0
- data/lib/pubid/iso/format_resolver.rb +45 -0
- data/lib/pubid/iso/identifier.rb +69 -0
- data/lib/pubid/iso/identifiers/addendum.rb +104 -0
- data/lib/pubid/iso/identifiers/amendment.rb +128 -0
- data/lib/pubid/iso/identifiers/base.rb +115 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
- data/lib/pubid/iso/identifiers/data.rb +76 -0
- data/lib/pubid/iso/identifiers/directives.rb +59 -0
- data/lib/pubid/iso/identifiers/directives_supplement.rb +119 -0
- data/lib/pubid/iso/identifiers/extract.rb +30 -0
- data/lib/pubid/iso/identifiers/guide.rb +100 -0
- data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +89 -0
- data/lib/pubid/iso/identifiers/pas.rb +93 -0
- data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
- data/lib/pubid/iso/identifiers/supplement.rb +87 -0
- data/lib/pubid/iso/identifiers/tc_document.rb +108 -0
- data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
- data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
- data/lib/pubid/iso/identifiers.rb +33 -0
- data/lib/pubid/iso/parser.rb +510 -0
- data/lib/pubid/iso/rendering_style.rb +120 -0
- data/lib/pubid/iso/scheme.rb +187 -0
- data/lib/pubid/iso/single_identifier.rb +61 -0
- data/lib/pubid/iso/supplement_identifier.rb +27 -0
- data/lib/pubid/iso/urn_generator.rb +412 -0
- data/lib/pubid/iso/urn_parser.rb +423 -0
- data/lib/pubid/iso/utilities.rb +86 -0
- data/lib/pubid/iso.rb +50 -0
- data/lib/pubid/itu/builder.rb +171 -0
- data/lib/pubid/itu/components/code.rb +39 -0
- data/lib/pubid/itu/components/sector.rb +35 -0
- data/lib/pubid/itu/components/series.rb +29 -0
- data/lib/pubid/itu/i18n.rb +9 -0
- data/lib/pubid/itu/i18n.yaml +30 -0
- data/lib/pubid/itu/identifier.rb +53 -0
- data/lib/pubid/itu/identifiers/amendment.rb +43 -0
- data/lib/pubid/itu/identifiers/annex.rb +74 -0
- data/lib/pubid/itu/identifiers/base.rb +154 -0
- data/lib/pubid/itu/identifiers/combined_identifier.rb +47 -0
- data/lib/pubid/itu/identifiers/corrigendum.rb +44 -0
- data/lib/pubid/itu/identifiers/recommendation.rb +16 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
- data/lib/pubid/itu/identifiers/supplement.rb +46 -0
- data/lib/pubid/itu/identifiers.rb +16 -0
- data/lib/pubid/itu/model.rb +111 -0
- data/lib/pubid/itu/parser.rb +225 -0
- data/lib/pubid/itu/scheme.rb +174 -0
- data/lib/pubid/itu/urn_generator.rb +105 -0
- data/lib/pubid/itu.rb +22 -0
- data/lib/pubid/jcgm/builder.rb +88 -0
- data/lib/pubid/jcgm/components/publisher.rb +20 -0
- data/lib/pubid/jcgm/components.rb +9 -0
- data/lib/pubid/jcgm/identifier.rb +11 -0
- data/lib/pubid/jcgm/identifiers/amendment.rb +35 -0
- data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +51 -0
- data/lib/pubid/jcgm/identifiers.rb +11 -0
- data/lib/pubid/jcgm/parser.rb +84 -0
- data/lib/pubid/jcgm/scheme.rb +60 -0
- data/lib/pubid/jcgm/single_identifier.rb +48 -0
- data/lib/pubid/jcgm/supplement_identifier.rb +16 -0
- data/lib/pubid/jcgm/urn_generator.rb +110 -0
- data/lib/pubid/jcgm.rb +31 -0
- data/lib/pubid/jis/builder.rb +124 -0
- data/lib/pubid/jis/components/code.rb +59 -0
- data/lib/pubid/jis/components.rb +9 -0
- data/lib/pubid/jis/identifier.rb +18 -0
- data/lib/pubid/jis/identifiers/amendment.rb +16 -0
- data/lib/pubid/jis/identifiers/base.rb +72 -0
- data/lib/pubid/jis/identifiers/explanation.rb +22 -0
- data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +27 -0
- data/lib/pubid/jis/identifiers/technical_report.rb +31 -0
- data/lib/pubid/jis/identifiers/technical_specification.rb +31 -0
- data/lib/pubid/jis/identifiers.rb +17 -0
- data/lib/pubid/jis/parser.rb +109 -0
- data/lib/pubid/jis/scheme.rb +49 -0
- data/lib/pubid/jis/single_identifier.rb +37 -0
- data/lib/pubid/jis/supplement_identifier.rb +47 -0
- data/lib/pubid/jis/urn_generator.rb +25 -0
- data/lib/pubid/jis.rb +23 -0
- data/lib/pubid/lutaml/no_store_registration.rb +30 -0
- data/lib/pubid/nist/builder.rb +2100 -0
- data/lib/pubid/nist/components/code.rb +38 -0
- data/lib/pubid/nist/components/edition.rb +118 -0
- data/lib/pubid/nist/components/issue_number.rb +28 -0
- data/lib/pubid/nist/components/part.rb +77 -0
- data/lib/pubid/nist/components/publisher.rb +24 -0
- data/lib/pubid/nist/components/stage.rb +53 -0
- data/lib/pubid/nist/components/supplement.rb +121 -0
- data/lib/pubid/nist/components/translation.rb +42 -0
- data/lib/pubid/nist/components/update.rb +103 -0
- data/lib/pubid/nist/components/version.rb +35 -0
- data/lib/pubid/nist/components/volume.rb +32 -0
- data/lib/pubid/nist/components.rb +19 -0
- data/lib/pubid/nist/configuration.rb +77 -0
- data/lib/pubid/nist/identifiers/base.rb +499 -0
- data/lib/pubid/nist/identifiers/circular.rb +68 -0
- data/lib/pubid/nist/identifiers/circular_supplement.rb +50 -0
- data/lib/pubid/nist/identifiers/commercial_standard.rb +41 -0
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +56 -0
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +56 -0
- data/lib/pubid/nist/identifiers/crpl_report.rb +135 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +94 -0
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +35 -0
- data/lib/pubid/nist/identifiers/handbook.rb +50 -0
- data/lib/pubid/nist/identifiers/internal_report.rb +56 -0
- data/lib/pubid/nist/identifiers/letter_circular.rb +45 -0
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +65 -0
- data/lib/pubid/nist/identifiers/monograph.rb +69 -0
- data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
- data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
- data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
- data/lib/pubid/nist/identifiers/report.rb +68 -0
- data/lib/pubid/nist/identifiers/special_publication.rb +36 -0
- data/lib/pubid/nist/identifiers/technical_note.rb +90 -0
- data/lib/pubid/nist/identifiers.rb +33 -0
- data/lib/pubid/nist/parser.rb +1084 -0
- data/lib/pubid/nist/scheme.rb +199 -0
- data/lib/pubid/nist/supplement_identifier.rb +83 -0
- data/lib/pubid/nist/urn_generator.rb +127 -0
- data/lib/pubid/nist.rb +36 -0
- data/lib/pubid/oiml/builder.rb +189 -0
- data/lib/pubid/oiml/components/code.rb +20 -0
- data/lib/pubid/oiml/components.rb +9 -0
- data/lib/pubid/oiml/identifier.rb +11 -0
- data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
- data/lib/pubid/oiml/identifiers/annex.rb +62 -0
- data/lib/pubid/oiml/identifiers/base.rb +36 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +13 -0
- data/lib/pubid/oiml/identifiers/document.rb +13 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +13 -0
- data/lib/pubid/oiml/identifiers/guide.rb +13 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +13 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +13 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +13 -0
- data/lib/pubid/oiml/identifiers.rb +18 -0
- data/lib/pubid/oiml/parser.rb +173 -0
- data/lib/pubid/oiml/scheme.rb +46 -0
- data/lib/pubid/oiml/single_identifier.rb +90 -0
- data/lib/pubid/oiml/supplement_identifier.rb +43 -0
- data/lib/pubid/oiml/urn_generator.rb +64 -0
- data/lib/pubid/oiml.rb +26 -0
- data/lib/pubid/parser/common_parse_methods.rb +13 -0
- data/lib/pubid/parser/common_parse_rules.rb +56 -0
- data/lib/pubid/parser.rb +8 -0
- data/lib/pubid/parsers/base.rb +11 -0
- data/lib/pubid/parsers/mr_string.rb +93 -0
- data/lib/pubid/plateau/builder.rb +50 -0
- data/lib/pubid/plateau/identifiers/annex.rb +16 -0
- data/lib/pubid/plateau/identifiers/base.rb +51 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +34 -0
- data/lib/pubid/plateau/identifiers/technical_report.rb +20 -0
- data/lib/pubid/plateau/identifiers.rb +12 -0
- data/lib/pubid/plateau/parser.rb +63 -0
- data/lib/pubid/plateau/scheme.rb +45 -0
- data/lib/pubid/plateau/supplement_identifier.rb +72 -0
- data/lib/pubid/plateau/urn_generator.rb +29 -0
- data/lib/pubid/plateau.rb +25 -0
- data/lib/pubid/renderers/base.rb +19 -0
- data/lib/pubid/renderers/directives_renderer.rb +62 -0
- data/lib/pubid/renderers/guide_renderer.rb +20 -0
- data/lib/pubid/renderers/human_readable.rb +58 -0
- data/lib/pubid/renderers/iwa_renderer.rb +16 -0
- data/lib/pubid/renderers/mr_string.rb +16 -0
- data/lib/pubid/renderers/supplement_renderer.rb +33 -0
- data/lib/pubid/renderers/urn.rb +11 -0
- data/lib/pubid/renderers.rb +14 -0
- data/lib/pubid/rendering/base.rb +73 -0
- data/lib/pubid/rendering/common.rb +211 -0
- data/lib/pubid/rendering/context.rb +156 -0
- data/lib/pubid/rendering/date.rb +27 -0
- data/lib/pubid/rendering/format.rb +25 -0
- data/lib/pubid/rendering/language.rb +21 -0
- data/lib/pubid/rendering/numbering.rb +24 -0
- data/lib/pubid/rendering/publisher.rb +25 -0
- data/lib/pubid/rendering/stage.rb +38 -0
- data/lib/pubid/rendering/supplement.rb +46 -0
- data/lib/pubid/rendering.rb +16 -0
- data/lib/pubid/sae/builder.rb +32 -0
- data/lib/pubid/sae/components/code.rb +9 -0
- data/lib/pubid/sae/components/date.rb +19 -0
- data/lib/pubid/sae/components/type.rb +19 -0
- data/lib/pubid/sae/components.rb +11 -0
- data/lib/pubid/sae/identifier.rb +14 -0
- data/lib/pubid/sae/identifiers/base.rb +42 -0
- data/lib/pubid/sae/identifiers.rb +9 -0
- data/lib/pubid/sae/parser.rb +55 -0
- data/lib/pubid/sae/scheme.rb +47 -0
- data/lib/pubid/sae/urn_generator.rb +38 -0
- data/lib/pubid/sae.rb +19 -0
- data/lib/pubid/scheme.rb +207 -0
- data/lib/pubid/urn_generator/base.rb +110 -0
- data/lib/pubid/utils/string_normalizer.rb +196 -0
- data/lib/pubid/utils.rb +7 -0
- data/lib/pubid/version.rb +3 -1
- data/lib/pubid.rb +137 -13
- data/lib/tasks/docs.rake +37 -0
- data/lib/tasks/export.rake +38 -0
- data/lib/tasks/website-data.json +7488 -0
- metadata +613 -171
- data/lib/pubid/registry.rb +0 -30
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Rendering
|
|
5
|
+
module Numbering
|
|
6
|
+
# Render number with optional parts and subparts
|
|
7
|
+
# @param number [Components::Code] primary number
|
|
8
|
+
# @param part [Components::Code, nil] optional part
|
|
9
|
+
# @param subpart [Components::Code, nil] optional subpart
|
|
10
|
+
# @param options [Hash] rendering options
|
|
11
|
+
# @return [String] formatted numbering string
|
|
12
|
+
def render_numbering(number, part = nil, subpart = nil, **options)
|
|
13
|
+
return "" unless number&.value
|
|
14
|
+
|
|
15
|
+
result = " #{number.value}"
|
|
16
|
+
separator = options[:part_separator] || "-"
|
|
17
|
+
result += "#{separator}#{part.value}" if part&.value
|
|
18
|
+
result += "#{separator}#{subpart.value}" if subpart&.value
|
|
19
|
+
|
|
20
|
+
result
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Rendering
|
|
5
|
+
module Publisher
|
|
6
|
+
# Render publisher with optional copublishers
|
|
7
|
+
# @param publisher [Components::Publisher, String] base publisher
|
|
8
|
+
# @param copublishers [Array<Components::Publisher>, nil] optional copublisher list
|
|
9
|
+
# @param options [Hash] rendering options
|
|
10
|
+
# @return [String] formatted publisher string
|
|
11
|
+
def render_publisher(publisher, copublishers = nil, **options)
|
|
12
|
+
return "" unless publisher
|
|
13
|
+
|
|
14
|
+
result = publisher.to_s
|
|
15
|
+
|
|
16
|
+
if copublishers&.any?
|
|
17
|
+
separator = options[:copublisher_separator] || "/"
|
|
18
|
+
result += copublishers.map { |cp| "#{separator}#{cp}" }.join
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
result
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Rendering
|
|
5
|
+
module Stage
|
|
6
|
+
# Render stage and type abbreviations
|
|
7
|
+
# @param stage [Components::Stage] stage component
|
|
8
|
+
# @param type [Components::Type] type component
|
|
9
|
+
# @param has_copublisher [Boolean] whether copublisher exists
|
|
10
|
+
# @param options [Hash] rendering options
|
|
11
|
+
# @return [String] formatted stage/type string
|
|
12
|
+
def render_stage(stage, type = nil, has_copublisher: false, **_options)
|
|
13
|
+
result = ""
|
|
14
|
+
|
|
15
|
+
if stage&.abbr
|
|
16
|
+
separator = has_copublisher ? " " : "/"
|
|
17
|
+
result += "#{separator}#{stage.abbr}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
if type&.abbr && type.abbr != default_type_abbr
|
|
21
|
+
result += type_separator(has_copublisher, result) + type.abbr
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
result
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def default_type_abbr
|
|
30
|
+
"IS" # Override in flavors
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def type_separator(has_copublisher, has_stage)
|
|
34
|
+
has_copublisher || has_stage.empty? ? " " : "/"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Rendering
|
|
5
|
+
module Supplement
|
|
6
|
+
# Render supplement identifiers (amendment, corrigendum, addendum, etc.)
|
|
7
|
+
# @param base_identifier [Identifier] base identifier
|
|
8
|
+
# @param supplements [Array<Hash>] list of supplements
|
|
9
|
+
# @param options [Hash] rendering options
|
|
10
|
+
# @return [String] formatted supplement string
|
|
11
|
+
def render_supplements(base_identifier, supplements, **options)
|
|
12
|
+
return base_identifier.to_s(**options) unless supplements&.any?
|
|
13
|
+
|
|
14
|
+
result = base_identifier.to_s(**options)
|
|
15
|
+
|
|
16
|
+
supplements.each do |supp|
|
|
17
|
+
result += render_single_supplement(supp, **options)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
result
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def render_single_supplement(supp, **options)
|
|
26
|
+
typed_stage = supp[:typed_stage]
|
|
27
|
+
number = supp[:number]
|
|
28
|
+
date = supp[:date]
|
|
29
|
+
|
|
30
|
+
sep = determine_separator(supp, options)
|
|
31
|
+
abbr = typed_stage.abbreviation(format_long: options[:stage_format_long])
|
|
32
|
+
|
|
33
|
+
result = "#{sep}#{abbr}"
|
|
34
|
+
result += " #{number}" if number
|
|
35
|
+
result += ":#{date.year}" if date&.year
|
|
36
|
+
|
|
37
|
+
result
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def determine_separator(supp, options)
|
|
41
|
+
supp_type = supp[:type]&.to_s
|
|
42
|
+
options[:"#{supp_type}_separator"] || options[:supplement_separator] || "/"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Rendering
|
|
5
|
+
autoload :Base, "pubid/rendering/base"
|
|
6
|
+
autoload :Common, "pubid/rendering/common"
|
|
7
|
+
autoload :Date, "pubid/rendering/date"
|
|
8
|
+
autoload :Format, "pubid/rendering/format"
|
|
9
|
+
autoload :Language, "pubid/rendering/language"
|
|
10
|
+
autoload :Numbering, "pubid/rendering/numbering"
|
|
11
|
+
autoload :Publisher, "pubid/rendering/publisher"
|
|
12
|
+
autoload :Stage, "pubid/rendering/stage"
|
|
13
|
+
autoload :Supplement, "pubid/rendering/supplement"
|
|
14
|
+
autoload :RenderingContext, "pubid/rendering/context"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Sae
|
|
5
|
+
class Builder < Pubid::Builder::Base
|
|
6
|
+
def self.build(parsed_data)
|
|
7
|
+
new.build(parsed_data)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def default_identifier_class
|
|
13
|
+
Identifiers::Base
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def cast(type, value)
|
|
17
|
+
case type
|
|
18
|
+
when :publisher
|
|
19
|
+
"SAE"
|
|
20
|
+
when :type
|
|
21
|
+
Components::Type.new(abbr: value.to_s)
|
|
22
|
+
when :number
|
|
23
|
+
Components::Code.new(value: value.to_s)
|
|
24
|
+
when :year
|
|
25
|
+
{ date: Components::Date.new(year: value.to_i) }
|
|
26
|
+
else
|
|
27
|
+
value
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Sae
|
|
7
|
+
module Components
|
|
8
|
+
# Date component for SAE standards
|
|
9
|
+
# SAE uses year only (e.g., 2024, 2022)
|
|
10
|
+
class Date < Lutaml::Model::Serializable
|
|
11
|
+
attribute :year, :integer
|
|
12
|
+
|
|
13
|
+
def to_s
|
|
14
|
+
year.to_s
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Sae
|
|
7
|
+
module Components
|
|
8
|
+
# Type component for SAE document types
|
|
9
|
+
# AMS, AIR,, ARP, AS, MA
|
|
10
|
+
class Type < Lutaml::Model::Serializable
|
|
11
|
+
attribute :abbr, :string
|
|
12
|
+
|
|
13
|
+
def to_s
|
|
14
|
+
abbr.to_s
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Sae
|
|
5
|
+
class Identifier
|
|
6
|
+
def self.parse(input)
|
|
7
|
+
parsed = Parser.parse(input)
|
|
8
|
+
Builder.build(parsed)
|
|
9
|
+
rescue Parslet::ParseFailed => e
|
|
10
|
+
raise "Failed to parse SAE identifier: #{input}\n#{e.message}"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Sae
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Base SAE Identifier
|
|
7
|
+
# Handles all SAE document types (AMS, AIR, ARP, AS, MA)
|
|
8
|
+
class Base < Pubid::Identifier
|
|
9
|
+
# Generate URN for this identifier
|
|
10
|
+
#
|
|
11
|
+
# @return [String] URN representation
|
|
12
|
+
|
|
13
|
+
attribute :publisher, :string, default: -> { "SAE" }
|
|
14
|
+
attribute :type, Sae::Components::Type
|
|
15
|
+
attribute :number, Sae::Components::Code
|
|
16
|
+
attribute :date, Sae::Components::Date
|
|
17
|
+
|
|
18
|
+
def to_s
|
|
19
|
+
parts = []
|
|
20
|
+
|
|
21
|
+
# Publisher and type
|
|
22
|
+
parts << publisher if publisher
|
|
23
|
+
parts << type.to_s if type
|
|
24
|
+
|
|
25
|
+
# Number
|
|
26
|
+
parts << number.to_s if number
|
|
27
|
+
|
|
28
|
+
result = parts.join(" ")
|
|
29
|
+
|
|
30
|
+
# Date
|
|
31
|
+
result += ":#{date.year}" if date
|
|
32
|
+
|
|
33
|
+
result
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def year
|
|
37
|
+
date&.year
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Sae
|
|
7
|
+
class Parser < Parslet::Parser
|
|
8
|
+
rule(:space) { str(" ") }
|
|
9
|
+
rule(:digit) { match["0-9"] }
|
|
10
|
+
rule(:digits) { digit.repeat(1) }
|
|
11
|
+
rule(:letter) { match["A-Z"] }
|
|
12
|
+
rule(:colon) { str(":") }
|
|
13
|
+
|
|
14
|
+
# Publisher
|
|
15
|
+
rule(:publisher) { str("SAE").as(:publisher) }
|
|
16
|
+
|
|
17
|
+
# Document types with optional number suffix (e.g., J300, J308A)
|
|
18
|
+
rule(:doc_type) do
|
|
19
|
+
(
|
|
20
|
+
str("AMS") | # Aerospace Material Specification
|
|
21
|
+
str("AIR") | # Aerospace Information Report
|
|
22
|
+
str("ARP") | # Aerospace Recommended Practice
|
|
23
|
+
str("AS") | # Aerospace Standard
|
|
24
|
+
str("J") | # SAE Standard (e.g., J300)
|
|
25
|
+
str("MA") # Material Advisory
|
|
26
|
+
).as(:type)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Number with optional letter prefix or suffix
|
|
30
|
+
rule(:number) do
|
|
31
|
+
((letter.repeat(1,
|
|
32
|
+
1) >> digits) | (digits >> letter.repeat(0,
|
|
33
|
+
1))).as(:number)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Year
|
|
37
|
+
rule(:year) { digit.repeat(4, 4).as(:year) }
|
|
38
|
+
|
|
39
|
+
# Date
|
|
40
|
+
rule(:date) { colon >> year }
|
|
41
|
+
|
|
42
|
+
# Main identifier
|
|
43
|
+
rule(:identifier) do
|
|
44
|
+
publisher >> space >> doc_type >> space.maybe >>
|
|
45
|
+
number >> date.maybe
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
root(:identifier)
|
|
49
|
+
|
|
50
|
+
def self.parse(input)
|
|
51
|
+
new.parse(input)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Sae
|
|
5
|
+
class Scheme < Pubid::Scheme
|
|
6
|
+
class << self
|
|
7
|
+
def identifiers
|
|
8
|
+
[
|
|
9
|
+
Identifiers::Base,
|
|
10
|
+
]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def typed_stages
|
|
14
|
+
identifiers.flat_map { |klass| klass::TYPED_STAGES }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def locate_typed_stage_by_abbr(abbr)
|
|
18
|
+
abbr = "SAE" if abbr.nil? || abbr.to_s.empty?
|
|
19
|
+
|
|
20
|
+
typed_stage = typed_stages.detect do |ts|
|
|
21
|
+
ts.abbr.include?(abbr)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
unless typed_stage
|
|
25
|
+
raise ArgumentError,
|
|
26
|
+
"Unknown type abbreviation: '#{abbr}'"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
typed_stage
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def locate_identifier_klass_by_type_code(type_code)
|
|
33
|
+
identifier_klass = identifiers.detect do |klass|
|
|
34
|
+
klass.type[:key].to_s == type_code.to_s
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
unless identifier_klass
|
|
38
|
+
raise ArgumentError,
|
|
39
|
+
"Unknown type code: #{type_code}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
identifier_klass
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Sae
|
|
5
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
6
|
+
def urn_type
|
|
7
|
+
return "std" unless identifier.type
|
|
8
|
+
|
|
9
|
+
identifier.type.abbr.to_s.downcase
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def urn_year
|
|
13
|
+
if identifier.date&.year
|
|
14
|
+
return identifier.date.year.to_s
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
identifier.year&.to_s
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def urn_number
|
|
21
|
+
return nil unless identifier.number
|
|
22
|
+
|
|
23
|
+
identifier.number.value.to_s
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def generate
|
|
27
|
+
parts = ["urn", "sae"]
|
|
28
|
+
parts << urn_type
|
|
29
|
+
parts << urn_number if urn_number
|
|
30
|
+
parts << urn_year if urn_year
|
|
31
|
+
|
|
32
|
+
parts[1] = identifier.publisher.to_s.downcase if identifier.publisher
|
|
33
|
+
|
|
34
|
+
parts.join(":")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/pubid/sae.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Sae
|
|
5
|
+
autoload :Builder, "#{__dir__}/sae/builder"
|
|
6
|
+
autoload :Components, "#{__dir__}/sae/components"
|
|
7
|
+
autoload :Identifier, "#{__dir__}/sae/identifier"
|
|
8
|
+
autoload :Identifiers, "#{__dir__}/sae/identifiers"
|
|
9
|
+
autoload :Parser, "#{__dir__}/sae/parser"
|
|
10
|
+
autoload :Scheme, "#{__dir__}/sae/scheme"
|
|
11
|
+
autoload :UrnGenerator, "#{__dir__}/sae/urn_generator"
|
|
12
|
+
|
|
13
|
+
def self.parse(input)
|
|
14
|
+
Identifier.parse(input)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Pubid::Registry.register(:sae, Pubid::Sae)
|
data/lib/pubid/scheme.rb
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
# Base Scheme class defining the standard interface for all flavor schemes.
|
|
5
|
+
#
|
|
6
|
+
# The Scheme acts as a registry for identifier types and their associated
|
|
7
|
+
# typed stages. Each flavor (ISO, IEC, IEEE, etc.) should have a Scheme that
|
|
8
|
+
# implements this interface.
|
|
9
|
+
#
|
|
10
|
+
# == Standard Interface
|
|
11
|
+
#
|
|
12
|
+
# All Scheme implementations must provide these methods:
|
|
13
|
+
#
|
|
14
|
+
# - locate_typed_stage_by_abbr(abbr) -> Find a TypedStage by abbreviation
|
|
15
|
+
# - locate_identifier_klass_by_type_code(type_code) -> Find an identifier class
|
|
16
|
+
# - typed_stages -> Get all typed stages for base identifiers
|
|
17
|
+
# - supplement_typed_stages -> Get typed stages for supplements
|
|
18
|
+
# - all_typed_stages -> Get all typed stages combined
|
|
19
|
+
# - identifiers -> Get all base identifier classes
|
|
20
|
+
# - supplement_identifiers -> Get all supplement identifier classes
|
|
21
|
+
# - all_identifier_classes -> Get all identifier classes combined
|
|
22
|
+
#
|
|
23
|
+
# == Implementation Patterns
|
|
24
|
+
#
|
|
25
|
+
# There are several valid patterns for implementing a Scheme:
|
|
26
|
+
#
|
|
27
|
+
# 1. Class-based (ISO, IEEE, JCGM, JIS, CCSDS, ASHRAE):
|
|
28
|
+
# Use class << self with class methods
|
|
29
|
+
#
|
|
30
|
+
# 2. Instance-based with constants (BSI, CEN):
|
|
31
|
+
# Use TYPED_STAGES_REGISTRY and instance methods
|
|
32
|
+
#
|
|
33
|
+
# 3. Transform-based (ITU):
|
|
34
|
+
# Use model_class and transform methods (no typed stages)
|
|
35
|
+
#
|
|
36
|
+
# 4. Data class (ETSI, Plateau):
|
|
37
|
+
# Use Lutaml::Model::Serializable as a data model
|
|
38
|
+
#
|
|
39
|
+
# 5. Inheritance-based (AMCA):
|
|
40
|
+
# Inherit from Pubid::Scheme base class
|
|
41
|
+
#
|
|
42
|
+
# == Performance
|
|
43
|
+
#
|
|
44
|
+
# All registry lookups are memoized for performance. Callers can rely on
|
|
45
|
+
# repeated calls being O(1) after the first call.
|
|
46
|
+
#
|
|
47
|
+
class Scheme
|
|
48
|
+
# Registry of identifiers for this scheme
|
|
49
|
+
attr_accessor :identifiers,
|
|
50
|
+
:stages,
|
|
51
|
+
:types,
|
|
52
|
+
:languages,
|
|
53
|
+
:publishers,
|
|
54
|
+
:supplement_identifiers
|
|
55
|
+
|
|
56
|
+
def initialize(
|
|
57
|
+
identifiers: [], stages: [], types: [], languages: [], publishers: [],
|
|
58
|
+
supplement_identifiers: []
|
|
59
|
+
)
|
|
60
|
+
@identifiers = identifiers
|
|
61
|
+
@supplement_identifiers = supplement_identifiers
|
|
62
|
+
@stages = stages
|
|
63
|
+
@types = types
|
|
64
|
+
@languages = languages
|
|
65
|
+
@publishers = publishers
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def configure
|
|
69
|
+
yield self if block_given?
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Get all typed stages for base identifiers
|
|
73
|
+
# @return [Array<TypedStage>] All typed stages from identifiers
|
|
74
|
+
# @note Memoized for performance
|
|
75
|
+
def typed_stages
|
|
76
|
+
return @typed_stages if defined?(@typed_stages)
|
|
77
|
+
|
|
78
|
+
@typed_stages = @identifiers.filter_map do |identifier_class|
|
|
79
|
+
identifier_class.const_defined?(:TYPED_STAGES) ? identifier_class.const_get(:TYPED_STAGES) : nil
|
|
80
|
+
end.flatten
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Get all typed stages for supplement identifiers
|
|
84
|
+
# @return [Array<TypedStage>] All typed stages from supplement identifiers
|
|
85
|
+
# @note Memoized for performance
|
|
86
|
+
def supplement_typed_stages
|
|
87
|
+
return @supplement_typed_stages if defined?(@supplement_typed_stages)
|
|
88
|
+
|
|
89
|
+
@supplement_typed_stages = @supplement_identifiers.filter_map do |identifier_class|
|
|
90
|
+
identifier_class.const_defined?(:TYPED_STAGES) ? identifier_class.const_get(:TYPED_STAGES) : nil
|
|
91
|
+
end.flatten
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Get all typed stages (base + supplements), sorted by abbreviation
|
|
95
|
+
# @return [Array<TypedStage>] All typed stages sorted by abbreviation
|
|
96
|
+
# @note Memoized for performance
|
|
97
|
+
def all_typed_stages
|
|
98
|
+
return @all_typed_stages if defined?(@all_typed_stages)
|
|
99
|
+
|
|
100
|
+
@all_typed_stages = (typed_stages + supplement_typed_stages).sort_by do |ts|
|
|
101
|
+
(ts.abbr.first || "").to_s
|
|
102
|
+
end.reverse
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Locate a TypedStage by abbreviation
|
|
106
|
+
# @param abbr [String, Symbol] The abbreviation to find
|
|
107
|
+
# @return [TypedStage, nil] The matching TypedStage, or nil if not found
|
|
108
|
+
# @note Uses hash-based index for O(1) lookup, falls back to linear search
|
|
109
|
+
def locate_typed_stage_by_abbr(abbr)
|
|
110
|
+
abbr = "" if abbr.nil? || abbr.to_s.strip.empty?
|
|
111
|
+
|
|
112
|
+
# Try hash-based index first (O(1))
|
|
113
|
+
typed_stage = typed_stage_index[abbr]
|
|
114
|
+
|
|
115
|
+
# Fall back to linear search if not found (for abbreviations with
|
|
116
|
+
# special formatting or edge cases)
|
|
117
|
+
typed_stage || all_typed_stages.detect do |ts|
|
|
118
|
+
ts.abbr.include?(abbr)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Locate a TypedStage by stage code
|
|
123
|
+
# @param stage_code [String, Symbol] The stage code to find
|
|
124
|
+
# @return [TypedStage, nil] The matching TypedStage, or nil if not found
|
|
125
|
+
# @note Uses linear search for stage code lookup
|
|
126
|
+
def locate_typed_stage_by_stage_code(stage_code)
|
|
127
|
+
stage_code_sym = stage_code.to_sym
|
|
128
|
+
|
|
129
|
+
all_typed_stages.detect do |ts|
|
|
130
|
+
ts.stage_code.to_sym == stage_code_sym
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Locate a TypedStage by harmonized stage code
|
|
135
|
+
# @param harmonized_code [String] The harmonized stage code to find (e.g., "00.00", "10.00")
|
|
136
|
+
# @return [TypedStage, nil] The matching TypedStage, or nil if not found
|
|
137
|
+
# @note Uses linear search to check harmonized_stages arrays
|
|
138
|
+
def locate_typed_stage_by_harmonized_code(harmonized_code)
|
|
139
|
+
harmonized_str = harmonized_code.to_s
|
|
140
|
+
|
|
141
|
+
all_typed_stages.detect do |ts|
|
|
142
|
+
ts.harmonized_stages&.include?(harmonized_str)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Hash-based index of typed stages by abbreviation
|
|
147
|
+
# @return [Hash<String, TypedStage>] index mapping abbreviations to typed stages
|
|
148
|
+
# @note Memoized for O(1) lookup performance
|
|
149
|
+
def typed_stage_index
|
|
150
|
+
@typed_stage_index ||= build_typed_stage_index
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Get all identifier classes sorted by type key
|
|
154
|
+
# @return [Array<Class>] All identifier classes sorted by type key
|
|
155
|
+
# @note Memoized for performance
|
|
156
|
+
def all_identifier_classes
|
|
157
|
+
return @all_identifier_classes if defined?(@all_identifier_classes)
|
|
158
|
+
|
|
159
|
+
@all_identifier_classes = (@identifiers + @supplement_identifiers).sort_by do |klass|
|
|
160
|
+
(klass.type&.dig(:key) || "").to_s
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
alias all_identifier_classes_by_type_code all_identifier_classes
|
|
164
|
+
|
|
165
|
+
# Locate an identifier class by type code
|
|
166
|
+
# @param type_code [String, Symbol] The type code to find
|
|
167
|
+
# @return [Class, nil] The matching identifier class, or nil if not found
|
|
168
|
+
# @note Uses hash-based index for O(1) lookup, falls back to linear search
|
|
169
|
+
def locate_identifier_klass_by_type_code(type_code)
|
|
170
|
+
type_str = type_code.to_s
|
|
171
|
+
|
|
172
|
+
# Try hash-based index first (O(1))
|
|
173
|
+
identifier_klass = identifier_class_index[type_str]
|
|
174
|
+
|
|
175
|
+
# Fall back to linear search if not found
|
|
176
|
+
identifier_klass || all_identifier_classes.detect do |identifier_class|
|
|
177
|
+
identifier_class.type&.dig(:key)&.to_s == type_str
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Hash-based index of identifier classes by type code
|
|
182
|
+
# @return [Hash<String, Class>] index mapping type codes to identifier classes
|
|
183
|
+
# @note Memoized for O(1) lookup performance
|
|
184
|
+
def identifier_class_index
|
|
185
|
+
@identifier_class_index ||= build_identifier_class_index
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
protected
|
|
189
|
+
|
|
190
|
+
# Build hash-based index of typed stages by abbreviation
|
|
191
|
+
# @return [Hash<String, TypedStage>] index mapping abbreviations to typed stages
|
|
192
|
+
def build_typed_stage_index
|
|
193
|
+
all_typed_stages.each_with_object({}) do |ts, index|
|
|
194
|
+
ts.abbr.each { |abbr| index[abbr] = ts }
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Build hash-based index of identifier classes by type code
|
|
199
|
+
# @return [Hash<String, Class>] index mapping type codes to identifier classes
|
|
200
|
+
def build_identifier_class_index
|
|
201
|
+
all_identifier_classes.each_with_object({}) do |klass, index|
|
|
202
|
+
type_key = klass.type&.dig(:key)&.to_s
|
|
203
|
+
index[type_key] = klass if type_key
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|