Class: Pubid::Iec::Renderer::Urn

Inherits:
Core::Renderer::Urn
  • Object
show all
Defined in:
lib/pubid/iec/renderer/urn.rb

Direct Known Subclasses

TrfUrn, WorkingDocumentUrn

Constant Summary collapse

STAGES =
{ ACD: 20.99,
           ACDV: 30.99,
           ADTR: 40.99,
           ADTS: 40.99,
           AFDIS: 40.99,
           APUB: 50.99,
           BPUB: 60,
           CAN: 30.98,
           CCDV: 40.20,
           CD: 30.20,
           CDISH: 50.20,
           CDM: 30.60,
           CDPAS: 50.20,
           CDTR: 50.20,
           CDTS: 50.20,
           CDVM: 40.91,
           CFDIS: 50.20,
           DECDISH: 50.00,
           DECFDIS: 50.00,
           DECPUB: 60.00,
           DEL: 10.98,
           DELPUB: 99.60,
           DTRM: 50.92,
           DTSM: 50.92,
           MERGED: 30.97,
           NCDV: 40.91,
           NDTR: 50.92,
           NDTS: 50.92,
           NFDIS: 50.92,
           PCC: 30.60,
           PNW: 10.20,
           PPUB: 60.60,
           PRVC: 40.60,
           PRVD: 50.60,
           PRVDISH: 50.60,
           PRVDPAS: 50.60,
           PRVDTR: 50.60,
           PRVDTS: 50.60,
           PRVN: 10.60,
           PWI: 0,
           RDISH: 50.00,
           RFDIS: 50.00,
           RPUB: 60.00,
           SPLIT: 30.96,
           TCDV: 40.00,
           TDISH: 50.00,
           TDTR: 50.00,
           TDTS: 50.00,
           TPUB: 60.00,
           WPUB: 95.99
}.freeze

Instance Method Summary collapse

Instance Method Details

#render(with_date: true, with_language_code: :iso, annotated: false, **args) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/pubid/iec/renderer/urn.rb', line 78

def render(with_date: true, with_language_code: :iso, annotated: false, **args)
  base = render_base_identifier(**args.merge(
    with_date: with_date, with_language_code: with_language_code, annotated: annotated,
  ))
  lang = strip_leading_colon(@prerendered_params[:language].to_s)
  if @prerendered_params.key?(:all_parts)
    "#{base}ser"
  else
    "#{base}:#{lang}"
  end
end

#render_amendments(amendments, _opts, _params) ⇒ Object



130
131
132
# File 'lib/pubid/iec/renderer/urn.rb', line 130

def render_amendments(amendments, _opts, _params)
  amendments&.map(&:urn)&.join || ""
end

#render_conjuction_part(conjuction_parts, _opts, _params) ⇒ Object



114
115
116
117
118
119
120
# File 'lib/pubid/iec/renderer/urn.rb', line 114

def render_conjuction_part(conjuction_parts, _opts, _params)
  if conjuction_parts.is_a?(Array)
    conjuction_parts.map(&:to_i).sort.map { |conjuction_part| ",#{conjuction_part}" }.join
  else
    ",#{conjuction_parts}"
  end
end

#render_copublisher(copublisher, _opts, _params) ⇒ Object



142
143
144
# File 'lib/pubid/iec/renderer/urn.rb', line 142

def render_copublisher(copublisher, _opts, _params)
  "-" + Array(copublisher).map { |c| c.to_s.downcase }.join("-")
end

#render_corrigendums(corrigendums, _opts, _params) ⇒ Object



134
135
136
# File 'lib/pubid/iec/renderer/urn.rb', line 134

def render_corrigendums(corrigendums, _opts, _params)
  corrigendums&.map(&:urn)&.join || ""
end

#render_fragment(fragment, _opts, _params) ⇒ Object



102
103
104
# File 'lib/pubid/iec/renderer/urn.rb', line 102

def render_fragment(fragment, _opts, _params)
  ":frag:#{fragment}"
end

#render_identifier(params) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/pubid/iec/renderer/urn.rb', line 55

def render_identifier(params)
  result = "urn:iec:std:#{params[:publisher]}#{params[:copublisher]}" \
           "#{params[:type]}:#{params[:number]}" \
           "#{params[:part]}#{params[:conjuction_part]}"

  # Positional fields — always colon-separated even when empty
  result += ":#{strip_leading_colon(params[:year])}"

  stage_value = [params[:stage], params[:vap], params[:urn_stage],
                 params[:corrigendum_stage], params[:iteration],
                 params[:version], params[:part_version]].map(&:to_s).join
  result += ":#{strip_leading_colon(stage_value)}"

  result += ":#{strip_leading_colon(params[:edition])}"

  # Non-positional suffixes
  result += params[:amendments].to_s
  result += params[:corrigendums].to_s
  result += params[:fragment].to_s

  result
end

#render_language(language, _opts, _params) ⇒ Object



138
139
140
# File 'lib/pubid/iec/renderer/urn.rb', line 138

def render_language(language, _opts, _params)
  ":" + (language.is_a?(Array) ? language.join("-") : language)
end

#render_number(number, _opts, _params) ⇒ Object



94
95
96
# File 'lib/pubid/iec/renderer/urn.rb', line 94

def render_number(number, _opts, _params)
  number.to_s.downcase
end

#render_part(part, _opts, _params) ⇒ Object



90
91
92
# File 'lib/pubid/iec/renderer/urn.rb', line 90

def render_part(part, _opts, _params)
  "-#{part}"
end

#render_part_version(part_version, _opts, _params) ⇒ Object



110
111
112
# File 'lib/pubid/iec/renderer/urn.rb', line 110

def render_part_version(part_version, _opts, _params)
  ":v#{part_version}"
end

#render_stage(stage, _opts, params) ⇒ Object



122
123
124
# File 'lib/pubid/iec/renderer/urn.rb', line 122

def render_stage(stage, _opts, params)
  ":stage-#{sprintf('%s', stage.to_s(:urn))}"
end

#render_type(type, _, _) ⇒ Object



126
127
128
# File 'lib/pubid/iec/renderer/urn.rb', line 126

def render_type(type, _, _)
  ":#{type.downcase}"
end

#render_vap(vap, _opts, _params) ⇒ Object



98
99
100
# File 'lib/pubid/iec/renderer/urn.rb', line 98

def render_vap(vap, _opts, _params)
  ":#{vap.map(&:downcase).join('-')}"
end

#render_version(version, _opts, _params) ⇒ Object



106
107
108
# File 'lib/pubid/iec/renderer/urn.rb', line 106

def render_version(version, _opts, _params)
  ":v#{version}"
end