pubid-iso 0.1.10 → 0.1.11
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 +19 -0
- data/lib/pubid/iso/amendment.rb +28 -3
- data/lib/pubid/iso/corrigendum.rb +20 -3
- data/lib/pubid/iso/errors.rb +6 -0
- data/lib/pubid/iso/harmonized_stage_code.rb +96 -0
- data/lib/pubid/iso/identifier.rb +93 -17
- data/lib/pubid/iso/parser.rb +30 -39
- data/lib/pubid/iso/renderer/base.rb +75 -0
- data/lib/pubid/iso/renderer/dir.rb +3 -3
- data/lib/pubid/iso/renderer/french.rb +2 -2
- data/lib/pubid/iso/renderer/russian.rb +3 -3
- data/lib/pubid/iso/renderer/tc.rb +2 -2
- data/lib/pubid/iso/renderer/urn-dir.rb +3 -5
- data/lib/pubid/iso/renderer/urn-tc.rb +2 -2
- data/lib/pubid/iso/renderer/urn.rb +22 -0
- data/lib/pubid/iso/stage.rb +33 -0
- data/lib/pubid/iso/supplement.rb +36 -6
- data/lib/pubid/iso/transformer.rb +42 -24
- data/lib/pubid/iso/version.rb +1 -1
- data/lib/pubid/iso.rb +4 -0
- metadata +8 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5970af41e67f70e22e928d11ac1eabd71d42ca1855f5d3d6254dea8f98844aab
         | 
| 4 | 
            +
              data.tar.gz: fface01211f338c08b5ab853be7a48573400e4ca8c290bca9f52e9f6d9361c89
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7b4431cc30c76062a19fc1531ad3e2b57ec2b31b0fc9604672ad9a6a3a5908fc756c256f5552d94b0165b36f5032df084250b68fe7c884435339e6628ec365ba
         | 
| 7 | 
            +
              data.tar.gz: b0d2a810b02ceff7044fe35a88a81e3ef2c5feb0a39a8592655136d4b9f0bd6d3ab01e3fb325a743843e057cc816930bfeb09f6cb0d0b45c586b6a8f127bee9d
         | 
    
        data/README.adoc
    CHANGED
    
    | @@ -12,6 +12,25 @@ identifiers. | |
| 12 12 | 
             
            . generate language specific PubID
         | 
| 13 13 | 
             
            . generate dated vs undated PubIDs
         | 
| 14 14 |  | 
| 15 | 
            +
            === Usage
         | 
| 16 | 
            +
             | 
| 17 | 
            +
             | 
| 18 | 
            +
            [source,ruby]
         | 
| 19 | 
            +
            ----
         | 
| 20 | 
            +
            require "pubid-iso"
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            pubid = Pubid::Iso::Identifier.new(publisher: "ISO", number: 123)
         | 
| 23 | 
            +
            pubid.to_s
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            => "ISO 1234"
         | 
| 26 | 
            +
            ----
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            Available attributes:
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            `number`, `publisher`, `copublisher`, `part`, `type`, `year`, `edition`, `language`, `amendments`,
         | 
| 31 | 
            +
            `corrigendums`, `stage`, `substage`, `iteration`, `supplements`, `amendment_stage`, `corrigendum_stage`,
         | 
| 32 | 
            +
            `joint_document`, `tctype`, `sctype`, `wgtype`, `tcnumber`, `scnumber`, `wgnumber`, `urn_stage`,
         | 
| 33 | 
            +
            `dir`, `dirtype`, `supplement`
         | 
| 15 34 |  | 
| 16 35 | 
             
            == Elements of the PubID
         | 
| 17 36 |  | 
    
        data/lib/pubid/iso/amendment.rb
    CHANGED
    
    | @@ -1,9 +1,34 @@ | |
| 1 1 | 
             
            module Pubid::Iso
         | 
| 2 2 | 
             
              class Amendment < Supplement
         | 
| 3 | 
            -
                 | 
| 3 | 
            +
                # @param stage_format_long [Boolean] long or short format for stage rendering
         | 
| 4 | 
            +
                # @param with_date [Boolean] include date
         | 
| 5 | 
            +
                def render_pubid(stage_format_long = true, with_date = true)
         | 
| 4 6 | 
             
                  stage = render_pubid_stage
         | 
| 5 | 
            -
                   | 
| 6 | 
            -
                   | 
| 7 | 
            +
                  pubid_number = render_pubid_number(with_date: with_date)
         | 
| 8 | 
            +
                  case stage.to_s
         | 
| 9 | 
            +
                  when "DIS"
         | 
| 10 | 
            +
                    if stage_format_long
         | 
| 11 | 
            +
                      "/DAmd #{pubid_number}"
         | 
| 12 | 
            +
                    else
         | 
| 13 | 
            +
                      "/DAM #{pubid_number}"
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                  when "FDIS"
         | 
| 16 | 
            +
                    if stage_format_long
         | 
| 17 | 
            +
                      "/FDAmd #{pubid_number}"
         | 
| 18 | 
            +
                    else
         | 
| 19 | 
            +
                      "/FDAM #{pubid_number}"
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  when "CD"
         | 
| 22 | 
            +
                    if stage_format_long
         | 
| 23 | 
            +
                      "/CD Amd #{pubid_number}"
         | 
| 24 | 
            +
                    else
         | 
| 25 | 
            +
                      "/CDAM #{pubid_number}"
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                  when ""
         | 
| 28 | 
            +
                    "/Amd #{pubid_number}"
         | 
| 29 | 
            +
                  else
         | 
| 30 | 
            +
                    "/#{stage} Amd #{pubid_number}"
         | 
| 31 | 
            +
                  end
         | 
| 7 32 | 
             
                end
         | 
| 8 33 |  | 
| 9 34 | 
             
                def render_urn
         | 
| @@ -1,9 +1,26 @@ | |
| 1 1 | 
             
            module Pubid::Iso
         | 
| 2 2 | 
             
              class Corrigendum < Supplement
         | 
| 3 | 
            -
                def render_pubid
         | 
| 3 | 
            +
                def render_pubid(stage_format_long = true, with_date = true)
         | 
| 4 4 | 
             
                  stage = render_pubid_stage
         | 
| 5 | 
            -
                   | 
| 6 | 
            -
                   | 
| 5 | 
            +
                  pubid_number = render_pubid_number(with_date: with_date)
         | 
| 6 | 
            +
                  case stage.to_s
         | 
| 7 | 
            +
                  when "DIS"
         | 
| 8 | 
            +
                    if stage_format_long
         | 
| 9 | 
            +
                      "/DCor #{pubid_number}"
         | 
| 10 | 
            +
                    else
         | 
| 11 | 
            +
                      "/DCOR #{pubid_number}"
         | 
| 12 | 
            +
                    end
         | 
| 13 | 
            +
                  when "FDIS"
         | 
| 14 | 
            +
                    if stage_format_long
         | 
| 15 | 
            +
                      "/FDCor #{pubid_number}"
         | 
| 16 | 
            +
                    else
         | 
| 17 | 
            +
                      "/FDCOR #{pubid_number}"
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  when ""
         | 
| 20 | 
            +
                    "/Cor #{pubid_number}"
         | 
| 21 | 
            +
                  else
         | 
| 22 | 
            +
                    "/#{stage} Cor #{pubid_number}"
         | 
| 23 | 
            +
                  end
         | 
| 7 24 | 
             
                end
         | 
| 8 25 |  | 
| 9 26 | 
             
                def render_urn
         | 
    
        data/lib/pubid/iso/errors.rb
    CHANGED
    
    | @@ -1,5 +1,11 @@ | |
| 1 1 | 
             
            module Pubid::Iso
         | 
| 2 2 | 
             
              module Errors
         | 
| 3 3 | 
             
                class ParseError < StandardError; end
         | 
| 4 | 
            +
                class PublishedIterationError < StandardError; end
         | 
| 5 | 
            +
                class HarmonizedStageCodeInvalidError < StandardError; end
         | 
| 6 | 
            +
                class CodeInvalidError < StandardError; end
         | 
| 7 | 
            +
                class IsStageIterationError < StandardError; end
         | 
| 8 | 
            +
                class WrongFormat < StandardError; end
         | 
| 9 | 
            +
                class SupplementWithoutYearError < StandardError; end
         | 
| 4 10 | 
             
              end
         | 
| 5 11 | 
             
            end
         | 
| @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            module Pubid::Iso
         | 
| 2 | 
            +
              class HarmonizedStageCode
         | 
| 3 | 
            +
                include Comparable
         | 
| 4 | 
            +
                attr_accessor :stage, :substage
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                DESCRIPTIONS = {
         | 
| 7 | 
            +
                  "00.00" => "Proposal for new project received",
         | 
| 8 | 
            +
                  "00.20" => "Proposal for new project under review",
         | 
| 9 | 
            +
                  "00.60" => "Close of review",
         | 
| 10 | 
            +
                  "00.98" => "Proposal for new project abandoned",
         | 
| 11 | 
            +
                  "00.99" => "Approval to ballot proposal for new project",
         | 
| 12 | 
            +
                  "10.00" => "Proposal for new project registered",
         | 
| 13 | 
            +
                  "10.20" => "New project ballot initiated",
         | 
| 14 | 
            +
                  "10.60" => "Close of voting",
         | 
| 15 | 
            +
                  "10.92" => "Proposal returned to submitter for further definition",
         | 
| 16 | 
            +
                  "10.98" => "New project rejected",
         | 
| 17 | 
            +
                  "10.99" => "New project approved",
         | 
| 18 | 
            +
                  "20.00" => "New project registered in TC/SC work programme",
         | 
| 19 | 
            +
                  "20.20" => "Working draft (WD) study initiated",
         | 
| 20 | 
            +
                  "20.60" => "Close of comment period",
         | 
| 21 | 
            +
                  "20.98" => "Project deleted",
         | 
| 22 | 
            +
                  "20.99" => "WD approved for registration as CD",
         | 
| 23 | 
            +
                  "30.00" => "Committee draft (CD) registered",
         | 
| 24 | 
            +
                  "30.20" => "CD study/ballot initiated",
         | 
| 25 | 
            +
                  "30.60" => "Close of voting/ comment period",
         | 
| 26 | 
            +
                  "30.92" => "CD referred back to Working Group",
         | 
| 27 | 
            +
                  "30.98" => "Project deleted",
         | 
| 28 | 
            +
                  "30.99" => "CD approved for registration as DIS",
         | 
| 29 | 
            +
                  "40.00" => "DIS registered",
         | 
| 30 | 
            +
                  "40.20" => "DIS ballot initiated: 12 weeks",
         | 
| 31 | 
            +
                  "40.60" => "Close of voting",
         | 
| 32 | 
            +
                  "40.92" => "Full report circulated: DIS referred back to TC or SC",
         | 
| 33 | 
            +
                  "40.93" => "Full report circulated: decision for new DIS ballot",
         | 
| 34 | 
            +
                  "40.98" => "Project deleted",
         | 
| 35 | 
            +
                  "40.99" => "Full report circulated: DIS approved for registration as FDIS",
         | 
| 36 | 
            +
                  "50.00" => "Final text received or FDIS registered for formal approval",
         | 
| 37 | 
            +
                  "50.20" => "Proof sent to secretariat or FDIS ballot initiated: 8 weeks",
         | 
| 38 | 
            +
                  "50.60" => "Close of voting. Proof returned by secretariat",
         | 
| 39 | 
            +
                  "50.92" => "FDIS or proof referred back to TC or SC",
         | 
| 40 | 
            +
                  "50.98" => "Project deleted",
         | 
| 41 | 
            +
                  "50.99" => "FDIS or proof approved for publication",
         | 
| 42 | 
            +
                  "60.00" => "International Standard under publication",
         | 
| 43 | 
            +
                  "60.60" => "International Standard published",
         | 
| 44 | 
            +
                  "90.20" => "International Standard under systematic review",
         | 
| 45 | 
            +
                  "90.60" => "Close of review",
         | 
| 46 | 
            +
                  "90.92" => "International Standard to be revised",
         | 
| 47 | 
            +
                  "90.93" => "International Standard confirmed",
         | 
| 48 | 
            +
                  "90.99" => "Withdrawal of International Standard proposed by TC or SC",
         | 
| 49 | 
            +
                  "95.20" => "Withdrawal ballot initiated",
         | 
| 50 | 
            +
                  "95.60" => "Close of voting",
         | 
| 51 | 
            +
                  "95.92" => "Decision not to withdraw International Standard",
         | 
| 52 | 
            +
                  "95.99" => "Withdrawal of International Standard"
         | 
| 53 | 
            +
                }
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                STAGES_NAMES = {
         | 
| 56 | 
            +
                  approval: "50"
         | 
| 57 | 
            +
                }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                SUBSTAGES_NAMES = {
         | 
| 60 | 
            +
                  registration: "00"
         | 
| 61 | 
            +
                }
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                def initialize(stage, substage = nil)
         | 
| 64 | 
            +
                  # when stage is stage name
         | 
| 65 | 
            +
                  if STAGES_NAMES.key?(stage)
         | 
| 66 | 
            +
                    @stage = STAGES_NAMES[stage]
         | 
| 67 | 
            +
                    @substage = SUBSTAGES_NAMES[substage]
         | 
| 68 | 
            +
                  else
         | 
| 69 | 
            +
                    # stage is number
         | 
| 70 | 
            +
                    validate_stage(stage, substage)
         | 
| 71 | 
            +
                    @stage, @substage = stage, substage
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def validate_stage(stage, substage)
         | 
| 76 | 
            +
                  # raise an error if stage is not number
         | 
| 77 | 
            +
                  raise Errors::HarmonizedStageCodeInvalidError if Integer(stage).nil?
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                  # raise an error when substage wrong
         | 
| 80 | 
            +
                  raise Errors::HarmonizedStageCodeInvalidError if stage == "90" && substage == "00"
         | 
| 81 | 
            +
                  # raise Errors::HarmonizedStageCodeNotValidError if stage.to_i
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                def to_s
         | 
| 85 | 
            +
                  "#{stage}.#{substage}"
         | 
| 86 | 
            +
                end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                def ==(other)
         | 
| 89 | 
            +
                  stage == other.stage && substage == other.substage
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                def description
         | 
| 93 | 
            +
                  DESCRIPTIONS[to_s]
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
            end
         | 
    
        data/lib/pubid/iso/identifier.rb
    CHANGED
    
    | @@ -1,18 +1,62 @@ | |
| 1 1 | 
             
            module Pubid::Iso
         | 
| 2 2 | 
             
              class Identifier < Pubid::Core::Identifier
         | 
| 3 | 
            -
                attr_accessor :stage, | 
| 4 | 
            -
                              :iteration, : | 
| 5 | 
            -
                              :amendment_stage, :corrigendum_stage, :joint_document,
         | 
| 3 | 
            +
                attr_accessor :stage,
         | 
| 4 | 
            +
                              :iteration, :joint_document,
         | 
| 6 5 | 
             
                              :tctype, :sctype, :wgtype, :tcnumber, :scnumber, :wgnumber,
         | 
| 7 | 
            -
                              :urn_stage, : | 
| 6 | 
            +
                              :urn_stage, :dirtype,
         | 
| 7 | 
            +
                              # supplement for DIR type identifiers
         | 
