pubid-iso 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/pubid/iso/identifier/base.rb +10 -106
- data/lib/pubid/iso/identifier/directives.rb +7 -0
- data/lib/pubid/iso/identifier/international_standard.rb +1 -5
- data/lib/pubid/iso/parser.rb +7 -3
- data/lib/pubid/iso/renderer/dir.rb +4 -9
- data/lib/pubid/iso/transformer.rb +20 -18
- data/lib/pubid/iso/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0cd99c30184d624f0019e7d10fd9d3d752e86ff701b4852de0d97f79e9ac095
|
4
|
+
data.tar.gz: 1c2c1988f300757de153e28ff528f01a488c058e2b3b49a41be94a73ef242397
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f63fbc6f3f030698619fa235ee2ba17bc3ba8d237ae05b2b0397a6e211654defe106d6f13fabf4c28e40470bc8ba68664b07ff90ec12f8e1fb7d7f33a1302b2
|
7
|
+
data.tar.gz: dfa9bcb9441abc1ce2d5e56cce1ea915d72f3c9599ba64b6ec5e554e464397fe22940abc659eee1298136abba27acc26d5457f8e025a2f648a1fa32dfbe88159
|
@@ -11,8 +11,6 @@ module Pubid::Iso
|
|
11
11
|
:iteration, :joint_document,
|
12
12
|
:tctype, :sctype, :wgtype, :tcnumber, :scnumber, :wgnumber,
|
13
13
|
:dirtype,
|
14
|
-
# supplement for DIR type identifiers
|
15
|
-
:supplement,
|
16
14
|
:base,
|
17
15
|
:typed_stage,
|
18
16
|
:supplements,
|
@@ -24,7 +22,7 @@ module Pubid::Iso
|
|
24
22
|
# @param stage [Stage, Symbol, String] stage or typed stage, e.g. "PWI", "NP", "50.00", Stage.new(abbr: :WD), "DTR"
|
25
23
|
# @param iteration [Integer] document iteration, eg. "1", "2", "3"
|
26
24
|
# @param joint_document [Identifier] joint document
|
27
|
-
# @param
|
25
|
+
# @param supplements [Array<Supplement>] supplements
|
28
26
|
# @param tctype [String] Technical Committee type, eg. "TC", "JTC"
|
29
27
|
# @param sctype [String] TC subsommittee, eg. "SC"
|
30
28
|
# @param wgtype [String] TC working group type, eg. "AG", "AHG"
|
@@ -44,12 +42,12 @@ module Pubid::Iso
|
|
44
42
|
# @see Identifier
|
45
43
|
# @see Pubid::Core::Identifier
|
46
44
|
# @see Parser
|
47
|
-
def initialize(publisher: "ISO", number: nil, stage: nil, iteration: nil,
|
45
|
+
def initialize(publisher: "ISO", number: nil, stage: nil, iteration: nil,
|
48
46
|
joint_document: nil, tctype: nil, sctype: nil, wgtype: nil, tcnumber: nil,
|
49
47
|
scnumber: nil, wgnumber:nil,
|
50
48
|
dir: nil, dirtype: nil, year: nil, amendments: nil,
|
51
49
|
corrigendums: nil, type: nil, base: nil, supplements: nil,
|
52
|
-
part: nil, addendum: nil, **opts)
|
50
|
+
part: nil, addendum: nil, edition: nil, **opts)
|
53
51
|
super(**opts.merge(number: number, publisher: publisher, year: year,
|
54
52
|
amendments: amendments, corrigendums: corrigendums))
|
55
53
|
|
@@ -64,25 +62,12 @@ module Pubid::Iso
|
|
64
62
|
end
|
65
63
|
|
66
64
|
if stage
|
67
|
-
|
68
|
-
@stage = stage
|
69
|
-
@typed_stage = resolve_typed_stage(@stage.harmonized_code) unless @stage.abbr
|
70
|
-
elsif self.class.has_typed_stage?(stage)
|
71
|
-
@typed_stage, @stage = find_typed_stage(stage)
|
72
|
-
else
|
73
|
-
@stage = Identifier.parse_stage(stage)
|
74
|
-
# resolve typed stage when harmonized code provided as stage
|
75
|
-
# or stage abbreviation was not resolved
|
76
|
-
if /\A[\d.]+\z/.match?(stage) || @stage.empty_abbr?(with_prf: true)
|
77
|
-
@typed_stage = resolve_typed_stage(@stage.harmonized_code)
|
78
|
-
end
|
79
|
-
end
|
65
|
+
@typed_stage, @stage = resolve_stage(stage)
|
80
66
|
elsif iteration && !is_a?(Supplement)
|
81
67
|
raise Errors::IterationWithoutStageError, "Document without stage cannot have iteration"
|
82
68
|
end
|
83
69
|
|
84
70
|
@iteration = iteration.to_i if iteration
|
85
|
-
@supplement = supplement if supplement
|
86
71
|
@joint_document = joint_document if joint_document
|
87
72
|
@tctype = tctype if tctype
|
88
73
|
@sctype = sctype.to_s if sctype
|
@@ -95,47 +80,7 @@ module Pubid::Iso
|
|
95
80
|
@base = base if base
|
96
81
|
@part = part if part
|
97
82
|
@addendum = addendum if addendum
|
98
|
-
|
99
|
-
|
100
|
-
# @param typed_stage [String, Symbol] eg. "DTR" or :dtr
|
101
|
-
# @return [[Symbol, Stage]] typed stage and stage with assigned harmonized codes
|
102
|
-
def find_typed_stage(typed_stage)
|
103
|
-
if typed_stage.is_a?(Symbol)
|
104
|
-
return [typed_stage,
|
105
|
-
Identifier.build_stage(
|
106
|
-
harmonized_code: Identifier.build_harmonized_stage_code(self.class::TYPED_STAGES[typed_stage][:harmonized_stages])),
|
107
|
-
]
|
108
|
-
end
|
109
|
-
|
110
|
-
typed_stage = self.class::TYPED_STAGES.find do |_, v|
|
111
|
-
if v[:abbr].is_a?(Hash)
|
112
|
-
v[:abbr].value?(typed_stage)
|
113
|
-
else
|
114
|
-
if v.key?(:legacy_abbr)
|
115
|
-
v[:legacy_abbr].include?(typed_stage) || v[:abbr] == typed_stage
|
116
|
-
else
|
117
|
-
v[:abbr] == typed_stage
|
118
|
-
end
|
119
|
-
#
|
120
|
-
# v[:abbr] == typed_stage
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
[typed_stage.first,
|
125
|
-
Identifier.build_stage(
|
126
|
-
harmonized_code: Identifier.build_harmonized_stage_code(typed_stage[1][:harmonized_stages]))]
|
127
|
-
end
|
128
|
-
|
129
|
-
# Resolve typed stage using stage harmonized stage code
|
130
|
-
# @param harmonized_code [HarmonizedStageCode]
|
131
|
-
# @return [Symbol, nil] typed stage or nil
|
132
|
-
def resolve_typed_stage(harmonized_code)
|
133
|
-
self.class::TYPED_STAGES.each do |k, v|
|
134
|
-
if (v[:harmonized_stages] & harmonized_code.stages) == harmonized_code.stages
|
135
|
-
return k
|
136
|
-
end
|
137
|
-
end
|
138
|
-
nil
|
83
|
+
@edition = edition
|
139
84
|
end
|
140
85
|
|
141
86
|
class << self
|
@@ -179,7 +124,7 @@ module Pubid::Iso
|
|
179
124
|
end.inject({}, :merge)
|
180
125
|
|
181
126
|
# return supplement if supplements applied
|
182
|
-
if identifier_params[:supplements]
|
127
|
+
if identifier_params[:supplements] && identifier_params[:supplements].is_a?(Array)
|
183
128
|
return transform_supplements(
|
184
129
|
identifier_params[:supplements],
|
185
130
|
identifier_params.dup.tap { |h| h.delete(:supplements) }
|
@@ -196,24 +141,6 @@ module Pubid::Iso
|
|
196
141
|
Identifier.create(**identifier_params)
|
197
142
|
end
|
198
143
|
|
199
|
-
# @param typed_stage [String, Symbol] typed stage, eg. "DTR" or :dtr
|
200
|
-
# @return [Boolean] true when identifier has associated typed stage
|
201
|
-
def has_typed_stage?(typed_stage)
|
202
|
-
return self::TYPED_STAGES.key?(typed_stage) if typed_stage.is_a?(Symbol)
|
203
|
-
|
204
|
-
self::TYPED_STAGES.any? do |_, v|
|
205
|
-
if v[:abbr].is_a?(Hash)
|
206
|
-
v[:abbr].value?(typed_stage)
|
207
|
-
else
|
208
|
-
if v.key?(:legacy_abbr)
|
209
|
-
v[:legacy_abbr].include?(typed_stage) || v[:abbr] == typed_stage
|
210
|
-
else
|
211
|
-
v[:abbr] == typed_stage
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
144
|
def get_amendment_class
|
218
145
|
Pubid::Iso::Amendment
|
219
146
|
end
|
@@ -238,6 +165,10 @@ module Pubid::Iso
|
|
238
165
|
UPDATE_CODES
|
239
166
|
end
|
240
167
|
|
168
|
+
def get_identifier
|
169
|
+
Identifier
|
170
|
+
end
|
171
|
+
|
241
172
|
def type_match?(parameters)
|
242
173
|
parameters[:type] ? has_type?(parameters[:type]) : has_typed_stage?(parameters[:stage])
|
243
174
|
end
|
@@ -251,16 +182,6 @@ module Pubid::Iso
|
|
251
182
|
).render + (language ? ":#{language}" : "")
|
252
183
|
end
|
253
184
|
|
254
|
-
def get_params
|
255
|
-
instance_variables.map do |var|
|
256
|
-
if var.to_s == "@typed_stage" && @typed_stage
|
257
|
-
[:typed_stage, self.class::TYPED_STAGES[@typed_stage][:abbr]]
|
258
|
-
else
|
259
|
-
[var.to_s.gsub("@", "").to_sym, instance_variable_get(var)]
|
260
|
-
end
|
261
|
-
end.to_h
|
262
|
-
end
|
263
|
-
|
264
185
|
# @param format [:ref_num_short,:ref_num_long,:ref_dated,:ref_dated_long,:ref_undated,:ref_undated_long] create reference with specified format
|
265
186
|
# Format options are:
|
266
187
|
# :ref_num_short -- instance reference number: 1 letter language code + short form (DAM) + dated
|
@@ -333,23 +254,6 @@ module Pubid::Iso
|
|
333
254
|
end
|
334
255
|
|
335
256
|
# Return typed stage abbreviation, eg. "FDTR", "DIS", "TR"
|
336
|
-
def typed_stage_abbrev
|
337
|
-
if self.class::TYPED_STAGES.key?(typed_stage)
|
338
|
-
self.class::TYPED_STAGES[typed_stage][:abbr]
|
339
|
-
else
|
340
|
-
stage ? "#{stage.abbr} #{type[:key].to_s.upcase}" : type[:key].to_s.upcase
|
341
|
-
end
|
342
|
-
end
|
343
|
-
|
344
|
-
# Return typed stage name, eg. "Final Draft Technical Report" for "FDTR"
|
345
|
-
def typed_stage_name
|
346
|
-
if self.class::TYPED_STAGES.key?(typed_stage)
|
347
|
-
self.class::TYPED_STAGES[typed_stage][:name]
|
348
|
-
else
|
349
|
-
stage ? "#{stage.name} #{type[:title]}" : type[:title]
|
350
|
-
end
|
351
|
-
end
|
352
|
-
|
353
257
|
# returns root identifier
|
354
258
|
def root
|
355
259
|
return base.base if base&.base
|
@@ -8,6 +8,13 @@ module Pubid::Iso
|
|
8
8
|
|
9
9
|
TYPED_STAGES = {}.freeze
|
10
10
|
|
11
|
+
attr_accessor :edition_publisher
|
12
|
+
|
13
|
+
def initialize(edition_publisher: nil, **opts)
|
14
|
+
super(**opts)
|
15
|
+
@edition_publisher = edition_publisher
|
16
|
+
end
|
17
|
+
|
11
18
|
def self.type
|
12
19
|
{ key: :dir, title: "Directives" }
|
13
20
|
end
|
@@ -21,11 +21,7 @@ module Pubid::Iso
|
|
21
21
|
},
|
22
22
|
}.freeze
|
23
23
|
|
24
|
-
def initialize(
|
25
|
-
joint_document: nil, tctype: nil, sctype: nil, wgtype: nil, tcnumber: nil,
|
26
|
-
scnumber: nil, wgnumber:nil,
|
27
|
-
dir: nil, dirtype: nil, year: nil, amendments: nil,
|
28
|
-
corrigendums: nil, type: nil, base: nil, supplements: nil, **opts)
|
24
|
+
def initialize(stage: nil, iteration: nil, **opts)
|
29
25
|
|
30
26
|
if iteration && stage.nil?
|
31
27
|
raise Errors::IsStageIterationError, "IS stage document cannot have iteration"
|
data/lib/pubid/iso/parser.rb
CHANGED
@@ -169,9 +169,13 @@ module Pubid::Iso
|
|
169
169
|
((str("DIR") | str("Directives Part") | str("Directives, Part") | str("Directives,")).as(:type) >> space).maybe >>
|
170
170
|
(str("JTC").as(:dirtype) >> space).maybe >>
|
171
171
|
(digits.as(:number) >> (str(":") >> year).maybe).maybe >>
|
172
|
-
(str(" -- Consolidated").maybe >> (
|
173
|
-
(
|
174
|
-
|
172
|
+
(str(" -- Consolidated").maybe >> (str("").as(:mark) >> space? >>
|
173
|
+
(organization.as(:publisher) >> space?).maybe >>
|
174
|
+
array_to_str(DIR_SUPPLEMENTS) >> (str(":") >> year).maybe >>
|
175
|
+
dir_supplement_edition.maybe).repeat(1).as(:supplements)).maybe >>
|
176
|
+
# parse identifiers with publisher at the end, e.g. "ISO/IEC DIR 2 ISO"
|
177
|
+
(space >> organization.as(:publisher) >> (str(":") >> year).maybe).as(:edition).maybe
|
178
|
+
|
175
179
|
end
|
176
180
|
|
177
181
|
rule(:std_document_body) do
|
@@ -4,12 +4,12 @@ module Pubid::Iso::Renderer
|
|
4
4
|
class Dir < Base
|
5
5
|
|
6
6
|
def render_identifier(params, opts)
|
7
|
-
res = ("%{publisher} DIR%{dirtype}%{number}%{year}%{
|
7
|
+
res = ("%{publisher} DIR%{dirtype}%{number}%{year}%{edition}" % params)
|
8
8
|
|
9
9
|
if params.key?(:joint_document)
|
10
10
|
joint_params = prerender_params(params[:joint_document].get_params, {})
|
11
11
|
joint_params.default = ""
|
12
|
-
res += (" + %{publisher}%{dirtype}%{number}%{year}
|
12
|
+
res += (" + %{publisher}%{dirtype}%{number}%{year}" % joint_params)
|
13
13
|
end
|
14
14
|
|
15
15
|
res
|
@@ -23,13 +23,8 @@ module Pubid::Iso::Renderer
|
|
23
23
|
" #{dirtype}"
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
27
|
-
|
28
|
-
" #{supplement.publisher} SUP"
|
29
|
-
else
|
30
|
-
" SUP"
|
31
|
-
end + (supplement.year && ":#{supplement.year}" || "") +
|
32
|
-
(supplement.edition && " Edition #{supplement.edition}" || "")
|
26
|
+
def render_edition(edition, _opts, _params)
|
27
|
+
" #{edition[:publisher]}" + (edition[:year] ? ":#{edition[:year]}" : "")
|
33
28
|
end
|
34
29
|
end
|
35
30
|
end
|
@@ -15,28 +15,30 @@ module Pubid::Iso
|
|
15
15
|
end
|
16
16
|
|
17
17
|
rule(supplements: subtree(:supplements)) do |context|
|
18
|
-
context[:supplements]
|
19
|
-
context[:supplements]
|
20
|
-
|
21
|
-
supplement
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
if context[:supplements].is_a?(Array)
|
19
|
+
context[:supplements] =
|
20
|
+
context[:supplements].map do |supplement|
|
21
|
+
if supplement[:typed_stage]
|
22
|
+
supplement.merge(
|
23
|
+
case supplement[:typed_stage]
|
24
|
+
when "PDAM"
|
25
|
+
{ typed_stage: "CD", type: "Amd" }
|
26
|
+
when "pDCOR"
|
27
|
+
{ typed_stage: "CD", type: "Cor" }
|
28
|
+
else
|
29
|
+
{}
|
30
|
+
end
|
31
|
+
)
|
32
|
+
else
|
33
|
+
case supplement[:type]
|
34
|
+
when "Addendum"
|
35
|
+
supplement.merge({ type: "Add" })
|
27
36
|
else
|
28
|
-
|
37
|
+
supplement
|
29
38
|
end
|
30
|
-
)
|
31
|
-
else
|
32
|
-
case supplement[:type]
|
33
|
-
when "Addendum"
|
34
|
-
supplement.merge({ type: "Add" })
|
35
|
-
else
|
36
|
-
supplement
|
37
39
|
end
|
38
40
|
end
|
39
|
-
|
41
|
+
end
|
40
42
|
context
|
41
43
|
end
|
42
44
|
|
data/lib/pubid/iso/version.rb
CHANGED
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.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.8.
|
61
|
+
version: 1.8.7
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.8.
|
68
|
+
version: 1.8.7
|
69
69
|
description: Library to generate, parse and manipulate ISO PubID.
|
70
70
|
email:
|
71
71
|
- open.source@ribose.com
|
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '0'
|
147
147
|
requirements: []
|
148
|
-
rubygems_version: 3.
|
148
|
+
rubygems_version: 3.3.26
|
149
149
|
signing_key:
|
150
150
|
specification_version: 4
|
151
151
|
summary: Library to generate, parse and manipulate ISO PubID.
|