pubid-core 0.2.1 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8847ef40fe0ba41c09fa45dd46c2451d3d5f855a95528f740211a5558197b7b4
4
- data.tar.gz: 200ac6ed205bfd7a2f145995f070f45725fbcf20fc7e9ad70739781bbaf0e0fa
3
+ metadata.gz: 6fc24ad8424ccb4843c213b8642d558e4139671d9f7a302246f917510a20ad71
4
+ data.tar.gz: c8284af8dcb32ae4e13853ea8195e376769bbc745984f6639ee86780405f57d4
5
5
  SHA512:
6
- metadata.gz: 7a1c32702076a06496b53347c050db49b563543749a001f0876a1b0c4da61dee598bacb70a46bea8707ec6d97d9046a9f1bacaa89e3255d6ffb80c7ac0c69a80
7
- data.tar.gz: d426ab52f5f2e81dd90fdcbc435910f9e71ff4347d980260743975408d060b7e0b5462b8b990cd8248298b47716b1750a666b07d33ccc4562d2d2f3bb77cfc78
6
+ metadata.gz: 6dafa25189561f26dd3e3908294d4649af1c891175eb6b546ca8e95c90aafb4dfbde8b1fa4271ca8bb540ce3824947a7d7e08c10945853530615204692990504
7
+ data.tar.gz: d7b4857f481c5aac96491c83b70367ebc50d3dd3e9d2ee4956d2c5b825f210657419e3778d23f3c8fccb975acd444c051c6aebb93eec392143bd35747218f831
@@ -4,7 +4,23 @@ module Pubid::Core
4
4
  :type, :year, :edition, :language, :amendments,
5
5
  :corrigendums
6
6
 
7
- def initialize(amendments: nil, corrigendums: nil, **opts)
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>] document's amendments
18
+ # @param corrigendums [Array<Corrigendum>] 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)
8
24
  if amendments
9
25
  @amendments = if amendments.is_a?(Array)
10
26
  amendments.map do |amendment|
@@ -24,9 +40,17 @@ module Pubid::Core
24
40
  end
25
41
  end
26
42
 
27
- opts.each { |key, value| send("#{key}=", value.is_a?(Parslet::Slice) && value.to_s || value) }
43
+ @publisher = publisher.to_s
44
+ @number = number
45
+ @copublisher = copublisher if copublisher
46
+ @part = part.to_s if part
47
+ @type = type.to_s if type
48
+ @year = year.to_i if year
49
+ @edition = edition.to_i if edition
50
+ @language = language.to_s if language
28
51
  end
29
52
 
53
+ # @return [String] Rendered URN identifier
30
54
  def urn
31
55
  Renderer::Urn.new(get_params).render
32
56
  end
@@ -35,29 +59,19 @@ module Pubid::Core
35
59
  instance_variables.map { |var| [var.to_s.gsub("@", "").to_sym, instance_variable_get(var)] }.to_h
36
60
  end
37
61
 
62
+ # Render identifier using default renderer
38
63
  def to_s
39
64
  self.class.get_renderer_class.new(get_params).render
40
65
  end
41
66
 
42
67
  class << self
43
- def get_amendment_class
44
- Amendment
45
- end
46
-
47
- def get_corrigendum_class
48
- Corrigendum
49
- end
50
-
51
- def get_renderer_class
52
- Renderer::Base
53
- end
54
-
55
- def get_transformer_class
56
- Transformer
57
- end
58
-
68
+ # Parses given identifier
69
+ # @param code_or_params [String, Hash] code or hash from parser
70
+ # eg. "ISO 1234", { }
71
+ # @return [Pubid::Core::Identifier] identifier
59
72
  def parse(code_or_params)
60
- params = code_or_params.is_a?(String) ? get_parser_class.new.parse(code_or_params) : code_or_params
73
+ params = code_or_params.is_a?(String) ?
74
+ get_parser_class.new.parse(update_old_code(code_or_params)) : code_or_params
61
75
  # Parslet returns an array when match any copublisher
62
76
  # otherwise it's hash
63
77
  if params.is_a?(Array)
@@ -82,6 +96,36 @@ module Pubid::Core
82
96
  rescue Parslet::ParseFailed => failure
83
97
  raise Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}"
84
98
  end