| 8 | 
            +
                              :supplement
         | 
| 8 9 |  | 
| 9 | 
            -
                 | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 10 | 
            +
                # Creates new identifier from options provided, includes options from
         | 
| 11 | 
            +
                # Pubid::Core::Identifier#initialize
         | 
| 12 | 
            +
                #
         | 
| 13 | 
            +
                # @param stage [Stage] stage
         | 
| 14 | 
            +
                # @param urn_stage [Float] numeric stage for URN rendering
         | 
| 15 | 
            +
                # @param iteration [Integer] document iteration, eg. "1", "2", "3"
         | 
| 16 | 
            +
                # @param joint_document [Identifier] joint document
         | 
| 17 | 
            +
                # @param supplement [Supplement] supplement
         | 
| 18 | 
            +
                # @param tctype [String] Technical Committee type, eg. "TC", "JTC"
         | 
| 19 | 
            +
                # @param sctype [String] TC subsommittee, eg. "SC"
         | 
| 20 | 
            +
                # @param wgtype [String] TC working group type, eg. "AG", "AHG"
         | 
| 21 | 
            +
                # @param tcnumber [Integer] Technical Committee number, eg. "1", "2"
         | 
| 22 | 
            +
                # @param scnumber [Integer] Subsommittee number, eg. "1", "2"
         | 
| 23 | 
            +
                # @param wgnumber [Integer] Working group number, eg. "1", "2"
         | 
| 24 | 
            +
                # @param dirtype [String] Directives document type, eg. "JTC"
         | 
| 25 | 
            +
                # @see Supplement
         | 
| 26 | 
            +
                # @see Identifier
         | 
| 27 | 
            +
                # @see Pubid::Core::Identifier
         | 
| 28 | 
            +
                # @see Parser
         | 
| 29 | 
            +
                #
         | 
| 30 | 
            +
                def initialize(publisher: "ISO", number: nil, stage: nil, iteration: nil, supplement: nil,
         | 
| 31 | 
            +
                               joint_document: nil, urn_stage: nil,
         | 
| 32 | 
            +
                               tctype: nil, sctype: nil, wgtype: nil, tcnumber: nil,
         | 
| 33 | 
            +
                               scnumber: nil, wgnumber:nil,
         | 
| 34 | 
            +
                               dir: nil, dirtype: nil, year: nil, amendments: nil,
         | 
| 35 | 
            +
                               corrigendums: nil, **opts)
         | 
| 36 | 
            +
                  super(**opts.merge(number: number, publisher: publisher, year: year,
         | 
| 37 | 
            +
                                     amendments: amendments, corrigendums: corrigendums))
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  if (amendments || corrigendums) && year.nil?
         | 
| 40 | 
            +
                    raise Errors::SupplementWithoutYearError, "Cannot apply supplement to document without edition year"
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                  if stage
         | 
| 43 | 
            +
                    if stage.abbr == "IS" && iteration
         | 
| 44 | 
            +
                      raise Errors::IsStageIterationError, "IS stage document cannot have iteration"
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
                    @stage = stage
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                  @iteration = iteration.to_i if iteration
         | 
| 49 | 
            +
                  @supplement = supplement if supplement
         | 
| 50 | 
            +
                  @joint_document = joint_document if joint_document
         | 
| 51 | 
            +
                  @urn_stage = urn_stage if urn_stage
         | 
| 52 | 
            +
                  @tctype = tctype if tctype
         | 
| 53 | 
            +
                  @sctype = sctype.to_s if sctype
         | 
| 54 | 
            +
                  @wgtype = wgtype.to_s if wgtype
         | 
| 55 | 
            +
                  @tcnumber = tcnumber.to_s if tcnumber
         | 
| 56 | 
            +
                  @scnumber = scnumber.to_s if scnumber
         | 
| 57 | 
            +
                  @wgnumber = wgnumber.to_s if wgnumber
         | 
| 58 | 
            +
                  @dir = dir.to_s if dir
         | 
| 59 | 
            +
                  @dirtype = dirtype.to_s if dirtype
         | 
| 16 60 | 
             
                end
         | 
| 17 61 |  | 
| 18 62 | 
             
                def self.parse_from_title(title)
         | 
| @@ -40,14 +84,45 @@ module Pubid::Iso | |
| 40 84 | 
             
                  def get_transformer_class
         | 
| 41 85 | 
             
                    Transformer
         | 
| 42 86 | 
             
                  end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  def get_renderer_class
         | 
| 89 | 
            +
                    Renderer::Base
         | 
| 90 | 
            +
                  end
         | 
| 43 91 | 
             
                end
         | 
| 44 92 |  | 
| 45 93 | 
             
                def urn
         | 
