pubid-core 0.1.5 → 0.1.8

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: 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