pubid-iso 0.3.0 → 0.4.0

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +118 -39
  3. data/lib/pubid/iso/errors.rb +0 -3
  4. data/lib/pubid/iso/harmonized_stage_code.rb +1 -145
  5. data/lib/pubid/iso/identifier/amendment.rb +52 -0
  6. data/lib/pubid/iso/identifier/base.rb +365 -0
  7. data/lib/pubid/iso/identifier/corrigendum.rb +53 -0
  8. data/lib/pubid/iso/identifier/directives.rb +29 -0
  9. data/lib/pubid/iso/identifier/guide.rb +32 -0
  10. data/lib/pubid/iso/identifier/international_standard.rb +45 -0
  11. data/lib/pubid/iso/identifier/international_standardized_profile.rb +30 -0
  12. data/lib/pubid/iso/identifier/international_workshop_agreement.rb +25 -0
  13. data/lib/pubid/iso/identifier/publicly_available_specification.rb +30 -0
  14. data/lib/pubid/iso/identifier/recommendation.rb +19 -0
  15. data/lib/pubid/iso/identifier/supplement.rb +39 -0
  16. data/lib/pubid/iso/identifier/technical_committee.rb +19 -0
  17. data/lib/pubid/iso/identifier/technical_report.rb +30 -0
  18. data/lib/pubid/iso/identifier/technical_specification.rb +30 -0
  19. data/lib/pubid/iso/identifier/technology_trends_assessments.rb +30 -0
  20. data/lib/pubid/iso/identifier.rb +39 -264
  21. data/lib/pubid/iso/parser.rb +56 -20
  22. data/lib/pubid/iso/renderer/amendment.rb +7 -0
  23. data/lib/pubid/iso/renderer/base.rb +129 -98
  24. data/lib/pubid/iso/renderer/corrigendum.rb +7 -0
  25. data/lib/pubid/iso/renderer/dir.rb +5 -3
  26. data/lib/pubid/iso/renderer/guide.rb +19 -0
  27. data/lib/pubid/iso/renderer/international_standard.rb +11 -0
  28. data/lib/pubid/iso/renderer/international_standardized_profile.rb +13 -0
  29. data/lib/pubid/iso/renderer/international_workshop_agreement.rb +17 -0
  30. data/lib/pubid/iso/renderer/publicly_available_specification.rb +12 -0
  31. data/lib/pubid/iso/renderer/recommendation.rb +13 -0
  32. data/lib/pubid/iso/renderer/supplement.rb +63 -0
  33. data/lib/pubid/iso/renderer/technical_committee.rb +47 -0
  34. data/lib/pubid/iso/renderer/technical_report.rb +13 -0
  35. data/lib/pubid/iso/renderer/technical_specification.rb +13 -0
  36. data/lib/pubid/iso/renderer/technology_trends_assessments.rb +13 -0
  37. data/lib/pubid/iso/renderer/urn-amendment.rb +12 -0
  38. data/lib/pubid/iso/renderer/urn-corrigendum.rb +12 -0
  39. data/lib/pubid/iso/renderer/urn-dir.rb +11 -3
  40. data/lib/pubid/iso/renderer/urn-supplement.rb +31 -0
  41. data/lib/pubid/iso/renderer/urn-tc.rb +2 -0
  42. data/lib/pubid/iso/renderer/urn.rb +25 -13
  43. data/lib/pubid/iso/stage.rb +1 -99
  44. data/lib/pubid/iso/transformer.rb +91 -107
  45. data/lib/pubid/iso/type.rb +9 -1
  46. data/lib/pubid/iso/version.rb +1 -1
  47. data/lib/pubid/iso.rb +20 -14
  48. data/stages.yaml +93 -0
  49. data/update_codes.yaml +1 -0
  50. metadata +37 -11
  51. data/lib/pubid/iso/amendment.rb +0 -15
  52. data/lib/pubid/iso/corrigendum.rb +0 -31
  53. data/lib/pubid/iso/renderer/french.rb +0 -29
  54. data/lib/pubid/iso/renderer/russian.rb +0 -64
  55. data/lib/pubid/iso/renderer/tc.rb +0 -30
  56. data/lib/pubid/iso/supplement.rb +0 -56
  57. data/lib/pubid/iso/typed_stage.rb +0 -204
