pubid-iso 0.3.1 → 0.4.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/README.adoc +118 -39
- data/lib/pubid/iso/errors.rb +0 -3
- data/lib/pubid/iso/harmonized_stage_code.rb +1 -145
- data/lib/pubid/iso/identifier/amendment.rb +38 -0
- data/lib/pubid/iso/identifier/base.rb +365 -0
- data/lib/pubid/iso/identifier/corrigendum.rb +39 -0
- data/lib/pubid/iso/identifier/directives.rb +29 -0
- data/lib/pubid/iso/identifier/guide.rb +32 -0
- data/lib/pubid/iso/identifier/international_standard.rb +45 -0
- data/lib/pubid/iso/identifier/international_standardized_profile.rb +30 -0
- data/lib/pubid/iso/identifier/international_workshop_agreement.rb +25 -0
- data/lib/pubid/iso/identifier/publicly_available_specification.rb +30 -0
- data/lib/pubid/iso/identifier/recommendation.rb +19 -0
- data/lib/pubid/iso/identifier/supplement.rb +39 -0
- data/lib/pubid/iso/identifier/technical_committee.rb +19 -0
- data/lib/pubid/iso/identifier/technical_report.rb +30 -0
- data/lib/pubid/iso/identifier/technical_specification.rb +30 -0
- data/lib/pubid/iso/identifier/technology_trends_assessments.rb +30 -0
- data/lib/pubid/iso/identifier.rb +39 -264
- data/lib/pubid/iso/parser.rb +56 -20
- data/lib/pubid/iso/renderer/amendment.rb +7 -0
- data/lib/pubid/iso/renderer/base.rb +129 -98
- data/lib/pubid/iso/renderer/corrigendum.rb +7 -0
- data/lib/pubid/iso/renderer/dir.rb +5 -3
- data/lib/pubid/iso/renderer/guide.rb +19 -0
- data/lib/pubid/iso/renderer/international_standard.rb +11 -0
- data/lib/pubid/iso/renderer/international_standardized_profile.rb +13 -0
- data/lib/pubid/iso/renderer/international_workshop_agreement.rb +17 -0
- data/lib/pubid/iso/renderer/publicly_available_specification.rb +12 -0
- data/lib/pubid/iso/renderer/recommendation.rb +13 -0
- data/lib/pubid/iso/renderer/supplement.rb +63 -0
- data/lib/pubid/iso/renderer/technical_committee.rb +47 -0
- data/lib/pubid/iso/renderer/technical_report.rb +13 -0
- data/lib/pubid/iso/renderer/technical_specification.rb +13 -0
- data/lib/pubid/iso/renderer/technology_trends_assessments.rb +13 -0
- data/lib/pubid/iso/renderer/urn-amendment.rb +12 -0
- data/lib/pubid/iso/renderer/urn-corrigendum.rb +12 -0
- data/lib/pubid/iso/renderer/urn-dir.rb +11 -3
- data/lib/pubid/iso/renderer/urn-supplement.rb +31 -0
- data/lib/pubid/iso/renderer/urn-tc.rb +2 -0
- data/lib/pubid/iso/renderer/urn.rb +25 -13
- data/lib/pubid/iso/stage.rb +1 -99
- data/lib/pubid/iso/transformer.rb +88 -104
- data/lib/pubid/iso/type.rb +3 -1
- data/lib/pubid/iso/version.rb +1 -1
- data/lib/pubid/iso.rb +20 -14
- data/stages.yaml +93 -0
- data/update_codes.yaml +1 -0
- metadata +37 -11
- data/lib/pubid/iso/amendment.rb +0 -15
- data/lib/pubid/iso/corrigendum.rb +0 -31
- data/lib/pubid/iso/renderer/french.rb +0 -29
- data/lib/pubid/iso/renderer/russian.rb +0 -64
- data/lib/pubid/iso/renderer/tc.rb +0 -30
- data/lib/pubid/iso/supplement.rb +0 -56
- data/lib/pubid/iso/typed_stage.rb +0 -204
data/lib/pubid/iso/amendment.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
module Pubid::Iso
|
2
|
-
class Amendment < Supplement
|
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)
|
6
|
-
pubid_number = render_pubid_number(with_date: with_date)
|
7
|
-
|
8
|
-
"/#{@typed_stage.to_s(stage_format_long)} #{pubid_number}"
|
9
|
-
end
|
10
|
-
|
11
|
-
def render_urn
|
12
|
-
"#{render_urn_stage}:amd#{render_urn_number}"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Pubid::Iso
|
2
|
-
class Corrigendum < Supplement
|
3
|
-
def render_pubid(stage_format_long = true, with_date = true)
|
4
|
-
# stage = render_pubid_stage
|
5
|
-
pubid_number = render_pubid_number(with_date: with_date)
|
6
|
-
"/#{@typed_stage.to_s(stage_format_long)} #{pubid_number}"
|
7
|
-
# case stage.to_s
|
8
|
-
# when "DIS"
|
9
|
-
# if stage_format_long
|
10
|
-
# "/DCor #{pubid_number}"
|
11
|
-
# else
|
12
|
-
# "/DCOR #{pubid_number}"
|
13
|
-
# end
|
14
|
-
# when "FDIS"
|
15
|
-
# if stage_format_long
|
16
|
-
# "/FDCor #{pubid_number}"
|
17
|
-
# else
|
18
|
-
# "/FDCOR #{pubid_number}"
|
19
|
-
# end
|
20
|
-
# when ""
|
21
|
-
# "/Cor #{pubid_number}"
|
22
|
-
# else
|
23
|
-
# "/#{stage} Cor #{pubid_number}"
|
24
|
-
# end
|
25
|
-
end
|
26
|
-
|
27
|
-
def render_urn
|
28
|
-
"#{render_urn_stage}:cor#{render_urn_number}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Pubid::Iso::Renderer
|
2
|
-
class French < Base
|
3
|
-
def render_typed_stage(typed_stage, opts, params)
|
4
|
-
return nil if typed_stage.type == :guide
|
5
|
-
|
6
|
-
super
|
7
|
-
end
|
8
|
-
|
9
|
-
def render_identifier(params)
|
10
|
-
if @params[:typed_stage]&.type == :guide
|
11
|
-
"Guide #{super(params)}"
|
12
|
-
else
|
13
|
-
super
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def render_copublisher(copublisher, opts, params)
|
18
|
-
"/#{copublisher.to_s.sub("IEC", "CEI")}"
|
19
|
-
end
|
20
|
-
|
21
|
-
def render_corrigendums(corrigendums, _opts, _params)
|
22
|
-
super.gsub(" ", ".")
|
23
|
-
end
|
24
|
-
|
25
|
-
def render_amendments(amendments, _opts, _params)
|
26
|
-
super.gsub(" ", ".")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module Pubid::Iso::Renderer
|
2
|
-
class Russian < Base
|
3
|
-
PUBLISHER = { "ISO" => "ИСО", "IEC" => "МЭК" }.freeze
|
4
|
-
STAGE = { "FDIS" => "ОПМС",
|
5
|
-
"DIS" => "ПМС",
|
6
|
-
"NP" => "НП",
|
7
|
-
"AWI" => "АВИ",
|
8
|
-
"CD" => "КПК",
|
9
|
-
"PD" => "ПД",
|
10
|
-
"FPD" => "ФПД",
|
11
|
-
|
12
|
-
|
13
|
-
}.freeze
|
14
|
-
|
15
|
-
TYPE = { "Guide" => "Руководство",
|
16
|
-
"TS" => "ТС",
|
17
|
-
"TR" => "ТО",
|
18
|
-
"ISP" => "ИСП",
|
19
|
-
}.freeze
|
20
|
-
|
21
|
-
def render_typed_stage(typed_stage, opts, params)
|
22
|
-
return nil if typed_stage.type == :guide
|
23
|
-
|
24
|
-
return (params[:copublisher] ? " " : "/") + STAGE[typed_stage.to_s] if STAGE.key?(typed_stage.to_s)
|
25
|
-
|
26
|
-
super
|
27
|
-
end
|
28
|
-
|
29
|
-
def render_identifier(params)
|
30
|
-
if @params[:typed_stage]&.type == :guide
|
31
|
-
"Руководство #{super(params)}"
|
32
|
-
else
|
33
|
-
super
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def render_publisher(publisher, _opts, _params)
|
38
|
-
PUBLISHER[publisher]
|
39
|
-
end
|
40
|
-
|
41
|
-
def render_copublisher(copublisher, _opts, _params)
|
42
|
-
# (!@copublisher.is_a?(Array) && [@copublisher]) || @copublisher
|
43
|
-
if copublisher.is_a?(Array)
|
44
|
-
copublisher.map(&:to_s).sort.map do |copublisher|
|
45
|
-
"/#{PUBLISHER[copublisher].gsub('-', '/')}"
|
46
|
-
end.join
|
47
|
-
else
|
48
|
-
"/#{PUBLISHER[copublisher]}"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def render_stage(stage, _opts, params)
|
53
|
-
STAGE[stage.abbr] unless stage.nil?
|
54
|
-
end
|
55
|
-
|
56
|
-
def render_corrigendums(corrigendums, _opts, _params)
|
57
|
-
super.gsub(" ", ".")
|
58
|
-
end
|
59
|
-
|
60
|
-
def render_amendments(amendments, _opts, _params)
|
61
|
-
super.gsub(" ", ".")
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module Pubid::Iso::Renderer
|
2
|
-
class Tc < Base
|
3
|
-
|
4
|
-
def render_identifier(params)
|
5
|
-
"%{publisher}%{copublisher} %{tctype} %{tcnumber}%{sctype}%{wgtype} N%{number}" % params
|
6
|
-
end
|
7
|
-
|
8
|
-
def render_tctype(tctype, _opts, _params)
|
9
|
-
tctype.is_a?(Array) && tctype.join("/") || tctype.to_s
|
10
|
-
end
|
11
|
-
|
12
|
-
# TC 184/SC/WG 4 - no wg number
|
13
|
-
# TC 184/SC 4/WG 12 - separate sc and wg number
|
14
|
-
def render_sctype(sctype, _opts, params)
|
15
|
-
if params[:wgnumber] || !params[:wgtype]
|
16
|
-
"/#{sctype} #{params[:scnumber]}"
|
17
|
-
else
|
18
|
-
"/#{sctype}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def render_wgtype(wgtype, _opts, params)
|
23
|
-
if params[:wgnumber]
|
24
|
-
"/#{wgtype} #{params[:wgnumber]}"
|
25
|
-
else
|
26
|
-
"/#{wgtype} #{params[:scnumber]}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/lib/pubid/iso/supplement.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
module Pubid::Iso
|
2
|
-
class Supplement < Pubid::Core::Supplement
|
3
|
-
attr_accessor :typed_stage, :publisher, :edition, :iteration
|
4
|
-
|
5
|
-
# @param stage [Stage, Symbol, String] stage, e.g. "PWI", "NP", "50.00", Stage.new(abbr: :WD)
|
6
|
-
# @param publisher [String] publisher, e.g. "ISO", "IEC" (only for DIR documents)
|
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(typed_stage: nil, publisher: nil, edition: nil, iteration: nil, **args)
|
11
|
-
super(**args)
|
12
|
-
@typed_stage = TypedStage.parse(typed_stage) if typed_stage
|
13
|
-
# for DIR identifiers only
|
14
|
-
@publisher = publisher.to_s
|
15
|
-
@edition = edition&.to_i
|
16
|
-
@iteration = iteration&.to_i
|
17
|
-
|
18
|
-
if @iteration && @typed_stage.nil?
|
19
|
-
raise Errors::PublishedIterationError.new("cannot assign iteration to published supplement")
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def render_pubid_stage
|
24
|
-
# @typed_stage.stage.abbr != "IS" &&
|
25
|
-
((@typed_stage && @typed_stage.to_s) || "")
|
26
|
-
end
|
27
|
-
|
28
|
-
def render_urn_stage
|
29
|
-
((@typed_stage&.stage && ":stage-#{@typed_stage.stage.harmonized_code}") || "")
|
30
|
-
end
|
31
|
-
|
32
|
-
def <=>(other)
|
33
|
-
(super == 0) && ((typed_stage.nil? || typed_stage == other.typed_stage) && 0 || -1) || super
|
34
|
-
end
|
35
|
-
|
36
|
-
def render_iteration
|
37
|
-
@iteration && ".#{@iteration}"
|
38
|
-
end
|
39
|
-
|
40
|
-
def render_pubid_number(with_date: true)
|
41
|
-
if @year && with_date
|
42
|
-
"#{@number}#{render_iteration}:#{@year}"
|
43
|
-
else
|
44
|
-
"#{@number}#{render_iteration}"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def render_urn_number
|
49
|
-
if @year
|
50
|
-
":#{@year}:v#{@number}#{render_iteration}"
|
51
|
-
else
|
52
|
-
":#{@number}#{render_iteration}:v1"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,204 +0,0 @@
|
|
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
|