| 46 | 
            -
                  (@tctype && Renderer::UrnTc || @ | 
| 94 | 
            +
                  (@tctype && Renderer::UrnTc || @type == "DIR" && Renderer::UrnDir || Pubid::Iso::Renderer::Urn).new(get_params).render
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                def formatted(format)
         | 
| 98 | 
            +
                  case format
         | 
| 99 | 
            +
                  when :ref_num_short
         | 
| 100 | 
            +
                    to_s(with_language_code: :single, stage_format_long: false)
         | 
| 101 | 
            +
                  when :ref_num_long
         | 
| 102 | 
            +
                    to_s(with_language_code: :iso, stage_format_long: true)
         | 
| 103 | 
            +
                  when :ref_dated
         | 
| 104 | 
            +
                    to_s(with_language_code: :none, stage_format_long: false)
         | 
| 105 | 
            +
                  when :ref_dated_long
         | 
| 106 | 
            +
                    to_s(with_language_code: :none, stage_format_long: true)
         | 
| 107 | 
            +
                  when :ref_undated
         | 
| 108 | 
            +
                    to_s(with_language_code: :none, stage_format_long: false, with_date: false)
         | 
| 109 | 
            +
                  when :ref_undated_long
         | 
| 110 | 
            +
                    to_s(with_language_code: :none, stage_format_long: true, with_date: false)
         | 
| 111 | 
            +
                  else
         | 
| 112 | 
            +
                    raise Errors::WrongFormat, "#{format} is not available"
         | 
| 113 | 
            +
                  end
         | 
| 47 114 | 
             
                end
         | 
| 48 115 |  | 
| 49 | 
            -
                 | 
| 50 | 
            -
             | 
| 116 | 
            +
                # Renders pubid identifier
         | 
| 117 | 
            +
                #
         | 
| 118 | 
            +
                # @param lang [:french,:russian] use language specific renderer
         | 
| 119 | 
            +
                # @param with_date [Boolean] render identifier with date
         | 
| 120 | 
            +
                # @param with_language_code [:iso,:single] use iso format or single language code for rendering
         | 
| 121 | 
            +
                # @param with_edition [Boolean] render identifier with edition
         | 
| 122 | 
            +
                # @param stage_format_long [Boolean] render with long or short stage format
         | 
| 123 | 
            +
                # @return [String] pubid identifier
         | 
| 124 | 
            +
                def to_s(lang: nil, with_date: true, with_language_code: :iso,
         | 
| 125 | 
            +
                         with_edition: true, stage_format_long: true)
         | 
| 51 126 | 
             
                  case lang
         | 
| 52 127 | 
             
                  when :french
         | 
| 53 128 | 
             
                    Renderer::French.new(get_params)
         | 
| @@ -56,13 +131,14 @@ module Pubid::Iso | |
| 56 131 | 
             
                  else
         | 
| 57 132 | 
             
                    if @tctype
         | 
| 58 133 | 
             
                      Renderer::Tc.new(get_params)
         | 
| 59 | 
            -
                    elsif @ | 
| 134 | 
            +
                    elsif @type == "DIR"
         | 
| 60 135 | 
             
                      Renderer::Dir.new(get_params)
         | 
| 61 136 | 
             
                    else
         | 
| 62 137 | 
             
                      self.class.get_renderer_class.new(get_params)
         | 
| 63 138 | 
             
                    end
         | 
| 64 | 
            -
                  end.render(with_date: with_date, with_language_code: with_language_code | 
| 65 | 
            -
             | 
| 139 | 
            +
                  end.render(with_date: with_date, with_language_code: with_language_code, with_edition: with_edition,
         | 
| 140 | 
            +
                             stage_format_long: stage_format_long) +
         | 
| 141 | 
            +
                    if @joint_document && @type != "DIR"
         | 
| 66 142 | 
             
                      "|#{@joint_document}"
         | 
| 67 143 | 
             
                    end.to_s
         | 
| 68 144 | 
             
                end
         | 
    
        data/lib/pubid/iso/parser.rb
    CHANGED
    
    | @@ -1,36 +1,33 @@ | |
| 1 1 | 
             
            module Pubid::Iso
         | 
| 2 2 | 
             
              class Parser < Pubid::Core::Parser
         | 
| 3 | 
            +
                STAGES = %w[NP NWIP WD CD DIS FDIS PRF IS AWI PWI FPD pD PD FD D F].freeze
         | 
| 4 | 
            +
                TYPES = %w[DATA ISP IWA R TTA TS TR PAS Guide GUIDE DIR].freeze
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                TCTYPES = ["TC", "JTC", "PC", "IT", "CAB", "CASCO", "COPOLCO",
         | 
| 7 | 
            +
                  "COUNCIL", "CPSG", "CS", "DEVCO", "GA", "GAAB", "INFCO",
         | 
| 8 | 
            +
                  "ISOlutions", "ITN", "REMCO", "TMB", "TMBG", "WMO",
         | 
| 9 | 
            +
                  "DMT", "JCG", "SGPM", "ATMG", "CCCC", "CCCC-TG", "JDMT",
         | 
| 10 | 
            +
                  "JSAG", "JSCTF-TF", "JTCG", "JTCG-TF", "SAG_Acc", "SAG_CRMI",
         | 
| 11 | 
            +
                  "SAG_CRMI_CG", "SAG_ESG", "SAG_ESG_CG", "SAG_MRS", "SAG SF", "SAG SF_CG",
         | 
| 12 | 
            +
                  "SMCC", "STMG", "MENA STAR"].freeze
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                WGTYPES = ["AG", "AHG", "AhG", "WG", "JWG", "QC", "TF",
         | 
| 15 | 
            +
                  "PPC", "CAG", "WG SGDG", "WG SR", "STAR", "STTF", "TIG",
         | 
| 16 | 
            +
                  "CPAG", "CSC", "ITSAG", "CSC/FIN", "CSC/NOM", "CSC/OVE",
         | 
| 17 | 
            +
                  "CSC/SP", "CSC/FIN", "JAG"].freeze
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                ORGANIZATIONS = %w[IEC IEEE CIW SAE CIE ASME ASTM OECD ISO IWA HL7 CEI].freeze
         | 
| 3 20 | 
             
                rule(:stage) do
         | 
| 4 | 
            -
                  Renderer::Russian::STAGE.values | 
| 5 | 
            -
                    # other stages
         | 
| 6 | 
            -
                    str("NP") | str("NWIP") |
         | 
| 7 | 
            -
                    str("WD") | str("CD") | str("DIS") | str("FDIS") | str("PRF") |
         | 
| 8 | 
            -
                    str("IS") | str("AWI") | str("PWI") |
         | 
| 9 | 
            -
                    # AMD and COR stages
         | 
| 10 | 
            -
                    str("FPD") | str("pD") | str("PD") | str("FD") | str("D")) do |acc, stage|
         | 
| 11 | 
            -
                    acc | str(stage)
         | 
| 12 | 
            -
                  end
         | 
| 21 | 
            +
                  array_to_str(Renderer::Russian::STAGE.values) | array_to_str(STAGES)
         | 
| 13 22 | 
             
                end
         | 
| 14 23 |  | 
| 15 24 | 
             
                rule(:type) do
         | 
| 16 | 
            -
                  (
         | 
| 17 | 
            -
                    Renderer::Russian::TYPE.values.reduce(
         | 
| 18 | 
            -
                      str("DATA") | str("ISP") | str("IWA") | str("R") | str("TTA") |
         | 
| 19 | 
            -
                      str("TS") | str("TR") | str("PAS") | str("Guide") | str("GUIDE")) do |acc, type|
         | 
| 20 | 
            -
                      acc | str(type)
         | 
| 21 | 
            -
                    end
         | 
| 22 | 
            -
                  ).as(:type)
         | 
| 25 | 
            +
                  (array_to_str(Renderer::Russian::TYPE.values) | array_to_str(TYPES)).as(:type)
         | 
| 23 26 | 
             
                end
         | 
| 24 27 |  | 
| 25 28 | 
             
                rule(:tctype) do
         | 
| 26 29 | 
             
                  # tc-types
         | 
| 27 | 
            -
                   | 
| 28 | 
            -
                    str("COUNCIL") | str("CPSG") | str("CS") | str("DEVCO") | str("GA") | str("GAAB") | str("INFCO") |
         | 
| 29 | 
            -
                    str("ISOlutions") | str("ITN") | str("REMCO") | str("TMB") | str("TMBG") | str("WMO") |
         | 
| 30 | 
            -
                    str("DMT") | str("JCG") | str("SGPM") | str("ATMG") | str("CCCC") | str("CCCC-TG") | str("JDMT") |
         | 
| 31 | 
            -
                    str("JSAG") | str("JSCTF-TF") | str("JTCG") | str("JTCG-TF") | str("SAG_Acc") | str("SAG_CRMI") |
         | 
| 32 | 
            -
                    str("SAG_CRMI_CG") | str("SAG_ESG") | str("SAG_ESG_CG") | str("SAG_MRS") | str("SAG SF") | str("SAG SF_CG") |
         | 
| 33 | 
            -
                    str("SMCC") | str("STMG") | str("MENA STAR")
         | 
| 30 | 
            +
                  array_to_str(TCTYPES)
         | 
| 34 31 | 
             
                end
         | 
| 35 32 |  | 
| 36 33 | 
             
                rule(:sctype) do
         | 
| @@ -38,10 +35,7 @@ module Pubid::Iso | |
| 38 35 | 
             
                end
         | 
| 39 36 |  | 
| 40 37 | 
             
                rule(:wgtype) do
         | 
| 41 | 
            -
                   | 
| 42 | 
            -
                    str("PPC") | str("CAG") | str("WG SGDG") | str("WG SR") | str("STAR") | str("STTF") | str("TIG") |
         | 
| 43 | 
            -
                    str("CPAG") | str("CSC") | str("ITSAG") | str("CSC/FIN") | str("CSC/NOM") | str("CSC/OVE") |
         | 
| 44 | 
            -
                    str("CSC/SP") | str("CSC/FIN") | str("JAG")
         | 
| 38 | 
            +
                  array_to_str(WGTYPES)
         | 
| 45 39 | 
             
                end
         | 
| 46 40 |  | 
| 47 41 | 
             
                rule(:part) do
         | 
| @@ -50,12 +44,7 @@ module Pubid::Iso | |
| 50 44 | 
             
                end
         | 
| 51 45 |  | 
| 52 46 | 
             
                rule(:organization) do
         | 
| 53 | 
            -
                  Renderer::Russian::PUBLISHER.values | 
| 54 | 
            -
                    str("IEC") | str("IEEE") | str("CIW") | str("SAE") |
         | 
| 55 | 
            -
                    str("CIE") | str("ASME") | str("ASTM") | str("OECD") | str("ISO") |
         | 
| 56 | 
            -
                    str("IWA") | str("HL7") | str("CEI")) do |acc, publisher|
         | 