@@ -2,130 +2,147 @@ module Pubid::Iso::Renderer
2
2
  class Base < Pubid::Core::Renderer::Base
3
3
  attr_accessor :prerendered_params
4
4
 
5
- TYPE_VALUES = {
6
- tr: "TR",
7
- ts: "TS",
8
- isp: "ISP",
9
- guide: "Guide",
10
- pas: "PAS",
11
- dpas: "DPAS",
5
+ TRANSLATION = {
6
+ russian: {
7
+ publisher: { "ISO" => "ИСО", "IEC" => "МЭК" },
8
+ stage: { "FDIS" => "ОПМС",
9
+ "DIS" => "ПМС",
10
+ "NP" => "НП",
11
+ "AWI" => "АВИ",
12
+ "CD" => "КПК",
13
+ "PD" => "ПД",
14
+ "FPD" => "ФПД" },
15
+ type: { "TS" => "ТС",
16
+ "TR" => "ТО",
17
+ "ISP" => "ИСП" },
18
+ },
19
+ french: {
20
+ publisher: { "IEC" => "CEI" },
21
+ },
12
22
  }.freeze
13
23
 
14
- # Prerender parameters
15
- def prerender(with_edition: true, **args)
16
- @params[:type_stage] = @params.slice(:stage, :type) if @params[:stage] || @params[:type]
17
- super
18
- end
24
+ TYPE = "".freeze
19
25
 
20
- def render_supplement(supplement_params, **args)
21
- if supplement_params[:base].type == :amd
22
- # render inner amendment (cor -> amd -> base)
23
- render_supplement(supplement_params[:base].get_params, **args)
24
- else
25
- self.class.new(supplement_params[:base].get_params).render_base_identifier(
26
- # always render year for identifiers with supplement
27
- **args.merge({ with_date: true }),
28
- )
29
- end +
30
- case supplement_params[:typed_stage].type.type
31
- when :amd
32
- render_amendments(
33
- [Pubid::Iso::Amendment.new(**supplement_params.slice(:number, :year, :typed_stage, :edition, :iteration))],
34
- args,
35
- nil,
36
- )
37
- when :cor
38
- render_corrigendums(
39
- [Pubid::Iso::Corrigendum.new(**supplement_params.slice(:number, :year, :typed_stage, :edition, :iteration))],
40
- args,
41
- nil,
42
- )
43
- # copy parameters from Identifier only supported by Corrigendum
44
- end +
45
- (supplement_params[:base].language ? render_language(supplement_params[:base].language, args, nil) : "")
26
+ def render_base_identifier(**args)
27
+ prerender(**args)
28
+
29
+ render_identifier(@prerendered_params, args)
46
30
  end
47
31
 
48
32
  # Render identifier
49
33
  # @param with_edition [Boolean] include edition in output
50
34
  # @see Pubid::Core::Renderer::Base for another options
51
35
  def render(with_edition: true, with_language_code: :iso, with_date: true, **args)
52
- # super(**args.merge({ with_edition: with_edition }))
53
- if %i(amd cor).include? @params[:typed_stage]&.type&.type
54
- render_supplement(@params, **args.merge({ with_date: with_date,
55
- with_language_code: with_language_code,
56
- with_edition: with_edition }))
36
+ render_base_identifier(**args.merge({ with_date: with_date,
37
+ with_language_code: with_language_code,
38
+ with_edition: with_edition })) +
39
+ @prerendered_params[:language].to_s
40
+ end
41
+
42
+ def render_base(_base, _opts, _params)
43
+ end
44
+
45
+ def render_type_prefix(params)
46
+ result = params[:typed_stage].nil? || params[:typed_stage].empty? ? self.class::TYPE : ""
47
+
48
+ if params[:stage] && !params[:stage].empty? && !result.empty?
49
+ " #{result}"
57
50
  else
58
- render_base_identifier(**args.merge({ with_date: with_date,
59
- with_language_code: with_language_code,
60
- with_edition: with_edition })) +
61
- @prerendered_params[:language].to_s
51
+ result
62
52
  end
53
+ end
63
54
 
55
+ def render_identifier(params, opts)
56
+ "%{publisher}%{typed_stage}%{stage}#{render_type_prefix(params)} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{addendum}%{edition}" % params
64
57
  end
65
58
 
66
- def render_identifier(params)
67
- # typed_stage = if params[:typed_stage] && params[:typed_stage] != ""
68
- # ((params[:copublisher] && !params[:copublisher].empty?) ? " " : "/") + params[:typed_stage].to_s
69
- # else
70
- # ""
71
- # end
72
- render_base(params, params[:typed_stage]) +
73
- ("%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params)
74
- end
75
-
76
- def render_typed_stage(typed_stage, _opts, params)
77
- (params[:copublisher] ? " " : "/") + typed_stage.to_s
78
- end
79
-
80
- # def render_type_stage(values, opts, params)
81
- #
82
- # # prerender stage and type before
83
- # stage = render_stage(values[:stage], opts, params)
84
- # type = values[:type]&.to_s
85
- # return unless type || stage
86
- #
87
- # if type && stage
88
- # # don't add prefix for pdf format
89
- # if %w(DIS FDIS).include?(stage)
90
- # "#{render_short_stage(stage)}#{type}"
91
- # else
92
- # "#{stage} #{type}"
93
- # end
94
- # else
95
- # # when only type or stage
96
- # "#{type}#{stage}"
97
- # end
98
- # end
99
-
100
- def render_short_stage(stage)
101
- case stage
102
- when "DIS"
103
- "D"
104
- when "FDIS"
105
- "FD"
59
+ def render_copublisher_string(publisher, copublishers, opts)
60
+ case copublishers
61
+ when String
62
+ if opts[:language]
63
+ copublishers = TRANSLATION[opts[:language]][:publisher][copublishers] || copublishers
64
+ end
65
+ [publisher, copublishers].join("/")
66
+ when Array
67
+ ([publisher] + copublishers.map(&:to_s).sort).map do |pub|
68
+ if opts[:language]
69
+ (TRANSLATION[opts[:language]][:publisher][pub] || pub).gsub('-', '/')
70
+ else
71
+ pub
72
+ end
73
+ end.join("/")
74
+ else
75
+ raise StandardError.new("copublisher must be a string or an array")
106
76
  end
107
77
  end
108
78
 
109
- def render_stage(stage, opts, _params)
110
- return if stage.nil? || (stage.abbr == "PRF" and !opts[:with_prf]) || stage.abbr == "IS"
79
+ def omit_post_publisher_symbol?(typed_stage, stage, opts)
80
+ # return false unless typed_stage
111
81
 
112
- stage.abbr
82
+ (stage.nil? || stage.empty_abbr?(with_prf: opts[:with_prf])) && typed_stage.nil?
113
83
  end
114
84
 
115
- def render_edition(edition, opts, _params)
116
- " ED#{edition}" if opts[:with_edition]
85
+ def render_publisher(publisher, opts, params)
86
+
87
+ if opts[:language]
88
+ publisher = TRANSLATION[opts[:language]][:publisher][publisher] || publisher
89
+ end
90
+ # No copublishers
91
+ unless params[:copublisher]
92
+
93
+ # No copublisher and IS
94
+ # ISO xxx
95
+ if omit_post_publisher_symbol?(params[:typed_stage], params[:stage], opts)
96
+ return publisher
97
+ end
98
+
99
+ # No copublisher and not IS
100
+ # ISO/TR xxx
101
+ return "#{publisher}/"
102
+ end
103
+
104
+ publisher_string = render_copublisher_string(publisher, params[:copublisher], opts)
105
+ publisher_string.sub!("/IEC", "/CEI") if opts[:language] == :french
106
+
107
+ # With copublisher and IS
108
+ # ISO/IEC xxx
109
+ if omit_post_publisher_symbol?(params[:typed_stage], params[:stage], opts)
110
+ return publisher_string
111
+ end
112
+
113
+ # With copublisher but not IS
114
+ # ISO/IEC TR xxx
115
+ publisher_string + " "
117
116
  end
118
117
 
119
- def render_iteration(iteration, _opts, _params)
120
- ".#{iteration}"
118
+ def render_typed_stage(typed_stage, opts, params)
119
+ return nil if typed_stage.to_s.empty?
120
+
121
+ if opts[:language]
122
+ return TRANSLATION[opts[:language]][:stage][typed_stage.to_s] || typed_stage.to_s
123
+ end
124
+
125
+ typed_stage.to_s
126
+ end
127
+
128
+ def render_stage(stage, opts, params)
129
+ return if params[:typed_stage]
130
+ return if stage.empty_abbr?(with_prf: opts[:with_prf])
131
+
132
+ if opts[:language]
133
+ return TRANSLATION[opts[:language]][:stage][stage.to_s(with_prf: opts[:with_prf])] ||
134
+ stage.to_s(with_prf: opts[:with_prf])
135
+ end
136
+
137
+ stage.to_s(with_prf: opts[:with_prf])
121
138
  end
122
139
 
123
- def render_amendments(amendments, opts, _params)
124
- amendments.sort.map { |amendment| amendment.render_pubid(opts[:stage_format_long], opts[:with_date]) }.join("+")
140
+ def render_edition(edition, opts, _params)
141
+ " ED#{edition}" if opts[:with_edition]
125
142
  end
126
143
 
127
- def render_corrigendums(corrigendums, opts, _params)
128
- corrigendums.sort.map { |corrigendum| corrigendum.render_pubid(opts[:stage_format_long], opts[:with_date]) }.join("+")
144
+ def render_iteration(iteration, _opts, _params)
145
+ ".#{iteration}"
129
146
  end
130
147
 
131
148
  def render_language(language, opts, _params)
@@ -137,5 +154,19 @@ module Pubid::Iso::Renderer
137
154
  return ":#{year}" if params[:amendments] || params[:corrigendums]
138
155
  opts[:with_date] && ":#{year}" || ""
139
156
  end
157
+
158
+ def render_part(part, opts, _params)
159
+ return "-#{part.reverse.join('-')}" if part.is_a?(Array)
160
+
161
+ "-#{part}"
162
+ end
163
+
164
+ def render_addendum(addendum, _opts, _params)
165
+ if addendum[:year]
166
+ "/Add #{addendum[:number]}:#{addendum[:year]}"
167
+ else
168
+ "/Add #{addendum[:number]}"
169
+ end
170
+ end
140
171
  end
141
172
  end
@@ -0,0 +1,7 @@
1
+ require_relative "supplement"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Corrigendum < Supplement
5
+ TYPE = "Cor".freeze
6
+ end
7
+ end
@@ -1,13 +1,15 @@
1
+ require_relative "base"
2
+
1
3
  module Pubid::Iso::Renderer
2
4
  class Dir < Base
3
5
 
4
- def render_identifier(params)
5
- res = ("%{publisher}%{copublisher} DIR%{dirtype}%{number}%{year}%{supplement}" % params)
6
+ def render_identifier(params, opts)
7
+ res = ("%{publisher} DIR%{dirtype}%{number}%{year}%{supplement}" % params)
6
8
 
7
9
  if params.key?(:joint_document)
8
10
  joint_params = prerender_params(params[:joint_document].get_params, {})
9
11
  joint_params.default = ""
10
- res += (" + %{publisher}%{copublisher}%{dirtype}%{number}%{year}%{supplement}" % joint_params)
12
+ res += (" + %{publisher}%{dirtype}%{number}%{year}%{supplement}" % joint_params)
11
13
  end
12
14
 
13
15
  res
@@ -0,0 +1,19 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Guide < Base
5
+ def render_identifier(params, opts)
6
+ if opts[:language] == :french
7
+ "Guide %{publisher}%{stage} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params
8
+ elsif opts[:language] == :russian
9
+ "Руководство %{publisher}%{stage} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params
10
+ else
11
+ if params[:typed_stage] && !params[:typed_stage].empty?
12
+ "%{publisher}%{typed_stage}%{stage} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params
13
+ else
14
+ "%{publisher}%{stage} Guide %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class InternationalStandard < Base
5
+ def omit_post_publisher_symbol?(typed_stage, stage)
6
+ # return false unless typed_stage
7
+
8
+ !stage.nil? && !typed_stage.nil?
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class InternationalStandardizedProfile < Base
5
+
6
+ TYPE = "ISP".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class InternationalWorkshopAgreement < Base
5
+
6
+ TYPE = "IWA".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+
13
+ def render_identifier(params, opts)
14
+ "%{typed_stage}%{stage}#{render_type_prefix(params)} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{addendum}%{edition}" % params
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class PubliclyAvailableSpecification < Base
5
+
6
+ TYPE = "PAS".freeze
7
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
8
+ # always need post publisher symbol, because we always have to add "TR"
9
+ false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Recommendation < Base
5
+
6
+ TYPE = "R".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "R"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,63 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Supplement < Base
5
+ TYPE = "Suppl".freeze
6
+
7
+ # Render identifier
8
+ # @param with_edition [Boolean] include edition in output
9
+ # @see Pubid::Core::Renderer::Base for another options
10
+ def render(with_edition: true, with_language_code: :iso, with_date: true, **args)
11
+ @params[:base].to_s(lang: args[:language], with_edition: with_edition) +
12
+ super(
13
+ with_edition: with_edition, with_language_code: with_language_code, with_date: with_date,
14
+ base_type: @params[:base].type[:key],
15
+ **args
16
+ ) +
17
+ if @params[:base].language
18
+ render_language(@params[:base].language,
19
+ { with_language_code: with_language_code }, nil).to_s
20
+ else
21
+ ""
22
+ end
23
+ end
24
+
25
+ def render_identifier(params, opts)
26
+ type_prefix = params[:typed_stage].nil? || params[:typed_stage].empty? ? self.class::TYPE : ""
27
+
28
+ if params[:stage].is_a?(Pubid::Core::Stage) && !params[:stage].empty_abbr?
29
+ type_prefix = " #{type_prefix}"
30
+ end
31
+
32
+ if self.class == Supplement
33
+ if opts[:base_type] == :dir
34
+ "%{typed_stage}%{stage}%{publisher} SUP%{number}%{part}%{iteration}%{year}%{edition}" % params
35
+ else
36
+ # type_prefix = "/#{type_prefix}" unless type_prefix.empty?
37
+ "/%{typed_stage}%{stage}#{type_prefix}%{number}%{part}%{iteration}%{year}%{edition}" % params
38
+ end
39
+ else
40
+ "/%{typed_stage}%{stage}#{type_prefix}%{number}%{part}%{iteration}%{year}%{edition}" % params
41
+ end
42
+ end
43
+
44
+ def render_number(number, opts, _params)
45
+ space = opts[:language] == :french ? "." : " "
46
+
47
+ "#{space}#{number}"
48
+ end
49
+
50
+ def render_stage(stage, opts, params)
51
+ # do not render stage when already has typed stage
52
+ stage unless params[:typed_stage]
53
+ end
54
+
55
+ def render_publisher(publisher, opts, params)
56
+ " #{publisher}" unless publisher.empty?
57
+ end
58
+
59
+ def render_edition(edition, opts, _params)
60
+ " Edition #{edition}" if opts[:with_edition]
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class TechnicalCommittee < Base
5
+
6
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
7
+ # always need post publisher symbol, because we always have to add "TR"
8
+ false
9
+ end
10
+
11
+ def render_identifier(params, opts)
12
+ if params[:wgnumber] && !params[:wgnumber].empty?
13
+ "%{publisher}%{tctype}%{stage} %{tcnumber}%{sctype}%{scnumber}%{wgtype}%{wgnumber} %{number}" % params
14
+ else
15
+ "%{publisher}%{tctype}%{stage} %{tcnumber}%{sctype}%{wgtype}%{scnumber} %{number}" % params
16
+ end
17
+ end
18
+
19
+ def render_tctype(tctype, _params, _opts)
20
+ if tctype.is_a?(Array)
21
+ tctype.join("/")
22
+ else
23
+ tctype
24
+ end
25
+ end
26
+
27
+ def render_number(number, _params, _opts)
28
+ "N#{number}"
29
+ end
30
+
31
+ def render_sctype(sctype, _params, _opts)
32
+ "/#{sctype}"
33
+ end
34
+
35
+ def render_wgtype(wgtype, _params, _opts)
36
+ "/#{wgtype}"
37
+ end
38
+
39
+ def render_wgnumber(wgnumber, _params, _opts)
40
+ " #{wgnumber}"
41
+ end
42
+
43
+ def render_scnumber(scnumber, _params, _opts)
44
+ " #{scnumber}"
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class TechnicalReport < Base
5
+
6
+ TYPE = "TR".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class TechnicalSpecification < Base
5
+
6
+ TYPE = "TS".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class TechnologyTrendsAssessments < Base
5
+
6
+ TYPE = "TTA".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "urn-supplement"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class UrnAmendment < UrnSupplement
5
+ TYPE = "amd".freeze
6
+
7
+ def render_identifier(params)
8
+ "%{base}%{stage}:amd%{year}%{number}%{edition}" \
9
+ "#{@params[:base].language ? (':' + @params[:base].language) : ''}" % params
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "urn-supplement"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class UrnCorrigendum < UrnSupplement
5
+ TYPE = "cor".freeze
6
+
7
+ def render_identifier(params)
8
+ "%{base}%{stage}:cor%{year}%{number}%{edition}" \
9
+ "#{@params[:base].language ? (':' + @params[:base].language) : ''}" % params
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,5 @@
1
+ require_relative "urn"
2
+
1
3
  module Pubid::Iso::Renderer
2
4
  class UrnDir < Urn
3
5
 
@@ -5,9 +7,15 @@ module Pubid::Iso::Renderer
5
7
  res = ("urn:iso:doc:%{publisher}%{copublisher}:dir%{dirtype}%{number}%{year}%{supplement}" % params)
6
8
 
7
9
  if params.key?(:joint_document)
8
- joint_params = prerender_params(params[:joint_document].get_params, {})
9
- joint_params.default = ""
10
- res += (":%{publisher}%{copublisher}%{dirtype}%{number}%{supplement}" % joint_params)
10
+ if params[:joint_document].is_a?(Pubid::Iso::Identifier::Supplement)
11
+ joint_params = params[:joint_document].get_params
12
+ res += ":#{joint_params[:base].publisher.downcase}:sup:%{year}" % joint_params
13
+ else
14
+ joint_params = prerender_params(params[:joint_document].get_params, {})
15
+ joint_params.default = ""
16
+ res += (":%{publisher}%{copublisher}%{dirtype}%{number}%{supplement}" % joint_params)
17
+ end
18
+
11
19
  end
12
20
 
13
21
  res
@@ -0,0 +1,31 @@
1
+ require_relative "urn"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class UrnSupplement < Urn
5
+ TYPE = "sup".freeze
6
+
7
+ def render_identifier(params)
8
+ "%{base}%{stage}:#{self.class::TYPE}%{publisher}%{year}%{number}%{edition}" \
9
+ "#{@params[:base].language ? (':' + @params[:base].language) : ''}" % params
10
+ end
11
+
12
+ def render_base(base, _opts, _params)
13
+ return base.urn if base.base || base.is_a?(Pubid::Iso::Identifier::Directives)
14
+
15
+ # to avoid rendering language as part of base
16
+ Urn.new(base.get_params).render
17
+ end
18
+
19
+ def render_number(number, _opts, params)
20
+ if params[:year]
21
+ ":v#{number}"
22
+ else
23
+ ":#{number}:v1"
24
+ end
25
+ end
26
+
27
+ def render_publisher(publisher, _opts, _params)
28
+ ":#{publisher.downcase}" unless publisher.empty?
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,5 @@
1
+ require_relative "urn"
2
+
1
3
  module Pubid::Iso::Renderer
2
4
  class UrnTc < Urn
3
5