pubid-core 0.1.5 → 0.1.8

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: 572e76f914359171e1ebd2e4894cd02fcfcc519311f687a5f616b701bf177a44
4
- data.tar.gz: 8e0328ff09f797795747a1df3de3484a37dc717c2e657e782c5d4310784044d0
3
+ metadata.gz: 64a6316ad207f1d35b7c91406887d54cdb839765ce1d7aed4fc4a2ce5c27b9ce
4
+ data.tar.gz: 9b54bb81e84b0e90a46e70ddbdf48c0cb73438e84c66c6e144bd010954f475ae
5
5
  SHA512:
6
- metadata.gz: 8a62af066a0517b83ba5440f26437bdea0251f485de3d3062c38921fbe9271490aec6c90aa2bacdda7ed5772f44113ca248dbd68035b1223c83a0a075476f4ae
7
- data.tar.gz: ab780a3f9b8e17abbb3554615ecb7f2c642573c6399fed11c6d93e76aa6459cc9980f433b9d4f904da306a3d6afbefede51b4c3021fa9ce70905be424c17f368
6
+ metadata.gz: b18da4c3bb53562b9556948b631be4525d62b9bd244f93889328c6359f73df90c1159f8a08ace0d641644255ac072c8378a48e3f720b909dce8cafa6d8a1deeb
7
+ data.tar.gz: be5beb7da4ef8741504375c6a044a3a400fda9edf4eac1c2042fa9ea3516d7656dbdb200156d6fbf77402d57106e974124f145046bc38627538651f2c2fe4944
@@ -27,12 +27,16 @@ module Pubid::Core
27
27
  opts.each { |key, value| send("#{key}=", value.is_a?(Array) && value || value.to_s) }
28
28
  end
29
29
 
30
+ def urn
31
+ Renderer::Urn.new(get_params).render
32
+ end
33
+
30
34
  def get_params
31
35
  instance_variables.map { |var| [var.to_s.gsub("@", "").to_sym, instance_variable_get(var)] }.to_h
32
36
  end
33
37
 
34
38
  def to_s
35
- self.class.get_renderer.new(get_params).render
39
+ self.class.get_renderer_class.new(get_params).render
36
40
  end
37
41
 
38
42
  class << self
@@ -44,8 +48,12 @@ module Pubid::Core
44
48
  Corrigendum
45
49
  end
46
50
 
47
- def get_renderer
48
- Renderer
51
+ def get_renderer_class
52
+ Renderer::Base
53
+ end
54
+
55
+ def get_transformer_class
56
+ Transformer
49
57
  end
50
58
 
51
59
  def parse(code_or_params)
@@ -57,7 +65,7 @@ module Pubid::Core
57
65
  **(
58
66
  params.inject({}) do |r, i|
59
67
  result = r
60
- i.map {|k, v| Transformer.new.apply(k => v).to_a.first }.each do |k, v|
68
+ i.map {|k, v| get_transformer_class.new.apply(k => v).to_a.first }.each do |k, v|
61
69
  result = result.merge(k => r.key?(k) ? [v, r[k]] : v)
62
70
  end
63
71
  result
@@ -66,7 +74,7 @@ module Pubid::Core
66
74
  )
67
75
  else
68
76
  new(**params.map do |k, v|
69
- Transformer.new.apply(k => v).to_a.first
77
+ get_transformer_class.new.apply(k => v).to_a.first
70
78
  end.to_h)
71
79
  end
72
80
  # merge values repeating keys into array (for copublishers)
@@ -0,0 +1,100 @@
1
+ module Pubid::Core::Renderer
2
+ class Base
3
+ attr_accessor :params
4
+
5
+ LANGUAGES = {
6
+ "ru" => "R",
7
+ "fr" => "F",
8
+ "en" => "E",
9
+ "ar" => "A",
10
+ }.freeze
11
+
12
+ def initialize(params)
13
+ @params = params
14
+ end
15
+
16
+ def prerender_params(params, opts)
17
+ params.map do |key, value|
18
+ if respond_to?("render_#{key}")
19
+ [key, send("render_#{key}", value, opts, params)]
20
+ else
21
+ [key, value]
22
+ end
23
+ end.to_h
24
+ end
25
+
26
+ # render from hash keys
27
+ def render(with_date: true, with_language_code: :iso)
28
+ params = prerender_params(@params,
29
+ { with_date: with_date, with_language_code: with_language_code })
30
+ # render empty string when the key is not exist
31
+ params.default = ""
32
+
33
+ render_identifier(params)
34
+ end
35
+
36
+ def render_identifier(params)
37
+ "%{publisher}%{copublisher}%{type}%{stage} %{number}%{part}%{iteration}"\
38
+ "%{year}%{edition}%{amendments}%{corrigendums}%{language}" % params
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
+ "/#{copublisher.gsub('-', '/')}"
46
+ end.join
47
+ else
48
+ "/#{copublisher}"
49
+ end
50
+ end
51
+
52
+ def render_amendments(amendments, _opts, _params)
53
+ amendments.sort.map(&:render_pubid).join("+")
54
+ end
55
+
56
+ def render_corrigendums(corrigendums, _opts, _params)
57
+ corrigendums.sort.map(&:render_pubid).join("+")
58
+ end
59
+
60
+ def render_type(type, opts, params)
61
+ if params[:copublisher]
62
+ " #{type}"
63
+ else
64
+ "/#{type}"
65
+ end
66
+ end
67
+
68
+ def render_stage(stage, opts, params)
69
+ if params[:copublisher]
70
+ " #{stage}"
71
+ else
72
+ "/#{stage}"
73
+ end
74
+ end
75
+
76
+ def render_part(part, opts, _params)
77
+ "-#{part}"
78
+ end
79
+
80
+ def render_year(year, opts, _params)
81
+ opts[:with_date] && ":#{year}" || ""
82
+ end
83
+
84
+ def render_language(language, opts, _params)
85
+ if opts[:with_language_code] == :single
86
+ "(#{LANGUAGES[language]})"
87
+ else
88
+ "(#{language})"
89
+ end
90
+ end
91
+
92
+ def render_edition(edition, _opts, _params)
93
+ " ED#{edition}"
94
+ end
95
+
96
+ def render_iteration(iteration, _opts, _params)
97
+ ".#{iteration}"
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,72 @@
1
+ module Pubid::Core::Renderer
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
12
+
13
+ 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
16
+ end
17
+
18
+ def render_publisher(publisher, _opts, _params)
19
+ publisher.downcase
20
+ end
21
+
22
+ def render_copublisher(copublisher, _opts, _params)
23
+ return "-#{copublisher.downcase}" unless copublisher.is_a?(Array)
24
+
25
+ copublisher.map(&:to_s).sort.map do |copublisher|
26
+ "-#{copublisher.downcase}"
27
+ end.join
28
+ end
29
+
30
+ def render_edition(edition, _opts, _params)
31
+ ":ed-#{edition}"
32
+ end
33
+
34
+ def render_type(type, _, _)
35
+ ":#{type.downcase}"
36
+ end
37
+
38
+ def render_amendments(amendments, _opts, _params)
39
+ amendments&.map(&:render_urn)&.join || ""
40
+ end
41
+
42
+ def render_corrigendums(corrigendums, _opts, _params)
43
+ corrigendums&.map(&:render_urn)&.join || ""
44
+ end
45
+
46
+ def render_language(language, _opts, _params)
47
+ ":#{language}"
48
+ end
49
+
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
+
60
+ def render_corrigendum_stage(stage, opts, params)
61
+ render_stage(stage, opts, params)
62
+ end
63
+
64
+ def render_iteration(iteration, _opts, params)
65
+ ".v#{iteration}" if params[:stage]
66
+ end
67
+
68
+ def render_part(part, _opts, _params)
69
+ ":-#{part}"
70
+ end
71
+ end
72
+ end
@@ -1,13 +1,18 @@
1
1
  module Pubid::Core
2
2
  class Supplement
3
- attr_accessor :version, :number, :stage
3
+ include Comparable
4
+ attr_accessor :version, :number
4
5
 
5
- def initialize(version:, number: nil, stage: nil)
6
- @version, @number, @stage = version, number, stage
6
+ def initialize(version:, number: nil)
7
+ @version, @number = version&.to_i, number&.to_i
7
8
  end
8
9
 
9
- def ==(other)
10
- other.version == version && (number.nil? || other.number == number) && (stage.nil? || other.stage == stage)
10
+ def <=>(other)
11
+ return 0 if number.nil? && other.number
12
+
13
+ return number <=> other.number if version == other.version
14
+
15
+ (version <=> other.version) || number <=> other.number
11
16
  end
12
17
 
13
18
  def render_pubid_number
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Core
3
- VERSION = "0.1.5".freeze
3
+ VERSION = "0.1.8".freeze
4
4
  end
5
5
  end
data/lib/pubid/core.rb CHANGED
@@ -6,5 +6,6 @@ require_relative "core/supplement"
6
6
  require_relative "core/amendment"
7
7
  require_relative "core/corrigendum"
8
8
  require_relative "core/transformer"
9
- require_relative "core/renderer"
9
+ require_relative "core/renderer/base"
10
+ require_relative "core/renderer/urn"
10
11
  require_relative "core/identifier"
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.1.5
4
+ version: 0.1.8
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-07 00:00:00.000000000 Z
11
+ date: 2022-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -70,7 +70,8 @@ files:
70
70
  - lib/pubid/core/errors.rb
71
71
  - lib/pubid/core/identifier.rb
72
72
  - lib/pubid/core/parser.rb
73
- - lib/pubid/core/renderer.rb
73
+ - lib/pubid/core/renderer/base.rb
74
+ - lib/pubid/core/renderer/urn.rb
74
75
  - lib/pubid/core/supplement.rb
75
76
  - lib/pubid/core/transformer.rb
76
77
  - lib/pubid/core/version.rb
@@ -1,15 +0,0 @@
1
- module Pubid::Core
2
- class Renderer
3
- attr_accessor :params
4
-
5
- def initialize(params)
6
- @params = params
7
- @params.default = ""
8
- end
9
- # render from hash keys
10
- def render
11
- "%{publisher}%{type}%{stage} %{number}%{part}%{iteration}"\
12
- "%{edition}%{supplements}%{language}" % @params
13
- end
14
- end
15
- end