| 57 | 
            -
                    acc | str(publisher)
         | 
| 58 | 
            -
                  end
         | 
| 47 | 
            +
                  array_to_str(Renderer::Russian::PUBLISHER.values) | array_to_str(ORGANIZATIONS)
         | 
| 59 48 | 
             
                end
         | 
| 60 49 |  | 
| 61 50 | 
             
                rule(:edition) do
         | 
| @@ -72,8 +61,9 @@ module Pubid::Iso | |
| 72 61 | 
             
                  (str("/") | space).maybe >>
         | 
| 73 62 | 
             
                    (str("Amd") | str("AMD") | str("AM")) >>
         | 
| 74 63 | 
             
                    (space | str(".")).repeat(1).maybe >>
         | 
| 75 | 
            -
                    digits.as(: | 
| 76 | 
            -
                    ( | 
| 64 | 
            +
                    digits.as(:number) >>
         | 
| 65 | 
            +
                    (str(".") >> digits.as(:iteration)).maybe >>
         | 
| 66 | 
            +
                    ((str(":") | str("-")) >> digits.as(:year)).maybe).as(:amendments)
         | 
| 77 67 | 
             
                end
         | 
| 78 68 |  | 
| 79 69 | 
             
                rule(:corrigendum) do
         | 
| @@ -81,8 +71,9 @@ module Pubid::Iso | |
| 81 71 | 
             
                  (str("/") | space).maybe >>
         | 
| 82 72 | 
             
                    (str("Cor") | str("COR")) >>
         | 
| 83 73 | 
             
                    (space | str(".")).repeat(1).maybe >>
         | 
| 84 | 
            -
                    digits.as(: | 
| 85 | 
            -
                    ( | 
| 74 | 
            +
                    digits.as(:number) >>
         | 
| 75 | 
            +
                    (str(".") >> digits.as(:iteration)).maybe >>
         | 
| 76 | 
            +
                    ((str(":") | str("-")) >> digits.as(:year)).maybe).as(:corrigendums)
         | 
| 86 77 | 
             
                end
         | 
| 87 78 |  | 
| 88 79 | 
             
                rule(:language) do
         | 
| @@ -115,7 +106,7 @@ module Pubid::Iso | |
| 115 106 | 
             
                end
         | 
| 116 107 |  | 
| 117 108 | 
             
                rule(:dir_document_body) do
         | 
| 118 | 
            -
                  ((str("DIR") | str("Directives Part") | str("Directives, Part") | str("Directives,")).as(: | 
| 109 | 
            +
                  ((str("DIR") | str("Directives Part") | str("Directives, Part") | str("Directives,")).as(:type) >> space).maybe >>
         | 
| 119 110 | 
             
                    (str("JTC").as(:dirtype) >> space).maybe >>
         | 
| 120 111 | 
             
                    (digits.as(:number) >> (str(":") >> year).maybe).maybe >>
         | 
| 121 112 | 
             
                    (str(" -- Consolidated").maybe >> (space? >> (organization.as(:publisher) >> space).maybe >>
         | 
| @@ -129,7 +120,7 @@ module Pubid::Iso | |
| 129 120 | 
             
                    space? >> ((stage.as(:stage) | type) >> space).maybe >>
         | 
| 130 121 | 
             
                    digits.as(:number) >>
         | 
| 131 122 | 
             
                    # for identifiers like ISO 5537/IDF 26
         | 
| 132 | 
            -
                    (str("|") >> (str("IDF") >> space >> digits).as(:joint_document)).maybe >>
         | 
| 123 | 
            +
                    (str("|") >> (str("IDF").as(:publisher) >> space >> digits.as(:number)).as(:joint_document)).maybe >>
         | 
| 133 124 | 
             
                    part.maybe >> iteration.maybe >>
         | 
| 134 125 | 
             
                    (space? >> (str(":") | str("-")) >> year).maybe >>
         | 
| 135 126 | 
             
                    # stage before amendment
         | 
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            module Pubid::Iso::Renderer
         | 
| 2 | 
            +
              class Base < Pubid::Core::Renderer::Base
         | 
| 3 | 
            +
                # Render identifier
         | 
| 4 | 
            +
                # @param with_edition [Boolean] include edition in output
         | 
| 5 | 
            +
                # @see Pubid::Core::Renderer::Base for another options
         | 
| 6 | 
            +
                def render(with_edition: true, **args)
         | 
| 7 | 
            +
                  params = prerender_params(@params,
         | 
| 8 | 
            +
                                            { with_edition: with_edition }.merge(args))
         | 
| 9 | 
            +
                  # render empty string when the key is not exist
         | 
| 10 | 
            +
                  params.default = ""
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  render_identifier(params)
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def render_identifier(params)
         | 
| 16 | 
            +
                  if @params[:type] && @params[:stage] && %w(DIS FDIS).include?(@params[:stage].abbr)
         | 
| 17 | 
            +
                    render_base(params, " #{render_short_stage(@params[:stage].abbr)}#{@params[:type]}")
         | 
| 18 | 
            +
                  else
         | 
| 19 | 
            +
                    render_base(params, "%{type}%{stage}" % params)
         | 
| 20 | 
            +
                  end +
         | 
| 21 | 
            +
                    "%{part}%{iteration}%{year}%{edition}%{amendments}%{corrigendums}%{language}" % params
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def render_short_stage(stage)
         | 
| 25 | 
            +
                  case stage
         | 
| 26 | 
            +
                  when "DIS"
         | 
| 27 | 
            +
                    "D"
         | 
| 28 | 
            +
                  when "FDIS"
         | 
| 29 | 
            +
                    "FD"
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def render_type(type, opts, params)
         | 
| 34 | 
            +
                  if params[:copublisher]
         | 
| 35 | 
            +
                    " #{type}"
         | 
| 36 | 
            +
                  else
         | 
| 37 | 
            +
                    "/#{type}"
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                def render_stage(stage, opts, params)
         | 
| 42 | 
            +
                  if params[:copublisher]
         | 
| 43 | 
            +
                    " #{stage.abbr}"
         | 
| 44 | 
            +
                  else
         | 
| 45 | 
            +
                    "/#{stage.abbr}"
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def render_edition(edition, opts, _params)
         | 
| 50 | 
            +
                  " ED#{edition}" if opts[:with_edition]
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                def render_iteration(iteration, _opts, _params)
         | 
| 54 | 
            +
                  ".#{iteration}"
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                def render_amendments(amendments, opts, _params)
         | 
| 58 | 
            +
                  amendments.sort.map { |amendment| amendment.render_pubid(opts[:stage_format_long], opts[:with_date]) }.join("+")
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                def render_corrigendums(corrigendums, opts, _params)
         | 
| 62 | 
            +
                  corrigendums.sort.map { |corrigendum| corrigendum.render_pubid(opts[:stage_format_long], opts[:with_date]) }.join("+")
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                def render_language(language, opts, _params)
         | 
| 66 | 
            +
                  return if opts[:with_language_code] == :none
         | 
| 67 | 
            +
                  super
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                def render_year(year, opts, params)
         | 
| 71 | 
            +
                  return ":#{year}" if params[:amendments] || params[:corrigendums]
         | 
| 72 | 
            +
                  opts[:with_date] && ":#{year}" || ""
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
            end
         | 
| @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            module Pubid::Iso::Renderer
         | 
| 2 | 
            -
              class Dir <  | 
| 2 | 
            +
              class Dir < Base
         | 
| 3 3 |  | 
| 4 4 | 
             
                def render_identifier(params)
         | 
| 5 5 | 
             
                  res = ("%{publisher}%{copublisher} DIR%{dirtype}%{number}%{year}%{supplement}" % params)
         | 
| 6 6 |  | 
| 7 7 | 
             
                  if params.key?(:joint_document)
         | 
| 8 | 
            -
                    joint_params = prerender_params(params[:joint_document], {})
         | 
| 8 | 
            +
                    joint_params = prerender_params(params[:joint_document].get_params, {})
         | 
| 9 9 | 
             
                    joint_params.default = ""
         | 
| 10 10 | 
             
                    res += (" + %{publisher}%{copublisher}%{dirtype}%{number}%{year}%{supplement}" % joint_params)
         | 
| 11 11 | 
             
                  end
         | 
| @@ -26,7 +26,7 @@ module Pubid::Iso::Renderer | |
| 26 26 | 
             
                    " #{supplement.publisher} SUP"
         | 
| 27 27 | 
             
                  else
         | 
| 28 28 | 
             
                    " SUP"
         | 
| 29 | 
            -
                  end + (supplement. | 
| 29 | 
            +
                  end + (supplement.year && ":#{supplement.year}" || "") +
         | 
| 30 30 | 
             
                    (supplement.edition && " Edition #{supplement.edition}" || "")
         | 
| 31 31 | 
             
                end
         | 
| 32 32 | 
             
              end
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            module Pubid::Iso::Renderer
         | 
| 2 | 
            -
              class French <  | 
| 2 | 
            +
              class French < Base
         | 
| 3 3 | 
             
                def render_identifier(params)
         | 
| 4 4 | 
             
                  if params[:type] == " Guide"
         | 
| 5 5 | 
             
                    params[:type] = ""
         | 
| @@ -10,7 +10,7 @@ module Pubid::Iso::Renderer | |
| 10 10 | 
             
                end
         | 
| 11 11 |  | 
| 12 12 | 
             
                def render_copublisher(copublisher, opts, params)
         | 
| 13 | 
            -
                  "/#{copublisher.sub("IEC", "CEI")}"
         | 
| 13 | 
            +
                  "/#{copublisher.to_s.sub("IEC", "CEI")}"
         | 
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 16 | 
             
                def render_corrigendums(corrigendums, _opts, _params)
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            module Pubid::Iso::Renderer
         | 
| 2 | 
            -
              class Russian <  | 
| 2 | 
            +
              class Russian < Base
         | 
| 3 3 | 
             
                PUBLISHER = { "ISO" => "ИСО", "IEC" => "МЭК" }.freeze
         | 
| 4 4 | 
             
                STAGE = { "FDIS" => "ОПМС",
         | 
| 5 5 | 
             
                          "DIS" => "ПМС",
         | 
| @@ -44,9 +44,9 @@ module Pubid::Iso::Renderer | |
| 44 44 |  | 
| 45 45 | 
             
                def render_stage(stage, _opts, params)
         | 
| 46 46 | 
             
                  if params[:copublisher]
         | 
| 47 | 
            -
                    " #{STAGE[stage]}"
         | 
| 47 | 
            +
                    " #{STAGE[stage.abbr]}"
         | 
| 48 48 | 
             
                  else
         | 
| 49 | 
            -
                    "/#{STAGE[stage]}"
         | 
| 49 | 
            +
                    "/#{STAGE[stage.abbr]}"
         | 
| 50 50 | 
             
                  end
         | 
| 51 51 | 
             
                end
         | 
| 52 52 |  | 
| @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            module Pubid::Iso::Renderer
         | 
| 2 | 
            -
              class Tc <  | 
| 2 | 
            +
              class Tc < Base
         | 
| 3 3 |  | 
| 4 4 | 
             
                def render_identifier(params)
         | 
| 5 5 | 
             
                  "%{publisher}%{copublisher} %{tctype} %{tcnumber}%{sctype}%{wgtype} N%{number}" % params
         | 
| 6 6 | 
             
                end
         | 
| 7 7 |  | 
| 8 8 | 
             
                def render_tctype(tctype, _opts, _params)
         | 
| 9 | 
            -
                  tctype.is_a?(Array) && tctype.join("/") || tctype
         | 
| 9 | 
            +
                  tctype.is_a?(Array) && tctype.join("/") || tctype.to_s
         | 
| 10 10 | 
             
                end
         | 
| 11 11 |  | 
| 12 12 | 
             
                # TC 184/SC/WG 4 - no wg number
         | 
| @@ -1,13 +1,11 @@ | |
| 1 1 | 
             
            module Pubid::Iso::Renderer
         | 
| 2 | 
            -
              class UrnDir <  | 
| 2 | 
            +
              class UrnDir < Urn
         | 
| 3 3 |  | 
| 4 4 | 
             
                def render_identifier(params)
         | 
| 5 5 | 
             
                  res = ("urn:iso:doc:%{publisher}%{copublisher}:dir%{dirtype}%{number}%{year}%{supplement}" % params)
         | 
| 6 6 |  | 
| 7 7 | 
             
                  if params.key?(:joint_document)
         | 
| 8 | 
            -
                    joint_params = prerender_params(
         | 
| 9 | 
            -
                      params[:joint_document].transform_values { |value| value.is_a?(Parslet::Slice) && value.to_s || value }, {}
         | 
| 10 | 
            -
                    )
         | 
| 8 | 
            +
                    joint_params = prerender_params(params[:joint_document].get_params, {})
         | 
| 11 9 | 
             
                    joint_params.default = ""
         | 
| 12 10 | 
             
                    res += (":%{publisher}%{copublisher}%{dirtype}%{number}%{supplement}" % joint_params)
         | 
| 13 11 | 
             
                  end
         | 
| @@ -28,7 +26,7 @@ module Pubid::Iso::Renderer | |
| 28 26 | 
             
                    ":sup:#{supplement.publisher.downcase}"
         | 
| 29 27 | 
             
                  else
         | 
| 30 28 | 
             
                    ":sup"
         | 
| 31 | 
            -
                  end + (supplement. | 
| 29 | 
            +
                  end + (supplement.year && ":#{supplement.year}" || "") +
         | 
| 32 30 | 
             
                    (supplement.edition && ":ed-#{supplement.edition}" || "")
         | 
| 33 31 | 
             
                end
         | 
| 34 32 | 
             
              end
         | 
| @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            module Pubid::Iso::Renderer
         | 
| 2 | 
            -
              class UrnTc <  | 
| 2 | 
            +
              class UrnTc < Urn
         | 
| 3 3 |  | 
| 4 4 | 
             
                def render_identifier(params)
         | 
| 5 5 | 
             
                  "urn:iso:doc:%{publisher}%{copublisher}:%{tctype}:%{tcnumber}%{sctype}%{wgtype}:%{number}" % params
         | 
| 6 6 | 
             
                end
         | 
| 7 7 |  | 
| 8 8 | 
             
                def render_tctype(tctype, _opts, _params)
         | 
| 9 | 
            -
                  (tctype.is_a?(Array) && tctype.join(":") || tctype).downcase
         | 
| 9 | 
            +
                  (tctype.is_a?(Array) && tctype.join(":") || tctype.to_s).downcase
         | 
| 10 10 | 
             
                end
         | 
| 11 11 |  | 
| 12 12 | 
             
                def render_sctype(sctype, _opts, params)
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            module Pubid::Iso::Renderer
         | 
| 2 | 
            +
              class Urn < Pubid::Core::Renderer::Urn
         | 
| 3 | 
            +
                STAGES = { PWI: 0,
         | 
| 4 | 
            +
                           NP: 10,
         | 
| 5 | 
            +
                           AWI: 20,
         | 
| 6 | 
            +
                           WD: 20.20,
         | 
| 7 | 
            +
                           CD: 30,
         | 
| 8 | 
            +
                           DIS: 40,
         | 
| 9 | 
            +
                           FDIS: 50,
         | 
| 10 | 
            +
                           PRF: 50,
         | 
| 11 | 
            +
                           IS: 60 }.freeze
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def render_identifier(params)
         | 
| 14 | 
            +
                  render_base(params) + "%{stage}"\
         | 
| 15 | 
            +
                  "%{corrigendum_stage}%{iteration}%{edition}%{amendments}%{corrigendums}%{language}" % params
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def render_stage(stage, _opts, params)
         | 
| 19 | 
            +
                  ":stage-#{stage.harmonized_code}"
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            module Pubid::Iso
         | 
| 2 | 
            +
              class Stage
         | 
| 3 | 
            +
                attr_accessor :abbr, :harmonized_code
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                STAGES = { PWI: "00.00",
         | 
| 6 | 
            +
                           NP: "10.00",
         | 
| 7 | 
            +
                           AWI: "20.00",
         | 
| 8 | 
            +
                           WD: "20.20",
         | 
| 9 | 
            +
                           CD: "30.00",
         | 
| 10 | 
            +
                           DIS: "40.00",
         | 
| 11 | 
            +
                           FDIS: "50.00",
         | 
| 12 | 
            +
                           PRF: "50.00",
         | 
| 13 | 
            +
                           IS: "60.00" }.freeze
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                # @param abbr [String, Symbol] abbreviation eg. :PWI, :WD
         | 
| 16 | 
            +
                # @param harmonized_code [HarmonizedStageCode]
         | 
| 17 | 
            +
                def initialize(abbr: nil, harmonized_code: nil)
         | 
| 18 | 
            +
                  @abbr = abbr
         | 
| 19 | 
            +
                  @harmonized_code = harmonized_code
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  if harmonized_code
         | 
| 22 | 
            +
                    # @abbr = STAGES.select { |k,v| v == @harmonized_code.to_s }.first&.first
         | 
| 23 | 
            +
                    @abbr ||= STAGES.key(@harmonized_code.to_s)
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  if abbr
         | 
| 27 | 
            +
                    raise Errors::CodeInvalidError, "#{abbr} is not valid stage" unless STAGES.key?(abbr.to_sym)
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    @harmonized_code ||= HarmonizedStageCode.new(*STAGES[abbr.to_sym].split("."))
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
    
        data/lib/pubid/iso/supplement.rb
    CHANGED
    
    | @@ -1,24 +1,54 @@ | |
| 1 1 | 
             
            module Pubid::Iso
         | 
| 2 2 | 
             
              class Supplement < Pubid::Core::Supplement
         | 
| 3 | 
            -
                attr_accessor :stage, :publisher, :edition
         | 
| 3 | 
            +
                attr_accessor :stage, :publisher, :edition, :iteration
         | 
| 4 4 |  | 
| 5 | 
            -
                 | 
| 6 | 
            -
             | 
| 5 | 
            +
                # @param stage [Stage] stage, e.g. "PWI", "NP"
         | 
| 6 | 
            +
                # @param publisher [String] publisher, e.g. "ISO", "IEC"
         | 
| 7 | 
            +
                # @param edition [Integer] edition, e.g. 1, 2, 3
         | 
| 8 | 
            +
                # @param iteration [Integer] iteration, e.g. 1, 2, 3
         | 
| 9 | 
            +
                # @see Pubid::Core::Supplement for other options
         | 
| 10 | 
            +
                def initialize(stage: nil, publisher: nil, edition: nil, iteration: nil, **args)
         | 
| 11 | 
            +
                  super(**args)
         | 
| 7 12 | 
             
                  @stage = stage
         | 
| 8 13 | 
             
                  @publisher = publisher.to_s
         | 
| 9 | 
            -
                  @edition = edition
         | 
| 14 | 
            +
                  @edition = edition&.to_i
         | 
| 15 | 
            +
                  @iteration = iteration&.to_i
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  if @iteration && @stage.nil?
         | 
| 18 | 
            +
                    raise Errors::PublishedIterationError.new("cannot assign iteration to published supplement")
         | 
| 19 | 
            +
                  end
         | 
| 10 20 | 
             
                end
         | 
| 11 21 |  | 
| 12 22 | 
             
                def render_pubid_stage
         | 
| 13 | 
            -
                  ((@stage && @stage) || "")
         | 
| 23 | 
            +
                  ((@stage && @stage.abbr != "IS" && @stage.abbr) || "")
         | 
| 14 24 | 
             
                end
         | 
| 15 25 |  | 
| 16 26 | 
             
                def render_urn_stage
         | 
| 17 | 
            -
                  ((@stage && ":stage-#{ | 
| 27 | 
            +
                  ((@stage && ":stage-#{@stage.harmonized_code}") || "")
         | 
| 18 28 | 
             
                end
         | 
| 19 29 |  | 
| 20 30 | 
             
                def <=>(other)
         | 
| 21 31 | 
             
                  (super == 0) && ((stage.nil? || stage == other.stage) && 0 || -1) || super
         | 
| 22 32 | 
             
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def render_iteration
         | 
| 35 | 
            +
                  @iteration && ".#{@iteration}"
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def render_pubid_number(with_date: true)
         | 
| 39 | 
            +
                  if @year && with_date
         | 
| 40 | 
            +
                    "#{@number}#{render_iteration}:#{@year}"
         | 
| 41 | 
            +
                  else
         | 
| 42 | 
            +
                    "#{@number}#{render_iteration}"
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def render_urn_number
         | 
| 47 | 
            +
                  if @year
         | 
| 48 | 
            +
                    ":#{@year}:v#{@number}#{render_iteration}"
         | 
| 49 | 
            +
                  else
         | 
| 50 | 
            +
                    ":#{@number}#{render_iteration}:v1"
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                end
         | 
| 23 53 | 
             
              end
         | 
| 24 54 | 
             
            end
         | 
| @@ -9,16 +9,24 @@ module Pubid::Iso | |
| 9 9 | 
             
                end
         | 
| 10 10 |  | 
| 11 11 | 
             
                rule(amendments: subtree(:amendments)) do |context|
         | 
| 12 | 
            -
                   | 
| 13 | 
            -
                     | 
| 14 | 
            -
             | 
| 12 | 
            +
                  context[:amendments] =
         | 
| 13 | 
            +
                    [Amendment.new(
         | 
| 14 | 
            +
                      number: context[:amendments][:number],
         | 
| 15 | 
            +
                      year: context[:amendments][:year],
         | 
| 16 | 
            +
                      stage: context[:amendments][:stage] && convert_stage(context[:amendments][:stage]),
         | 
| 17 | 
            +
                      iteration: context[:amendments][:iteration])]
         | 
| 18 | 
            +
             | 
| 15 19 | 
             
                  context
         | 
| 16 20 | 
             
                end
         | 
| 17 | 
            -
             | 
| 21 | 
            +
             | 
| 18 22 | 
             
                rule(corrigendums: subtree(:corrigendums)) do |context|
         | 
| 19 | 
            -
                   | 
| 20 | 
            -
                     | 
| 21 | 
            -
             | 
| 23 | 
            +
                  context[:corrigendums] =
         | 
| 24 | 
            +
                    [Corrigendum.new(
         | 
| 25 | 
            +
                      number: context[:corrigendums][:number],
         | 
| 26 | 
            +
                      year: context[:corrigendums][:year],
         | 
| 27 | 
            +
                      stage: context[:corrigendums][:stage] && convert_stage(context[:corrigendums][:stage]),
         | 
| 28 | 
            +
                      iteration: context[:corrigendums][:iteration])]
         | 
| 29 | 
            +
             | 
| 22 30 | 
             
                  context
         | 
| 23 31 | 
             
                end
         | 
| 24 32 |  | 
| @@ -43,6 +51,8 @@ module Pubid::Iso | |
| 43 51 | 
             
                      "TS"
         | 
| 44 52 | 
             
                    when "ТО"
         | 
| 45 53 | 
             
                      "TR"
         | 
| 54 | 
            +
                    when "Directives Part", "Directives, Part", "Directives,"
         | 
| 55 | 
            +
                      "DIR"
         | 
| 46 56 | 
             
                    else
         | 
| 47 57 | 
             
                      type
         | 
| 48 58 | 
             
                    end
         | 
| @@ -72,7 +82,8 @@ module Pubid::Iso | |
| 72 82 | 
             
                #
         | 
| 73 83 | 
             
                rule(publisher: simple(:publisher), supplement: subtree(:supplement)) do |context|
         | 
| 74 84 | 
             
                  context[:supplement] =
         | 
| 75 | 
            -
                    Supplement.new(number: context[:supplement][: | 
| 85 | 
            +
                    Supplement.new(number: context[:supplement][:number],
         | 
| 86 | 
            +
                                   year: context[:supplement][:year],
         | 
| 76 87 | 
             
                                   publisher: context[:supplement][:publisher],
         | 
| 77 88 | 
             
                                   edition: context[:supplement][:edition])
         | 
| 78 89 | 
             
                  context
         | 
| @@ -80,31 +91,38 @@ module Pubid::Iso | |
| 80 91 |  | 
| 81 92 | 
             
                rule(supplement: subtree(:supplement)) do |context|
         | 
| 82 93 | 
             
                  context[:supplement] =
         | 
| 83 | 
            -
                    Supplement.new(number: context[:supplement][: | 
| 94 | 
            +
                    Supplement.new(number: context[:supplement][:number],
         | 
| 95 | 
            +
                                   year: context[:supplement][:year],
         | 
| 84 96 | 
             
                                   publisher: context[:supplement][:publisher],
         | 
| 85 97 | 
             
                                   edition: context[:supplement][:edition])
         | 
| 86 98 | 
             
                  context
         | 
| 87 99 | 
             
                end
         | 
| 88 100 |  | 
| 101 | 
            +
                rule(joint_document: subtree(:joint_document)) do |context|
         | 
| 102 | 
            +
                  context[:joint_document] =
         | 
| 103 | 
            +
                    Identifier.new(**context[:joint_document])
         | 
| 104 | 
            +
                  context
         | 
| 105 | 
            +
                end
         | 
| 89 106 |  | 
| 90 107 | 
             
                def self.convert_stage(code)
         | 
| 91 108 | 
             
                  russian_code = Renderer::Russian::STAGE.key(code.to_s)
         | 
| 92 | 
            -
                  return russian_code.to_s if russian_code
         | 
| 109 | 
            +
                  # return russian_code.to_s if russian_code
         | 
| 93 110 |  | 
| 94 | 
            -
                  case code
         | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 111 | 
            +
                  code = case code
         | 
| 112 | 
            +
                         when "NWIP"
         | 
| 113 | 
            +
                           "NP"
         | 
| 114 | 
            +
                         when "D", "FPD"
         | 
| 115 | 
            +
                           "DIS"
         | 
| 116 | 
            +
                         when "FD", "F"
         | 
| 117 | 
            +
                           "FDIS"
         | 
| 118 | 
            +
                         when "Fpr"
         | 
| 119 | 
            +
                           "PRF"
         | 
| 120 | 
            +
                         when "pD", "PD"
         | 
| 121 | 
            +
                           "CD"
         | 
| 122 | 
            +
                         else
         | 
| 123 | 
            +
                           code
         | 
| 124 | 
            +
                         end
         | 
| 125 | 
            +
                  Stage.new(abbr: (russian_code || code))
         | 
| 108 126 | 
             
                end
         | 
| 109 127 |  | 
| 110 128 | 
             
                def self.convert_language(code)
         | 
    
        data/lib/pubid/iso/version.rb
    CHANGED
    
    
    
        data/lib/pubid/iso.rb
    CHANGED
    
    | @@ -10,12 +10,16 @@ end | |
| 10 10 |  | 
| 11 11 | 
             
            require "pubid-core"
         | 
| 12 12 | 
             
            require_relative "iso/errors"
         | 
| 13 | 
            +
            require_relative "iso/stage"
         | 
| 14 | 
            +
            require_relative "iso/harmonized_stage_code"
         | 
| 13 15 | 
             
            require_relative "iso/parser"
         | 
| 14 16 | 
             
            require_relative "iso/transformer"
         | 
| 15 17 | 
             
            require_relative "iso/supplement"
         | 
| 16 18 | 
             
            require_relative "iso/amendment"
         | 
| 17 19 | 
             
            require_relative "iso/corrigendum"
         | 
| 18 20 | 
             
            require_relative "iso/identifier"
         | 
| 21 | 
            +
            require_relative "iso/renderer/base"
         | 
| 22 | 
            +
            require_relative "iso/renderer/urn"
         | 
| 19 23 | 
             
            require_relative "iso/renderer/french"
         | 
| 20 24 | 
             
            require_relative "iso/renderer/russian"
         | 
| 21 25 | 
             
            require_relative "iso/renderer/tc"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: pubid-iso
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.11
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ribose Inc.
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022- | 
| 11 | 
            +
            date: 2022-09-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         | 
| @@ -100,14 +100,14 @@ dependencies: | |
| 100 100 | 
             
                requirements:
         | 
| 101 101 | 
             
                - - "~>"
         | 
| 102 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            -
                    version:  | 
| 103 | 
            +
                    version: 1.1.2
         | 
| 104 104 | 
             
              type: :runtime
         | 
| 105 105 | 
             
              prerelease: false
         | 
| 106 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 107 | 
             
                requirements:
         | 
| 108 108 | 
             
                - - "~>"
         | 
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version:  | 
| 110 | 
            +
                    version: 1.1.2
         | 
| 111 111 | 
             
            description: Library to generate, parse and manipulate ISO PubID.
         | 
| 112 112 | 
             
            email:
         | 
| 113 113 | 
             
            - open.source@ribose.com
         | 
| @@ -124,14 +124,18 @@ files: | |
| 124 124 | 
             
            - lib/pubid/iso/amendment.rb
         | 
| 125 125 | 
             
            - lib/pubid/iso/corrigendum.rb
         | 
| 126 126 | 
             
            - lib/pubid/iso/errors.rb
         | 
| 127 | 
            +
            - lib/pubid/iso/harmonized_stage_code.rb
         | 
| 127 128 | 
             
            - lib/pubid/iso/identifier.rb
         | 
| 128 129 | 
             
            - lib/pubid/iso/parser.rb
         | 
| 130 | 
            +
            - lib/pubid/iso/renderer/base.rb
         | 
| 129 131 | 
             
            - lib/pubid/iso/renderer/dir.rb
         | 
| 130 132 | 
             
            - lib/pubid/iso/renderer/french.rb
         | 
| 131 133 | 
             
            - lib/pubid/iso/renderer/russian.rb
         | 
| 132 134 | 
             
            - lib/pubid/iso/renderer/tc.rb
         | 
| 133 135 | 
             
            - lib/pubid/iso/renderer/urn-dir.rb
         | 
| 134 136 | 
             
            - lib/pubid/iso/renderer/urn-tc.rb
         | 
| 137 | 
            +
            - lib/pubid/iso/renderer/urn.rb
         | 
| 138 | 
            +
            - lib/pubid/iso/stage.rb
         | 
| 135 139 | 
             
            - lib/pubid/iso/supplement.rb
         | 
| 136 140 | 
             
            - lib/pubid/iso/transformer.rb
         | 
| 137 141 | 
             
            - lib/pubid/iso/version.rb
         |