99
+
100
+ def get_amendment_class
101
+ Amendment
102
+ end
103
+
104
+ def get_corrigendum_class
105
+ Corrigendum
106
+ end
107
+
108
+ def get_renderer_class
109
+ Renderer::Base
110
+ end
111
+
112
+ def get_transformer_class
113
+ Transformer
114
+ end
115
+
116
+ # @return [Hash, nil] replacement patterns
117
+ def get_update_codes
118
+ nil
119
+ end
120
+
121
+ def update_old_code(code)
122
+ return code unless get_update_codes
123
+
124
+ get_update_codes.each do |from, to|
125
+ code = code.gsub(from.match?(/^\/.*\/$/) ? Regexp.new(from[1..-2]) : /^#{Regexp.escape(from)}$/, to)
126
+ end
127
+ code
128
+ end
85
129
  end
86
130
  end
87
131
  end
@@ -41,5 +41,11 @@ module Pubid::Core
41
41
  rule(:year_month) do
42
42
  year_digits >> dash >> month_digits
43
43
  end
44
+
45
+ def array_to_str(array)
46
+ array.reduce(str(array.first)) do |acc, value|
47
+ acc | str(value)
48
+ end
49
+ end
44
50
  end
45
51
  end
@@ -34,9 +34,12 @@ module Pubid::Core::Renderer
34
34
  render_identifier(params)
35
35
  end
36
36
 
37
+ def render_base(params, prefix = "")
38
+ "%{publisher}%{copublisher}#{prefix} %{number}" % params
39
+ end
40
+
37
41
  def render_identifier(params)
38
- "%{publisher}%{copublisher}%{type}%{stage} %{number}%{part}%{iteration}"\
39
- "%{year}%{edition}%{amendments}%{corrigendums}%{language}" % params
42
+ render_base(params)
40
43
  end
41
44
 
42
45
  def render_copublisher(copublisher, _opts, _params)
@@ -58,21 +61,6 @@ module Pubid::Core::Renderer
58
61
  corrigendums.sort.map(&:render_pubid).join("+")
59
62
  end
60
63
 
61
- def render_type(type, opts, params)
62
- if params[:copublisher]
63
- " #{type}"
64
- else
65
- "/#{type}"
66
- end
67
- end
68
-
69
- def render_stage(stage, opts, params)
70
- if params[:copublisher]
71
- " #{stage}"
72
- else
73
- "/#{stage}"
74
- end
75
- end
76
64
 
77
65
  def render_part(part, opts, _params)
78
66
  "-#{part}"
@@ -89,13 +77,5 @@ module Pubid::Core::Renderer
89
77
  "(#{language})"
90
78
  end
91
79
  end
92
-
93
- def render_edition(edition, _opts, _params)
94
- " ED#{edition}"
95
- end
96
-
97
- def render_iteration(iteration, _opts, _params)
98
- ".#{iteration}"
99
- end
100
80
  end
101
81
  end
@@ -1,18 +1,12 @@
1
1
  module Pubid::Core::Renderer
2
2
  class Urn < Base
3
- STAGES = { PWI: 0,
4
- NP: 10,
5
- AWI: 20,
6
- WD: 20.20,
7
- CD: 30,
8
- DIS: 40,
9
- FDIS: 50,
10
- PRF: 50,
11
- IS: 60 }.freeze
3
+
4
+ def render_base(params)
5
+ "urn:iso:std:%{publisher}%{copublisher}%{type}:%{number}%{part}" % params
6
+ end
12
7
 
13
8
  def render_identifier(params)
14
- "urn:iso:std:%{publisher}%{copublisher}%{type}:%{number}%{part}%{stage}"\
15
- "%{urn_stage}%{corrigendum_stage}%{iteration}%{edition}%{amendments}%{corrigendums}%{language}" % params
9
+ render_base(params)
16
10
  end
17
11
 
18
12
  def render_publisher(publisher, _opts, _params)
@@ -20,7 +14,7 @@ module Pubid::Core::Renderer
20
14
  end
21
15
 
22
16
  def render_copublisher(copublisher, _opts, _params)
23
- return "-#{copublisher.downcase}" unless copublisher.is_a?(Array)
17
+ return "-#{copublisher.to_s.downcase}" unless copublisher.is_a?(Array)
24
18
 
25
19
  copublisher.map(&:to_s).sort.map do |copublisher|
26
20
  "-#{copublisher.downcase}"
@@ -47,15 +41,6 @@ module Pubid::Core::Renderer
47
41
  ":#{language}"
48
42
  end
49
43
 
50
- def render_stage(stage, _opts, _params)
51
- return ":stage-#{sprintf('%05.2f', stage)}" if stage.is_a?(Float)
52
-
53
- ":stage-#{sprintf('%05.2f', STAGES[stage.to_sym])}"
54
- end
55
-
56
- def render_urn_stage(stage, opts, params)
57
- render_stage(stage, opts, params)
58
- end
59
44
 
60
45
  def render_corrigendum_stage(stage, opts, params)
61
46
  render_stage(stage, opts, params)
@@ -3,6 +3,9 @@ module Pubid::Core
3
3
  include Comparable
4
4
  attr_accessor :version, :number
5
5
 
6
+ # Creates new supplement with provided version and optional number
7
+ # @param version [Integer]
8
+ # @param number [Integer]
6
9
  def initialize(version:, number: nil)
7
10
  @version, @number = version&.to_i, number&.to_i
8
11
  end
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Core
3
- VERSION = "0.2.1".freeze
3
+ VERSION = "1.0.1".freeze
4
4
  end
5
5
  end
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: 0.2.1
4
+ version: 1.0.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: 2022-06-22 00:00:00.000000000 Z
11
+ date: 2022-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake