pubid-iso 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +48 -1
- data/lib/pubid/iso/amendment.rb +2 -25
- data/lib/pubid/iso/corrigendum.rb +20 -19
- data/lib/pubid/iso/errors.rb +8 -0
- data/lib/pubid/iso/harmonized_stage_code.rb +59 -19
- data/lib/pubid/iso/identifier.rb +124 -20
- data/lib/pubid/iso/parser.rb +24 -19
- data/lib/pubid/iso/renderer/base.rb +95 -40
- data/lib/pubid/iso/renderer/dir.rb +1 -1
- data/lib/pubid/iso/renderer/french.rb +7 -2
- data/lib/pubid/iso/renderer/russian.rb +10 -7
- data/lib/pubid/iso/renderer/urn.rb +33 -4
- data/lib/pubid/iso/stage.rb +44 -15
- data/lib/pubid/iso/supplement.rb +10 -8
- data/lib/pubid/iso/transformer.rb +64 -20
- data/lib/pubid/iso/type.rb +77 -0
- data/lib/pubid/iso/typed_stage.rb +204 -0
- data/lib/pubid/iso/version.rb +1 -1
- data/lib/pubid/iso.rb +2 -0
- metadata +6 -4
@@ -0,0 +1,204 @@
|
|
1
|
+
module Pubid::Iso
|
2
|
+
class TypedStage
|
3
|
+
attr_accessor :type, :stage, :typed_stage
|
4
|
+
|
5
|
+
TYPED_STAGES = {
|
6
|
+
dtr: {
|
7
|
+
abbr: "DTR",
|
8
|
+
type: :tr,
|
9
|
+
name: "Draft Technical Report",
|
10
|
+
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93 50.00 50.20 50.60 50.92],
|
11
|
+
},
|
12
|
+
dis: {
|
13
|
+
abbr: "DIS",
|
14
|
+
type: :is,
|
15
|
+
name: "Draft International Standard",
|
16
|
+
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93],
|
17
|
+
},
|
18
|
+
dts: {
|
19
|
+
abbr: "DTS",
|
20
|
+
type: :ts,
|
21
|
+
name: "Draft Technical Specification",
|
22
|
+
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93 50.00 50.20 50.60 50.92],
|
23
|
+
},
|
24
|
+
fdts: {
|
25
|
+
abbr: "FDTS",
|
26
|
+
type: :ts,
|
27
|
+
name: "Final Draft Technical Specification",
|
28
|
+
harmonized_stages: %w[50.00 50.20 50.60 50.92],
|
29
|
+
},
|
30
|
+
fdtr: {
|
31
|
+
abbr: "FDTR",
|
32
|
+
type: :tr,
|
33
|
+
name: "Final Draft Technical Report",
|
34
|
+
harmonized_stages: %w[50.00 50.20 50.60 50.92],
|
35
|
+
},
|
36
|
+
fdis: {
|
37
|
+
abbr: "FDIS",
|
38
|
+
type: :is,
|
39
|
+
name: "Final Draft International Standard",
|
40
|
+
harmonized_stages: %w[50.00 50.20 50.60 50.92],
|
41
|
+
},
|
42
|
+
dpas: {
|
43
|
+
abbr: "DPAS",
|
44
|
+
type: :pas,
|
45
|
+
name: "Publicly Available Specification Draft",
|
46
|
+
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93 50.00 50.20 50.60 50.92],
|
47
|
+
},
|
48
|
+
damd: {
|
49
|
+
abbr: { short: "DAM", long: "DAmd" },
|
50
|
+
type: :amd,
|
51
|
+
name: "Draft Amendment",
|
52
|
+
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93 50.00 50.20 50.60 50.92],
|
53
|
+
},
|
54
|
+
dcor: {
|
55
|
+
abbr: { short: "DCOR", long: "DCor" },
|
56
|
+
type: :cor,
|
57
|
+
name: "Draft Corrigendum",
|
58
|
+
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93 50.00 50.20 50.60 50.92],
|
59
|
+
},
|
60
|
+
fdamd: {
|
61
|
+
abbr: { short: "FDAM", long: "FDAmd" },
|
62
|
+
type: :amd,
|
63
|
+
name: "Final Draft Amendment",
|
64
|
+
harmonized_stages: %w[50.00 50.20 50.60 50.92],
|
65
|
+
},
|
66
|
+
fdcor: {
|
67
|
+
abbr: { short: "FDCOR", long: "FDCor" },
|
68
|
+
type: :cor,
|
69
|
+
name: "Final Draft Corrigendum",
|
70
|
+
harmonized_stages: %w[50.00 50.20 50.60 50.92],
|
71
|
+
},
|
72
|
+
}.freeze
|
73
|
+
|
74
|
+
# @param type [Symbol,Type] eg. :tr, Type.new(:tr)
|
75
|
+
# @param stage [Symbol,Stage] eg. :CD, Stage.new(abbr: :CD)
|
76
|
+
def initialize(abbr: nil, type: nil, stage: nil)
|
77
|
+
@type = type.is_a?(Type) ? type : Type.new(type) if type
|
78
|
+
@stage = stage.is_a?(Stage) ? stage : Stage.new(abbr: stage) if stage
|
79
|
+
|
80
|
+
if abbr
|
81
|
+
raise Errors::TypeStageInvalidError, "#{abbr} is not valid typed stage" unless TYPED_STAGES.key?(abbr)
|
82
|
+
assign_abbreviation(abbr)
|
83
|
+
elsif !@stage.nil?
|
84
|
+
# lookup for typed stage
|
85
|
+
@typed_stage = lookup_typed_stage
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def lookup_typed_stage
|
90
|
+
return nil unless @stage
|
91
|
+
|
92
|
+
TYPED_STAGES.each do |typed_stage, values|
|
93
|
+
if values[:harmonized_stages].include?(@stage.harmonized_code.to_s) && values[:type] == @type&.type
|
94
|
+
return typed_stage
|
95
|
+
end
|
96
|
+
end
|
97
|
+
nil
|
98
|
+
end
|
99
|
+
|
100
|
+
# Assigns type and stage according to provided typed stage abbreviation
|
101
|
+
# @param abbr [Symbol] eg. :dtr, :damd, :dis
|
102
|
+
def assign_abbreviation(abbr)
|
103
|
+
@typed_stage = if TYPED_STAGES.key?(abbr.downcase.to_sym)
|
104
|
+
abbr.downcase.to_sym
|
105
|
+
else
|
106
|
+
TYPED_STAGES.select do |_, v|
|
107
|
+
if v[:abbr].is_a?(Hash)
|
108
|
+
v[:abbr].values.include?(abbr)
|
109
|
+
else
|
110
|
+
v[:abbr] == abbr
|
111
|
+
end
|
112
|
+
end.keys.first
|
113
|
+
end
|
114
|
+
|
115
|
+
@type = Type.new(TYPED_STAGES[@typed_stage][:type])
|
116
|
+
@stage = Stage.new(harmonized_code: HarmonizedStageCode.new(TYPED_STAGES[@typed_stage][:harmonized_stages]))
|
117
|
+
end
|
118
|
+
|
119
|
+
# Render typed stage
|
120
|
+
# @param stage_format_long [Boolean] render stage in long or short format
|
121
|
+
def to_s(stage_format_long = true)
|
122
|
+
# return "" if @type == :amd || @type == :cor
|
123
|
+
if @typed_stage
|
124
|
+
if TYPED_STAGES[@typed_stage][:abbr].is_a?(Hash)
|
125
|
+
return TYPED_STAGES[@typed_stage][:abbr][stage_format_long ? :long : :short]
|
126
|
+
else
|
127
|
+
return TYPED_STAGES[@typed_stage][:abbr]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
result = (@stage && @stage.abbr != "IS") ? "#{@stage.abbr}" : ""
|
132
|
+
result += " " if !result.empty? && @type && stage_format_long
|
133
|
+
result + if stage_format_long
|
134
|
+
"#{@type&.to_s}"
|
135
|
+
else
|
136
|
+
if @type == :amd
|
137
|
+
"AM"
|
138
|
+
elsif @type == :cor
|
139
|
+
"COR"
|
140
|
+
else
|
141
|
+
"#{@type&.to_s}"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Check if typed stage listed in TYPED_STAGES constant
|
147
|
+
# @param typed_stage [String,Symbol] typed stage abbreviation, eg. "DTS", :dts, "DAmd", :damd
|
148
|
+
def self.has_typed_stage?(typed_stage)
|
149
|
+
return true if TYPED_STAGES.key?(typed_stage)
|
150
|
+
|
151
|
+
TYPED_STAGES.any? do |_, v|
|
152
|
+
if v[:abbr].is_a?(Hash)
|
153
|
+
v[:abbr].values.include?(typed_stage)
|
154
|
+
else
|
155
|
+
v[:abbr] == typed_stage
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
# Assigns stage or type or typed stage or stage and type depending on provided string
|
161
|
+
# @param stage_or_typed_stage [String, Stage] eg. "DTR", "CD", Stage.new(:CD), "TR", "CD Amd", :dtr
|
162
|
+
def parse_stage(stage_or_typed_stage)
|
163
|
+
if self.class.has_typed_stage?(stage_or_typed_stage)
|
164
|
+
return assign_abbreviation(stage_or_typed_stage)
|
165
|
+
end
|
166
|
+
|
167
|
+
if stage_or_typed_stage.is_a?(Stage)
|
168
|
+
@stage = stage_or_typed_stage
|
169
|
+
elsif stage_or_typed_stage.is_a?(String) && stage_or_typed_stage.split.count == 2 &&
|
170
|
+
Stage.has_stage?(stage_or_typed_stage.split.first)
|
171
|
+
# stage and type ("CD Amd")
|
172
|
+
@stage = Stage.parse(stage_or_typed_stage.split.first)
|
173
|
+
@type = Type.parse(stage_or_typed_stage.split.last)
|
174
|
+
elsif Type.has_type?(stage_or_typed_stage)
|
175
|
+
@type = Type.parse(stage_or_typed_stage)
|
176
|
+
elsif Stage.has_stage?(stage_or_typed_stage)
|
177
|
+
@stage = Stage.parse(stage_or_typed_stage.to_s)
|
178
|
+
else
|
179
|
+
raise Errors::TypeStageParseError, "cannot parse typed stage or stage"
|
180
|
+
end
|
181
|
+
@typed_stage = lookup_typed_stage
|
182
|
+
end
|
183
|
+
|
184
|
+
# Parse stage or typed stage
|
185
|
+
# @return [TypedStage] typed stage object with parsed stage and typed stage
|
186
|
+
def self.parse(stage_or_typed_stage)
|
187
|
+
return stage_or_typed_stage if stage_or_typed_stage.is_a?(TypedStage)
|
188
|
+
|
189
|
+
typed_stage = new
|
190
|
+
typed_stage.parse_stage(stage_or_typed_stage)
|
191
|
+
typed_stage
|
192
|
+
end
|
193
|
+
|
194
|
+
def name
|
195
|
+
TYPED_STAGES[@typed_stage][:name]
|
196
|
+
end
|
197
|
+
|
198
|
+
def ==(other)
|
199
|
+
return false if other.nil?
|
200
|
+
|
201
|
+
type == other.type && typed_stage == other.typed_stage && stage == other.stage
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
data/lib/pubid/iso/version.rb
CHANGED
data/lib/pubid/iso.rb
CHANGED
@@ -11,6 +11,8 @@ end
|
|
11
11
|
require "pubid-core"
|
12
12
|
require_relative "iso/errors"
|
13
13
|
require_relative "iso/stage"
|
14
|
+
require_relative "iso/type"
|
15
|
+
require_relative "iso/typed_stage"
|
14
16
|
require_relative "iso/harmonized_stage_code"
|
15
17
|
require_relative "iso/parser"
|
16
18
|
require_relative "iso/transformer"
|
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.
|
4
|
+
version: 0.3.0
|
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-11-02 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: 1.
|
103
|
+
version: 1.3.0
|
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: 1.
|
110
|
+
version: 1.3.0
|
111
111
|
description: Library to generate, parse and manipulate ISO PubID.
|
112
112
|
email:
|
113
113
|
- open.source@ribose.com
|
@@ -138,6 +138,8 @@ files:
|
|
138
138
|
- lib/pubid/iso/stage.rb
|
139
139
|
- lib/pubid/iso/supplement.rb
|
140
140
|
- lib/pubid/iso/transformer.rb
|
141
|
+
- lib/pubid/iso/type.rb
|
142
|
+
- lib/pubid/iso/typed_stage.rb
|
141
143
|
- lib/pubid/iso/version.rb
|
142
144
|
homepage: https://github.com/metanorma/pubid-iso
|
143
145
|
licenses:
|