pubid 2.0.0.pre.alpha.1 → 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 +27 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -0
- 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 -1
- 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 -4
- 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 -0
- 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/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/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 -2
- 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 +66 -1
- data/lib/pubid/ccsds/identifiers/base.rb +11 -50
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/single_identifier.rb +4 -1
- 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 +8 -2
- 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 -4
- 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 +11 -8
- data/lib/pubid/components.rb +4 -0
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -3
- 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/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 +10 -18
- 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 -6
- 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 +48 -65
- data/lib/pubid/iec/components/code.rb +9 -32
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +276 -3
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -28
- 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 -30
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -26
- 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 -15
- 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 -23
- 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 +20 -14
- 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 +57 -171
- data/lib/pubid/iec/urn_parser.rb +53 -252
- 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 -0
- 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 -0
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/identifiers/bibliographic.rb +0 -4
- data/lib/pubid/iho/identifiers/circular_letter.rb +0 -4
- data/lib/pubid/iho/identifiers/miscellaneous.rb +0 -4
- data/lib/pubid/iho/identifiers/publication.rb +0 -4
- data/lib/pubid/iho/identifiers/standard.rb +0 -4
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +59 -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 +233 -6
- 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 +26 -6
- data/lib/pubid/iso/single_identifier.rb +6 -3
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +74 -176
- data/lib/pubid/iso/urn_parser.rb +28 -9
- 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 -39
- 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/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 -3
- 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 +122 -1761
- 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/edition.rb +16 -0
- data/lib/pubid/nist/components/supplement.rb +88 -21
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +25 -0
- data/lib/pubid/nist/identifiers/base.rb +206 -64
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +3 -2
- 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 -11
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -16
- 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 -3
- 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 +67 -424
- 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 +11 -25
- data/lib/pubid/nist/urn_generator.rb +14 -8
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +83 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- 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 +23 -0
- 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 +44 -1
- data/lib/pubid/renderers/base.rb +34 -0
- data/lib/pubid/renderers/directives_renderer.rb +27 -14
- data/lib/pubid/renderers/guide_renderer.rb +7 -1
- data/lib/pubid/renderers/human_readable.rb +31 -8
- data/lib/pubid/renderers/iwa_renderer.rb +5 -1
- data/lib/pubid/renderers/supplement_renderer.rb +4 -1
- data/lib/pubid/rendering/context.rb +33 -21
- 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/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 +77 -43
- 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/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 -187
- 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 -207
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Rendering
|
|
5
|
-
# Common rendering methods for identifier string representation
|
|
6
|
-
#
|
|
7
|
-
# This module extracts duplicated rendering logic across flavors
|
|
8
|
-
# to reduce code duplication and ensure consistency.
|
|
9
|
-
#
|
|
10
|
-
# == Usage
|
|
11
|
-
#
|
|
12
|
-
# Include this module in flavor-specific identifier base classes:
|
|
13
|
-
#
|
|
14
|
-
# class Base < ::Pubid::Identifier
|
|
15
|
-
# include Pubid::Rendering::Common
|
|
16
|
-
#
|
|
17
|
-
# def to_s(lang: :en, lang_single: false, with_edition: false)
|
|
18
|
-
# render_identifier(lang: lang, lang_single: lang_single, with_edition: with_edition)
|
|
19
|
-
# end
|
|
20
|
-
# end
|
|
21
|
-
#
|
|
22
|
-
module Common
|
|
23
|
-
# Render publisher with optional copublishers
|
|
24
|
-
#
|
|
25
|
-
# @param publisher [Components::Publisher] publisher component
|
|
26
|
-
# @param copublisher_separator [String] separator for copublishers (default: "/")
|
|
27
|
-
# @return [String] formatted publisher string
|
|
28
|
-
def render_publisher(publisher, copublisher_separator: "/")
|
|
29
|
-
return "" unless publisher
|
|
30
|
-
|
|
31
|
-
result = publisher.to_s
|
|
32
|
-
cops = publisher.is_a?(Components::Publisher) ? publisher.copublisher : nil
|
|
33
|
-
if cops&.any?
|
|
34
|
-
result += cops.map do |cp|
|
|
35
|
-
"#{copublisher_separator}#{cp}"
|
|
36
|
-
end.join
|
|
37
|
-
end
|
|
38
|
-
result
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Render stage and type abbreviations with proper separators
|
|
42
|
-
#
|
|
43
|
-
# @param stage [Components::Stage] stage component
|
|
44
|
-
# @param type [Components::Type] type component
|
|
45
|
-
# @param has_copublisher [Boolean] whether identifier has copublisher
|
|
46
|
-
# @param default_type_abbr [String] default type abbreviation to skip (default: "IS")
|
|
47
|
-
# @param stage_separator [String] separator before stage without copublisher
|
|
48
|
-
# @return [String] formatted stage/type string
|
|
49
|
-
def render_stage_type(stage, type, has_copublisher: false,
|
|
50
|
-
default_type_abbr: "IS",
|
|
51
|
-
stage_separator: "/")
|
|
52
|
-
result = ""
|
|
53
|
-
|
|
54
|
-
# Add stage abbreviation if present
|
|
55
|
-
if stage&.abbr
|
|
56
|
-
sep = has_copublisher ? " " : stage_separator
|
|
57
|
-
result += "#{sep}#{stage.abbr}"
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# Add type abbreviation if present and not default
|
|
61
|
-
if type&.abbr && type.abbr != default_type_abbr
|
|
62
|
-
# Separator: space after stage or copublisher, slash otherwise
|
|
63
|
-
has_prefix = stage&.abbr || has_copublisher
|
|
64
|
-
sep = has_prefix ? " " : stage_separator
|
|
65
|
-
result += "#{sep}#{type.abbr}"
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
result
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# Render number with optional parts
|
|
72
|
-
#
|
|
73
|
-
# @param number [Components::Code] primary number component
|
|
74
|
-
# @param part [Components::Code] optional part component
|
|
75
|
-
# @param subpart [Components::Code] optional subpart component
|
|
76
|
-
# @param part_separator [String] separator for parts (default: "-")
|
|
77
|
-
# @return [String] formatted numbering string
|
|
78
|
-
def render_numbering(number, part = nil, subpart = nil,
|
|
79
|
-
part_separator: "-")
|
|
80
|
-
return "" unless number&.value
|
|
81
|
-
|
|
82
|
-
result = " #{number.value}"
|
|
83
|
-
result += "#{part_separator}#{part.value}" if part&.value
|
|
84
|
-
result += "#{part_separator}#{subpart.value}" if subpart&.value
|
|
85
|
-
result
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# Render stage iteration (e.g., ".1" for stage iteration)
|
|
89
|
-
#
|
|
90
|
-
# @param stage_iteration [Components::Code] stage iteration component
|
|
91
|
-
# @return [String] formatted stage iteration or empty string
|
|
92
|
-
def render_stage_iteration(stage_iteration)
|
|
93
|
-
stage_iteration&.value ? ".#{stage_iteration.value}" : ""
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# Render date with optional year/month/day
|
|
97
|
-
#
|
|
98
|
-
# @param date [Components::Date] date component
|
|
99
|
-
# @param include_month [Boolean] include month in output
|
|
100
|
-
# @param date_separator [String] separator for date parts (default: "-")
|
|
101
|
-
# @return [String] formatted date string or empty string
|
|
102
|
-
def render_date(date, include_month: false, date_separator: "-")
|
|
103
|
-
return "" unless date&.year
|
|
104
|
-
|
|
105
|
-
result = ":#{date.year}"
|
|
106
|
-
if date.month && include_month
|
|
107
|
-
result += "#{date_separator}#{format('%02d', date.month)}"
|
|
108
|
-
result += "#{date_separator}#{format('%02d', date.day)}" if date.day
|
|
109
|
-
end
|
|
110
|
-
result
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
# Render language codes
|
|
114
|
-
#
|
|
115
|
-
# @param languages [Array<Components::Language>] language components
|
|
116
|
-
# @param lang_single [Boolean] use single character format
|
|
117
|
-
# @param lang_separator [String] separator between languages (default: "/")
|
|
118
|
-
# @return [String] formatted language string or empty string
|
|
119
|
-
def render_languages(languages, lang_single: false, lang_separator: "/")
|
|
120
|
-
return "" unless languages&.any?
|
|
121
|
-
|
|
122
|
-
formatted = languages.map do |l|
|
|
123
|
-
l.to_s(lang_single: lang_single)
|
|
124
|
-
end.join(lang_separator)
|
|
125
|
-
"(#{formatted})"
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
# Render edition component
|
|
129
|
-
#
|
|
130
|
-
# @param edition [Components::Edition] edition component
|
|
131
|
-
# @param with_prefix [Boolean] include prefix (default: true)
|
|
132
|
-
# @return [String] formatted edition string or empty string
|
|
133
|
-
def render_edition(edition, with_prefix: true)
|
|
134
|
-
return "" unless edition
|
|
135
|
-
|
|
136
|
-
if with_prefix
|
|
137
|
-
edition.to_s
|
|
138
|
-
else
|
|
139
|
-
" #{edition}"
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
# Check if publisher has copublishers
|
|
144
|
-
#
|
|
145
|
-
# @param publisher [Components::Publisher] publisher component
|
|
146
|
-
# @return [Boolean] true if has copublishers
|
|
147
|
-
def publisher_has_copublisher?(publisher)
|
|
148
|
-
publisher.is_a?(Components::Publisher) && publisher.has_copublisher?
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
# Get publisher body/name
|
|
152
|
-
#
|
|
153
|
-
# @param publisher [Components::Publisher] publisher component
|
|
154
|
-
# @return [String] publisher body
|
|
155
|
-
def publisher_body(publisher)
|
|
156
|
-
publisher.is_a?(Components::Publisher) ? publisher.body : publisher.to_s
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
# Get copublishers as array
|
|
160
|
-
#
|
|
161
|
-
# @param publisher [Components::Publisher] publisher component
|
|
162
|
-
# @return [Array<String>] array of copublisher names
|
|
163
|
-
def copublishers_list(publisher)
|
|
164
|
-
return [] unless publisher.is_a?(Components::Publisher) && publisher.copublisher&.any?
|
|
165
|
-
|
|
166
|
-
publisher.copublisher.map { |cp| publisher_body(cp) }
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# Render full identifier with all components
|
|
170
|
-
#
|
|
171
|
-
# This is a convenience method that combines all rendering methods
|
|
172
|
-
# in the standard order for most identifier types.
|
|
173
|
-
#
|
|
174
|
-
# @param publisher [Components::Publisher] publisher component
|
|
175
|
-
# @param stage [Components::Stage] stage component
|
|
176
|
-
# @param type [Components::Type] type component
|
|
177
|
-
# @param number [Components::Code] number component
|
|
178
|
-
# @param part [Components::Code] part component
|
|
179
|
-
# @param subpart [Components::Code] subpart component
|
|
180
|
-
# @param stage_iteration [Components::Code] stage iteration component
|
|
181
|
-
# @param date [Components::Date] date component
|
|
182
|
-
# @param edition [Components::Edition] edition component
|
|
183
|
-
# @param languages [Array<Components::Language>] language components
|
|
184
|
-
# @param lang [Symbol] language for rendering (:en or :fr)
|
|
185
|
-
# @param lang_single [Boolean] use single char language format
|
|
186
|
-
# @param with_edition [Boolean] include edition in output
|
|
187
|
-
# @param default_type_abbr [String] default type abbreviation to skip
|
|
188
|
-
# @return [String] formatted identifier string
|
|
189
|
-
def render_full_identifier(publisher:, stage: nil, type: nil,
|
|
190
|
-
number: nil, part: nil, subpart: nil,
|
|
191
|
-
stage_iteration: nil, date: nil,
|
|
192
|
-
edition: nil, languages: nil,
|
|
193
|
-
lang: :en, lang_single: false,
|
|
194
|
-
with_edition: false,
|
|
195
|
-
default_type_abbr: "IS")
|
|
196
|
-
result = render_publisher(publisher)
|
|
197
|
-
result += render_stage_type(stage, type,
|
|
198
|
-
has_copublisher: publisher_has_copublisher?(
|
|
199
|
-
publisher,
|
|
200
|
-
),
|
|
201
|
-
default_type_abbr: default_type_abbr)
|
|
202
|
-
result += render_numbering(number, part, subpart)
|
|
203
|
-
result += render_stage_iteration(stage_iteration) if stage_iteration
|
|
204
|
-
result += render_date(date)
|
|
205
|
-
result += render_edition(edition) if with_edition && edition
|
|
206
|
-
result += render_languages(languages, lang_single: lang_single)
|
|
207
|
-
result
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Rendering
|
|
5
|
-
module Format
|
|
6
|
-
# Dispatch to appropriate format renderer
|
|
7
|
-
# @param format [Symbol] target format
|
|
8
|
-
# @return [String] formatted identifier string
|
|
9
|
-
def to_s(format = nil)
|
|
10
|
-
effective_format = determine_format(format)
|
|
11
|
-
send(:"to_#{effective_format}_style")
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
private
|
|
15
|
-
|
|
16
|
-
def determine_format(format)
|
|
17
|
-
return :short unless format
|
|
18
|
-
return :mr if format.to_sym == :mr
|
|
19
|
-
return :full if %i[full long].include?(format.to_sym)
|
|
20
|
-
|
|
21
|
-
:short
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
data/lib/pubid/sae/scheme.rb
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
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
|
data/lib/pubid/scheme.rb
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
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
|