pubid-core 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a7ed70ed2ab41dfc350391b2527d7772161b013b66ca0d97f9fe0588615a3ca5
4
- data.tar.gz: 7bbe6f3d057d94d8038b904cb2035e774f9d90b9afb039c55ba5acda0f242850
3
+ metadata.gz: b85bcef46a9327cb4c9ae474a84dea3b3986990082459b2f2bb37aa1c7578861
4
+ data.tar.gz: b7caa4de8dd3ac5c9e9b0d9bed0f3690207f48b5ec6366d4515a2ab138ab5b92
5
5
  SHA512:
6
- metadata.gz: 76d401e52d0a98935c9df29b45882199c3f7860d74f2c3c0b030c11bd54b46492087835e857c9a8c83204702beec69e4ab78060f796c24b124e306eb2c64e4dd
7
- data.tar.gz: a211cf01b2fd25645c4d672e0ccca74ea0f63e0cecd60fe68f1a063b724014d4c36975579534ea6efc7cd37bcb3d279c78789a7343fab808a32c297b7255d90b
6
+ metadata.gz: 70ab4b5c6c3393811c898e3d66dbb9c1f1f80b34a5f9337697748ef06a6ee5f3331828b731b776fedeb44379c7766dda901cca146e15ba62731b17258e7d7cb5
7
+ data.tar.gz: 518912efd803e1ee6cef6d189fd618f4f52300109d057b35f9061437a199488b74c09cf2cafbb9622fe9a49c4e8fd7a0cea96e4e2861f53b6014e06277444c80
@@ -0,0 +1,6 @@
1
+ module Pubid::Core
2
+ class Configuration
3
+ attr_accessor :stages, :default_type, :type_class, :types, :type_names
4
+
5
+ end
6
+ end
@@ -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) && DESCRIPTIONS.key?(stage_or_code)
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 STAGES_NAMES.key?(stage_or_code.to_s)
26
- ["#{STAGES_NAMES[stage_or_code.to_s]}.#{SUBSTAGES_NAMES[substage.to_s]}"]
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 DESCRIPTIONS.key?(stage)
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| DRAFT_STAGES.include?(s) || CANCELED_STAGES.include?(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| PUBLISHED_STAGES.include?(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
- DESCRIPTIONS[to_s]
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,141 +1,66 @@
1
1
  module Pubid::Core
2
- class Identifier
3
- attr_accessor :number, :publisher, :copublisher, :part,
4
- :type, :year, :edition, :language, :amendments,
5
- :corrigendums
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
- # Creates new identifier from options provided:
8
- # @param publisher [String] document's publisher, eg. "ISO"
9
- # @param copublisher [String,Array<String>] document's copublisher, eg. "IEC"
10
- # @param number [Integer] document's number, eg. "1234"
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
- if amendments
26
- @amendments = amendments.map do |amendment|
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
- if corrigendums
36
- @corrigendums = corrigendums.map do |corrigendum|
37
- if corrigendum.is_a?(Hash)
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
- @publisher = publisher.to_s
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
- # @return [String] Rendered URN identifier
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
- def get_params
61
- instance_variables.map { |var| [var.to_s.gsub("@", "").to_sym, instance_variable_get(var)] }.to_h
36
+ # @see Pubid::Identifier::Base.parse
37
+ def parse(*args)
38
+ Base.parse(*args)
62
39
  end
63
40
 
64
- # Render identifier using default renderer
65
- def to_s
66
- self.class.get_renderer_class.new(get_params).render
41
+ # Parse identifier from title
42
+ def set_config(config)
43
+ @config = config
67
44
  end
68
45
 
69
- class << self
70
- # Parses given identifier
71
- # @param code_or_params [String, Hash] code or hash from parser
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 get_amendment_class
111
- Amendment
112
- end
113
-
114
- def get_corrigendum_class
115
- Corrigendum
116
- end
117
-
118
- def get_renderer_class
119
- Renderer::Base
120
- end
46
+ def build_stage(**args)
47
+ Stage.new(config: @config, **args)
48
+ end
121
49
 
122
- def get_transformer_class
123
- Transformer
124
- end
50
+ def parse_stage(stage)
51
+ Stage.parse(stage, config: @config)
52
+ end
125
53
 
126
- # @return [Hash, nil] replacement patterns
127
- def get_update_codes
128
- nil
129
- end
54
+ def has_stage?(stage)
55
+ Stage.has_stage?(stage, config: @config)
56
+ end
130
57
 
131
- def update_old_code(code)
132
- return code unless get_update_codes
58
+ def build_type(type, **args)
59
+ @config.type_class.new(type, config: @config, **args)
60
+ end
133
61
 
134
- get_update_codes.each do |from, to|
135
- code = code.gsub(from.match?(/^\/.*\/$/) ? Regexp.new(from[1..-2]) : /^#{Regexp.escape(from)}$/, to)
136
- end
137
- code
138
- end
62
+ def build_harmonized_stage_code(stage_or_code, substage = "00")
63
+ HarmonizedStageCode.new(stage_or_code, substage, config: @config)
139
64
  end
140
65
  end
141
66
  end
@@ -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
- def initialize(abbr: nil, harmonized_code: nil)
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 STAGES.key?(abbr.to_s)
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
- STAGES.each do |abbr, codes|
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
- STAGES[lookup_abbr.to_s]
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
- STAGES.key?(stage.abbr.to_sym)
70
+ config.stages["abbreviations"].key?(stage.abbr.to_sym)
71
71
  else
72
- STAGES.key?(stage.to_s) || /\A[\d.]+\z/.match?(stage)
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
- STAGES_CONFIG["names"][abbr.to_s]
83
+ config.stages["names"][abbr.to_s]
84
84
  end
85
85
 
86
86
  # @param with_prf [Boolean]
@@ -0,0 +1,44 @@
1
+ module Pubid::Core
2
+ class Type
3
+ attr_accessor :type, :config
4
+
5
+ # Create new type
6
+ # @param type [Symbol]
7
+ def initialize(type = nil, config:)
8
+ @config = config
9
+ if type.nil?
10
+ type = @config.default_type.type[:key]
11
+ end
12
+ type = type.to_s.downcase.to_sym unless type.is_a?(Symbol)
13
+
14
+ raise Errors::WrongTypeError, "#{type} type is not available" unless @config.type_names.key?(type)
15
+
16
+ @type = type
17
+ end
18
+
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
22
+ end
23
+ raise Errors::ParseTypeError, "Cannot parse '#{type_string}' type"
24
+ end
25
+
26
+ def to_s(format = :short)
27
+ @config.type_names[type][format]
28
+ end
29
+
30
+ def ==(other)
31
+ return type == other if other.is_a?(Symbol)
32
+
33
+ return false if other.nil?
34
+
35
+ type == other.type
36
+ end
37
+
38
+ def self.has_type?(type, config:)
39
+ config.type_names.any? do |_, v|
40
+ v[:short] == type
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Core
3
- VERSION = "1.5.1".freeze
3
+ VERSION = "1.6.0".freeze
4
4
  end
5
5
  end
data/lib/pubid/core.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  require "parslet"
2
2
 
3
+ require_relative "core/configuration"
3
4
  require_relative "core/errors"
4
5
  require_relative "core/parser"
6
+ require_relative "core/type"
5
7
  require_relative "core/supplement"
6
8
  require_relative "core/amendment"
7
9
  require_relative "core/corrigendum"
@@ -9,5 +11,6 @@ require_relative "core/transformer"
9
11
  require_relative "core/renderer/base"
10
12
  require_relative "core/renderer/urn"
11
13
  require_relative "core/identifier"
14
+ require_relative "core/identifier/base"
12
15
  require_relative "core/harmonized_stage_code"
13
16
  require_relative "core/stage"
data/lib/pubid-core.rb CHANGED
@@ -1,3 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ module Pubid::Core
4
+ def self.configuration
5
+ @configuration ||= Configuration.new
6
+ end
7
+
8
+ def self.configure
9
+ yield(configuration)
10
+ end
11
+ end
12
+
3
13
  require_relative "pubid/core"
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.5.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-01-24 00:00:00.000000000 Z
11
+ date: 2023-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -66,16 +66,19 @@ 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
76
78
  - lib/pubid/core/stage.rb
77
79
  - lib/pubid/core/supplement.rb
78
80
  - lib/pubid/core/transformer.rb
81
+ - lib/pubid/core/type.rb
79
82
  - lib/pubid/core/version.rb
80
83
  homepage: https://github.com/metanorma/pubid-core
81
84
  licenses: