pubid-core 1.5.2 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pubid/core/configuration.rb +6 -0
- data/lib/pubid/core/errors.rb +4 -0
- data/lib/pubid/core/harmonized_stage_code.rb +10 -16
- data/lib/pubid/core/identifier/base.rb +157 -0
- data/lib/pubid/core/identifier.rb +45 -132
- data/lib/pubid/core/stage.rb +16 -16
- data/lib/pubid/core/type.rb +14 -9
- data/lib/pubid/core/version.rb +1 -1
- data/lib/pubid/core.rb +2 -0
- data/lib/pubid-core.rb +10 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b85bcef46a9327cb4c9ae474a84dea3b3986990082459b2f2bb37aa1c7578861
|
4
|
+
data.tar.gz: b7caa4de8dd3ac5c9e9b0d9bed0f3690207f48b5ec6366d4515a2ab138ab5b92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70ab4b5c6c3393811c898e3d66dbb9c1f1f80b34a5f9337697748ef06a6ee5f3331828b731b776fedeb44379c7766dda901cca146e15ba62731b17258e7d7cb5
|
7
|
+
data.tar.gz: 518912efd803e1ee6cef6d189fd618f4f52300109d057b35f9061437a199488b74c09cf2cafbb9622fe9a49c4e8fd7a0cea96e4e2861f53b6014e06277444c80
|
data/lib/pubid/core/errors.rb
CHANGED
@@ -4,5 +4,9 @@ module Pubid::Core
|
|
4
4
|
class HarmonizedStageCodeInvalidError < StandardError; end
|
5
5
|
class StageInvalidError < StandardError; end
|
6
6
|
class HarmonizedStageRenderingError < StandardError; end
|
7
|
+
class ParseTypeError < StandardError; end
|
8
|
+
class TypeStageParseError < StandardError; end
|
9
|
+
class WrongTypeError < StandardError; end
|
10
|
+
|
7
11
|
end
|
8
12
|
end
|
@@ -2,28 +2,22 @@ module Pubid::Core
|
|
2
2
|
class HarmonizedStageCode
|
3
3
|
include Comparable
|
4
4
|
# attr_accessor :stage, :substage
|
5
|
-
attr_accessor :stages
|
6
|
-
|
7
|
-
DESCRIPTIONS = STAGES_CONFIG["codes_description"]
|
8
|
-
DRAFT_STAGES = STAGES_CONFIG["draft_codes"]
|
9
|
-
CANCELED_STAGES = STAGES_CONFIG["canceled_codes"]
|
10
|
-
PUBLISHED_STAGES = STAGES_CONFIG["published_codes"]
|
11
|
-
STAGES_NAMES = STAGES_CONFIG["stage_codes"]
|
12
|
-
SUBSTAGES_NAMES = STAGES_CONFIG["substage_codes"]
|
5
|
+
attr_accessor :config, :stages
|
13
6
|
|
14
7
|
# @param stage_or_code [String,Array<String>] stage number or whole harmonized code with substage
|
15
8
|
# or list or stages for fuzzy stages eg. "10", 10, "20.20", ["10.20", "20.20"]
|
16
9
|
# or stage name eg. "proposal", "approval"
|
17
10
|
# @param substage [Integer, String] eg. "00", 0
|
18
11
|
# or substage name eg. "registration", "start_of_main_action"
|
19
|
-
def initialize(stage_or_code, substage = "00")
|
12
|
+
def initialize(stage_or_code, substage = "00", config:)
|
13
|
+
@config = config
|
20
14
|
@stages = if stage_or_code.is_a?(Array)
|
21
15
|
stage_or_code
|
22
|
-
elsif stage_or_code.is_a?(String) &&
|
16
|
+
elsif stage_or_code.is_a?(String) && config.stages["codes_description"].key?(stage_or_code)
|
23
17
|
[stage_or_code]
|
24
18
|
# when stage is stage name
|
25
|
-
elsif
|
26
|
-
["#{
|
19
|
+
elsif config.stages["stage_codes"].key?(stage_or_code.to_s)
|
20
|
+
["#{config.stages["stage_codes"][stage_or_code.to_s]}.#{config.stages["substage_codes"][substage.to_s]}"]
|
27
21
|
else
|
28
22
|
# stage is number
|
29
23
|
["#{stage_or_code}.#{substage}"]
|
@@ -34,15 +28,15 @@ module Pubid::Core
|
|
34
28
|
def validate_stages
|
35
29
|
@stages.each do |stage|
|
36
30
|
# raise an error when stage is wrong
|
37
|
-
raise Errors::HarmonizedStageCodeInvalidError unless
|
31
|
+
raise Errors::HarmonizedStageCodeInvalidError unless config.stages["codes_description"].key?(stage)
|
38
32
|
end
|
39
33
|
end
|
40
34
|
|
41
35
|
def to_s
|
42
36
|
if fuzzy?
|
43
|
-
return "draft" if @stages.all? { |s|
|
37
|
+
return "draft" if @stages.all? { |s| config.stages["draft_codes"].include?(s) || config.stages["canceled_codes"].include?(s) }
|
44
38
|
|
45
|
-
return "published" if @stages.all? { |s|
|
39
|
+
return "published" if @stages.all? { |s| config.stages["published_codes"].include?(s) }
|
46
40
|
|
47
41
|
raise Errors::HarmonizedStageRenderingError, "cannot render fuzzy stages"
|
48
42
|
else
|
@@ -73,7 +67,7 @@ module Pubid::Core
|
|
73
67
|
end
|
74
68
|
|
75
69
|
def description
|
76
|
-
|
70
|
+
config.stages["codes_description"][to_s]
|
77
71
|
end
|
78
72
|
end
|
79
73
|
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
module Pubid::Core
|
2
|
+
module Identifier
|
3
|
+
class Base
|
4
|
+
attr_accessor :number, :publisher, :copublisher, :part,
|
5
|
+
:type, :year, :edition, :language, :amendments,
|
6
|
+
:corrigendums, :stage
|
7
|
+
|
8
|
+
# Creates new identifier from options provided:
|
9
|
+
# @param publisher [String] document's publisher, eg. "ISO"
|
10
|
+
# @param copublisher [String,Array<String>] document's copublisher, eg. "IEC"
|
11
|
+
# @param number [Integer] document's number, eg. "1234"
|
12
|
+
# @param part [String] document's part and subparts, eg. "1", "1-1A", "2-3D"
|
13
|
+
# @param type [String] document's type, eg. "TR", "TS"
|
14
|
+
# @param year [Integer] document's year, eg. "2020"
|
15
|
+
# @param edition [Integer] document's edition, eg. "1"
|
16
|
+
# @param language [String] document's translation language
|
17
|
+
# (available languages: "ru", "fr", "en", "ar")
|
18
|
+
# @param amendments [Array<Amendment>,Array<Hash>] document's amendments
|
19
|
+
# @param corrigendums [Array<Corrigendum>,Array<Hash>] document's corrigendums
|
20
|
+
# @see Amendment
|
21
|
+
# @see Corrigendum
|
22
|
+
def initialize(publisher:, number:, copublisher: nil, part: nil, type: nil,
|
23
|
+
year: nil, edition: nil, language: nil, amendments: nil,
|
24
|
+
corrigendums: nil, stage: nil)
|
25
|
+
|
26
|
+
if amendments
|
27
|
+
@amendments = amendments.map do |amendment|
|
28
|
+
if amendment.is_a?(Hash)
|
29
|
+
self.class.get_transformer_class.new.apply(:amendments => [amendment])[:amendments].first
|
30
|
+
else
|
31
|
+
amendment
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
if corrigendums
|
37
|
+
@corrigendums = corrigendums.map do |corrigendum|
|
38
|
+
if corrigendum.is_a?(Hash)
|
39
|
+
self.class.get_transformer_class.new.apply(:corrigendums => [corrigendum])[:corrigendums].first
|
40
|
+
else
|
41
|
+
corrigendum
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
@publisher = publisher.to_s
|
47
|
+
@number = number
|
48
|
+
@copublisher = copublisher if copublisher
|
49
|
+
@part = part.to_s if part
|
50
|
+
@type = type.to_s if type
|
51
|
+
@year = year.to_i if year
|
52
|
+
@edition = edition.to_i if edition
|
53
|
+
@language = language.to_s if language
|
54
|
+
@stage = stage if stage
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [String] Rendered URN identifier
|
58
|
+
def urn
|
59
|
+
Renderer::Urn.new(get_params).render
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_params
|
63
|
+
instance_variables.map { |var| [var.to_s.gsub("@", "").to_sym, instance_variable_get(var)] }.to_h
|
64
|
+
end
|
65
|
+
|
66
|
+
# Render identifier using default renderer
|
67
|
+
def to_s
|
68
|
+
self.class.get_renderer_class.new(get_params).render
|
69
|
+
end
|
70
|
+
|
71
|
+
class << self
|
72
|
+
# Parses given identifier
|
73
|
+
# @param code_or_params [String, Hash] code or hash from parser
|
74
|
+
# eg. "ISO 1234", { }
|
75
|
+
# @return [Pubid::Core::Identifier] identifier
|
76
|
+
def parse(code_or_params)
|
77
|
+
params = code_or_params.is_a?(String) ?
|
78
|
+
get_parser_class.new.parse(update_old_code(code_or_params)) : code_or_params
|
79
|
+
transform(params.is_a?(Array) ? array_to_hash(params) : params)
|
80
|
+
rescue Parslet::ParseFailed => failure
|
81
|
+
raise Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}"
|
82
|
+
end
|
83
|
+
|
84
|
+
# Converts array of hashes into single hash
|
85
|
+
# array like [{ publisher: "ISO" }, { number: 1 }] to hash { publisher: "ISO", number: 1 }
|
86
|
+
# @param params [Array<Hash>] input array of hashes, eg. [{ a: 1 }, { b: 2 }]
|
87
|
+
def array_to_hash(params)
|
88
|
+
params.inject({}) do |r, i|
|
89
|
+
result = r
|
90
|
+
i.each do |k, v|
|
91
|
+
result = result.merge(k => r.key?(k) ? [v, r[k]].flatten : v)
|
92
|
+
end
|
93
|
+
result
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# Transform parameters hash or array or hashes to identifier
|
98
|
+
def transform(params)
|
99
|
+
# run transform through each element,
|
100
|
+
# like running transformer.apply(number: 1) and transformer.apply(year: 1999)
|
101
|
+
# instead of running transformer on whole hash, like running transformer.apply({ number: 1, year: 1999 })
|
102
|
+
# where rule for number or year only will be not applied
|
103
|
+
# transformation only applied to rules matching the whole hash
|
104
|
+
|
105
|
+
identifier_params = params.map do |k, v|
|
106
|
+
get_transformer_class.new.apply(k => v).to_a.first
|
107
|
+
end.to_h
|
108
|
+
|
109
|
+
new(**identifier_params)
|
110
|
+
end
|
111
|
+
|
112
|
+
# @param type [Symbol, String] eg. :tr, :ts, "TS"
|
113
|
+
# @return [Boolean] true if provided type matches with identifier's class type
|
114
|
+
def has_type?(type)
|
115
|
+
return type == self.type[:key] if type.is_a?(Symbol)
|
116
|
+
|
117
|
+
self.type.key?(:values) ? self.type[:values].include?(type) : type.to_s.downcase.to_sym == self.type[:key]
|
118
|
+
end
|
119
|
+
|
120
|
+
def get_amendment_class
|
121
|
+
Amendment
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_corrigendum_class
|
125
|
+
Corrigendum
|
126
|
+
end
|
127
|
+
|
128
|
+
def get_renderer_class
|
129
|
+
Renderer::Base
|
130
|
+
end
|
131
|
+
|
132
|
+
def get_transformer_class
|
133
|
+
Transformer
|
134
|
+
end
|
135
|
+
|
136
|
+
# @return [Hash, nil] replacement patterns
|
137
|
+
def get_update_codes
|
138
|
+
nil
|
139
|
+
end
|
140
|
+
|
141
|
+
def update_old_code(code)
|
142
|
+
return code unless get_update_codes
|
143
|
+
|
144
|
+
get_update_codes.each do |from, to|
|
145
|
+
code = code.gsub(from.match?(/^\/.*\/$/) ? Regexp.new(from[1..-2]) : /^#{Regexp.escape(from)}$/, to)
|
146
|
+
end
|
147
|
+
code
|
148
|
+
end
|
149
|
+
|
150
|
+
# Returns true when identifier's type match with provided parameters
|
151
|
+
def type_match?(parameters)
|
152
|
+
has_type?(parameters[:type])
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
@@ -1,153 +1,66 @@
|
|
1
1
|
module Pubid::Core
|
2
|
-
|
3
|
-
attr_accessor :
|
4
|
-
|
5
|
-
|
2
|
+
module Identifier
|
3
|
+
attr_accessor :config
|
4
|
+
@config = nil
|
5
|
+
|
6
|
+
# Resolve identifier's class and create new identifier
|
7
|
+
# @see Pubid::Identifier::Base.initialize for available options
|
8
|
+
def create(**opts)
|
9
|
+
resolve_identifier(opts)
|
10
|
+
# resolve_identifier(
|
11
|
+
# opts[:type],
|
12
|
+
# opts[:stage],
|
13
|
+
# opts.reject { |k, _v| [:type, :stage].include?(k) },
|
14
|
+
# )
|
15
|
+
end
|
6
16
|
|
7
|
-
#
|
8
|
-
# @
|
9
|
-
|
10
|
-
|
11
|
-
# @param part [String] document's part and subparts, eg. "1", "1-1A", "2-3D"
|
12
|
-
# @param type [String] document's type, eg. "TR", "TS"
|
13
|
-
# @param year [Integer] document's year, eg. "2020"
|
14
|
-
# @param edition [Integer] document's edition, eg. "1"
|
15
|
-
# @param language [String] document's translation language
|
16
|
-
# (available languages: "ru", "fr", "en", "ar")
|
17
|
-
# @param amendments [Array<Amendment>,Array<Hash>] document's amendments
|
18
|
-
# @param corrigendums [Array<Corrigendum>,Array<Hash>] document's corrigendums
|
19
|
-
# @see Amendment
|
20
|
-
# @see Corrigendum
|
21
|
-
def initialize(publisher:, number:, copublisher: nil, part: nil, type: nil,
|
22
|
-
year: nil, edition: nil, language: nil, amendments: nil,
|
23
|
-
corrigendums: nil)
|
17
|
+
# @param typed_stage_or_stage [String] typed stage or stage
|
18
|
+
# @return identifier's class
|
19
|
+
def resolve_identifier(parameters = {})
|
20
|
+
return @config.default_type.new(**parameters) if parameters[:type].nil? && parameters[:stage].nil?
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
if amendment.is_a?(Hash)
|
28
|
-
self.class.get_transformer_class.new.apply(:amendments => [amendment])[:amendments].first
|
29
|
-
else
|
30
|
-
amendment
|
31
|
-
end
|
32
|
-
end
|
22
|
+
@config.types.each do |identifier_type|
|
23
|
+
return identifier_type.new(**parameters) if identifier_type.type_match?(parameters)
|
33
24
|
end
|
34
25
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
self.class.get_transformer_class.new.apply(:corrigendums => [corrigendum])[:corrigendums].first
|
39
|
-
else
|
40
|
-
corrigendum
|
41
|
-
end
|
42
|
-
end
|
26
|
+
# When stage is not typed stage and type is not defined
|
27
|
+
if parameters[:type].nil? && (parameters[:stage].is_a?(Stage) || has_stage?(parameters[:stage]))
|
28
|
+
return @config.default_type.new(stage: parameters[:stage], **parameters)
|
43
29
|
end
|
44
30
|
|
45
|
-
|
46
|
-
@number = number
|
47
|
-
@copublisher = copublisher if copublisher
|
48
|
-
@part = part.to_s if part
|
49
|
-
@type = type.to_s if type
|
50
|
-
@year = year.to_i if year
|
51
|
-
@edition = edition.to_i if edition
|
52
|
-
@language = language.to_s if language
|
53
|
-
end
|
31
|
+
raise Errors::TypeStageParseError, "cannot parse typed stage or stage '#{parameters[:stage]}'" if parameters[:type].nil?
|
54
32
|
|
55
|
-
|
56
|
-
def urn
|
57
|
-
Renderer::Urn.new(get_params).render
|
33
|
+
raise Errors::ParseTypeError, "cannot parse type #{parameters[:type]}"
|
58
34
|
end
|
59
35
|
|
60
|
-
|
61
|
-
|
36
|
+
# @see Pubid::Identifier::Base.parse
|
37
|
+
def parse(*args)
|
38
|
+
Base.parse(*args)
|
62
39
|
end
|
63
40
|
|
64
|
-
#
|
65
|
-
def
|
66
|
-
|
41
|
+
# Parse identifier from title
|
42
|
+
def set_config(config)
|
43
|
+
@config = config
|
67
44
|
end
|
68
45
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
# eg. "ISO 1234", { }
|
73
|
-
# @return [Pubid::Core::Identifier] identifier
|
74
|
-
def parse(code_or_params)
|
75
|
-
params = code_or_params.is_a?(String) ?
|
76
|
-
get_parser_class.new.parse(update_old_code(code_or_params)) : code_or_params
|
77
|
-
transform(params.is_a?(Array) ? array_to_hash(params) : params)
|
78
|
-
rescue Parslet::ParseFailed => failure
|
79
|
-
raise Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}"
|
80
|
-
end
|
81
|
-
|
82
|
-
# Converts array of hashes into single hash
|
83
|
-
# array like [{ publisher: "ISO" }, { number: 1 }] to hash { publisher: "ISO", number: 1 }
|
84
|
-
# @param params [Array<Hash>] input array of hashes, eg. [{ a: 1 }, { b: 2 }]
|
85
|
-
def array_to_hash(params)
|
86
|
-
params.inject({}) do |r, i|
|
87
|
-
result = r
|
88
|
-
i.each do |k, v|
|
89
|
-
result = result.merge(k => r.key?(k) ? [v, r[k]].flatten : v)
|
90
|
-
end
|
91
|
-
result
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
# Transform parameters hash or array or hashes to identifier
|
96
|
-
def transform(params)
|
97
|
-
# run transform through each element,
|
98
|
-
# like running transformer.apply(number: 1) and transformer.apply(year: 1999)
|
99
|
-
# instead of running transformer on whole hash, like running transformer.apply({ number: 1, year: 1999 })
|
100
|
-
# where rule for number or year only will be not applied
|
101
|
-
# transformation only applied to rules matching the whole hash
|
102
|
-
|
103
|
-
identifier_params = params.map do |k, v|
|
104
|
-
get_transformer_class.new.apply(k => v).to_a.first
|
105
|
-
end.to_h
|
106
|
-
|
107
|
-
new(**identifier_params)
|
108
|
-
end
|
109
|
-
|
110
|
-
def descendants
|
111
|
-
ObjectSpace.each_object(Class).select { |klass| klass < self }
|
112
|
-
end
|
113
|
-
|
114
|
-
# @param type [Symbol, String] eg. :tr, :ts, "TS"
|
115
|
-
# @return [Boolean] true if provided type matches with identifier's class type
|
116
|
-
def has_type?(type)
|
117
|
-
return type == self.type[:key] if type.is_a?(Symbol)
|
118
|
-
|
119
|
-
self.type.key?(:values) ? self.type[:values].include?(type) : type.to_s.downcase.to_sym == self.type[:key]
|
120
|
-
end
|
121
|
-
|
122
|
-
def get_amendment_class
|
123
|
-
Amendment
|
124
|
-
end
|
125
|
-
|
126
|
-
def get_corrigendum_class
|
127
|
-
Corrigendum
|
128
|
-
end
|
129
|
-
|
130
|
-
def get_renderer_class
|
131
|
-
Renderer::Base
|
132
|
-
end
|
46
|
+
def build_stage(**args)
|
47
|
+
Stage.new(config: @config, **args)
|
48
|
+
end
|
133
49
|
|
134
|
-
|
135
|
-
|
136
|
-
|
50
|
+
def parse_stage(stage)
|
51
|
+
Stage.parse(stage, config: @config)
|
52
|
+
end
|
137
53
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
end
|
54
|
+
def has_stage?(stage)
|
55
|
+
Stage.has_stage?(stage, config: @config)
|
56
|
+
end
|
142
57
|
|
143
|
-
|
144
|
-
|
58
|
+
def build_type(type, **args)
|
59
|
+
@config.type_class.new(type, config: @config, **args)
|
60
|
+
end
|
145
61
|
|
146
|
-
|
147
|
-
|
148
|
-
end
|
149
|
-
code
|
150
|
-
end
|
62
|
+
def build_harmonized_stage_code(stage_or_code, substage = "00")
|
63
|
+
HarmonizedStageCode.new(stage_or_code, substage, config: @config)
|
151
64
|
end
|
152
65
|
end
|
153
66
|
end
|
data/lib/pubid/core/stage.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
module Pubid::Core
|
2
2
|
class Stage
|
3
|
-
attr_accessor :abbr, :harmonized_code
|
4
|
-
|
5
|
-
STAGES = STAGES_CONFIG["abbreviations"]
|
3
|
+
attr_accessor :config, :abbr, :harmonized_code
|
6
4
|
|
7
5
|
# @param abbr [String, Symbol] abbreviation eg. :PWI, :WD
|
8
6
|
# @param harmonized_code [String, Float, HarmonizedStageCode]
|
9
|
-
|
7
|
+
# @param config [Configuration]
|
8
|
+
def initialize(config:, abbr: nil, harmonized_code: nil)
|
9
|
+
@config = config
|
10
10
|
@abbr = abbr&.to_s
|
11
11
|
|
12
12
|
if harmonized_code
|
13
13
|
@harmonized_code = if harmonized_code.is_a?(HarmonizedStageCode)
|
14
14
|
harmonized_code
|
15
15
|
else
|
16
|
-
HarmonizedStageCode.new(harmonized_code)
|
16
|
+
HarmonizedStageCode.new(harmonized_code, config: config)
|
17
17
|
end
|
18
18
|
@abbr ||= lookup_abbr(@harmonized_code.stages)
|
19
19
|
end
|
20
20
|
|
21
21
|
if abbr
|
22
|
-
raise Errors::StageInvalidError, "#{abbr} is not valid stage" unless
|
22
|
+
raise Errors::StageInvalidError, "#{abbr} is not valid stage" unless config.stages["abbreviations"].key?(abbr.to_s)
|
23
23
|
|
24
|
-
@harmonized_code ||= HarmonizedStageCode.new(lookup_code(abbr))
|
24
|
+
@harmonized_code ||= HarmonizedStageCode.new(lookup_code(abbr), config: config)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -31,7 +31,7 @@ module Pubid::Core
|
|
31
31
|
def lookup_abbr(lookup_code)
|
32
32
|
lookup_code = lookup_code.first if lookup_code.is_a?(Array) && lookup_code.count == 1
|
33
33
|
|
34
|
-
|
34
|
+
config.stages["abbreviations"].each do |abbr, codes|
|
35
35
|
case codes
|
36
36
|
when Array
|
37
37
|
if lookup_code.is_a?(Array)
|
@@ -51,25 +51,25 @@ module Pubid::Core
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def lookup_code(lookup_abbr)
|
54
|
-
|
54
|
+
config.stages["abbreviations"][lookup_abbr.to_s]
|
55
55
|
end
|
56
56
|
|
57
|
-
def self.parse(stage)
|
57
|
+
def self.parse(stage, config:)
|
58
58
|
if /\A[\d.]+\z/.match?(stage)
|
59
|
-
Stage.new(harmonized_code: stage)
|
59
|
+
Stage.new(harmonized_code: stage, config: config)
|
60
60
|
else
|
61
61
|
raise Errors::StageInvalidError unless stage.is_a?(Symbol) || stage.is_a?(String) || stage.is_a?(Parslet::Slice)
|
62
62
|
|
63
|
-
Stage.new(abbr: stage.to_s)
|
63
|
+
Stage.new(abbr: stage.to_s, config: config)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
67
|
# @return [Boolean] true if stage exists
|
68
|
-
def self.has_stage?(stage)
|
68
|
+
def self.has_stage?(stage, config:)
|
69
69
|
if stage.is_a?(Stage)
|
70
|
-
|
70
|
+
config.stages["abbreviations"].key?(stage.abbr.to_sym)
|
71
71
|
else
|
72
|
-
|
72
|
+
config.stages["abbreviations"].key?(stage.to_s) || /\A[\d.]+\z/.match?(stage)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
@@ -80,7 +80,7 @@ module Pubid::Core
|
|
80
80
|
|
81
81
|
# Return stage name, eg. "Draft International Standard" for "DIS"
|
82
82
|
def name
|
83
|
-
|
83
|
+
config.stages["names"][abbr.to_s]
|
84
84
|
end
|
85
85
|
|
86
86
|
# @param with_prf [Boolean]
|
data/lib/pubid/core/type.rb
CHANGED
@@ -1,25 +1,30 @@
|
|
1
1
|
module Pubid::Core
|
2
2
|
class Type
|
3
|
-
attr_accessor :type
|
3
|
+
attr_accessor :type, :config
|
4
|
+
|
4
5
|
# Create new type
|
5
6
|
# @param type [Symbol]
|
6
|
-
def initialize(type =
|
7
|
+
def initialize(type = nil, config:)
|
8
|
+
@config = config
|
9
|
+
if type.nil?
|
10
|
+
type = @config.default_type.type[:key]
|
11
|
+
end
|
7
12
|
type = type.to_s.downcase.to_sym unless type.is_a?(Symbol)
|
8
13
|
|
9
|
-
raise Errors::WrongTypeError, "#{type} type is not available" unless
|
14
|
+
raise Errors::WrongTypeError, "#{type} type is not available" unless @config.type_names.key?(type)
|
10
15
|
|
11
16
|
@type = type
|
12
17
|
end
|
13
18
|
|
14
|
-
def self.parse(type_string)
|
15
|
-
|
16
|
-
return new(type) if values[:short] == type_string
|
19
|
+
def self.parse(type_string, config:)
|
20
|
+
config.type_names.each do |type, values|
|
21
|
+
return new(type, config: config) if values[:short] == type_string
|
17
22
|
end
|
18
23
|
raise Errors::ParseTypeError, "Cannot parse '#{type_string}' type"
|
19
24
|
end
|
20
25
|
|
21
26
|
def to_s(format = :short)
|
22
|
-
|
27
|
+
@config.type_names[type][format]
|
23
28
|
end
|
24
29
|
|
25
30
|
def ==(other)
|
@@ -30,8 +35,8 @@ module Pubid::Core
|
|
30
35
|
type == other.type
|
31
36
|
end
|
32
37
|
|
33
|
-
def self.has_type?(type)
|
34
|
-
|
38
|
+
def self.has_type?(type, config:)
|
39
|
+
config.type_names.any? do |_, v|
|
35
40
|
v[:short] == type
|
36
41
|
end
|
37
42
|
end
|
data/lib/pubid/core/version.rb
CHANGED
data/lib/pubid/core.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "parslet"
|
2
2
|
|
3
|
+
require_relative "core/configuration"
|
3
4
|
require_relative "core/errors"
|
4
5
|
require_relative "core/parser"
|
5
6
|
require_relative "core/type"
|
@@ -10,5 +11,6 @@ require_relative "core/transformer"
|
|
10
11
|
require_relative "core/renderer/base"
|
11
12
|
require_relative "core/renderer/urn"
|
12
13
|
require_relative "core/identifier"
|
14
|
+
require_relative "core/identifier/base"
|
13
15
|
require_relative "core/harmonized_stage_code"
|
14
16
|
require_relative "core/stage"
|
data/lib/pubid-core.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pubid-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.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: 2023-03-
|
11
|
+
date: 2023-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -66,10 +66,12 @@ files:
|
|
66
66
|
- lib/pubid-core.rb
|
67
67
|
- lib/pubid/core.rb
|
68
68
|
- lib/pubid/core/amendment.rb
|
69
|
+
- lib/pubid/core/configuration.rb
|
69
70
|
- lib/pubid/core/corrigendum.rb
|
70
71
|
- lib/pubid/core/errors.rb
|
71
72
|
- lib/pubid/core/harmonized_stage_code.rb
|
72
73
|
- lib/pubid/core/identifier.rb
|
74
|
+
- lib/pubid/core/identifier/base.rb
|
73
75
|
- lib/pubid/core/parser.rb
|
74
76
|
- lib/pubid/core/renderer/base.rb
|
75
77
|
- lib/pubid/core/renderer/urn.rb
|