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 +4 -4
- data/lib/pubid/core/identifier.rb +13 -5
- data/lib/pubid/core/renderer/base.rb +100 -0
- data/lib/pubid/core/renderer/urn.rb +72 -0
- data/lib/pubid/core/supplement.rb +10 -5
- data/lib/pubid/core/version.rb +1 -1
- data/lib/pubid/core.rb +2 -1
- metadata +4 -3
- data/lib/pubid/core/renderer.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64a6316ad207f1d35b7c91406887d54cdb839765ce1d7aed4fc4a2ce5c27b9ce
|
4
|
+
data.tar.gz: 9b54bb81e84b0e90a46e70ddbdf48c0cb73438e84c66c6e144bd010954f475ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
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|
|
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
|
-
|
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
|
-
|
3
|
+
include Comparable
|
4
|
+
attr_accessor :version, :number
|
4
5
|
|
5
|
-
def initialize(version:, number: nil
|
6
|
-
@version, @number
|
6
|
+
def initialize(version:, number: nil)
|
7
|
+
@version, @number = version&.to_i, number&.to_i
|
7
8
|
end
|
8
9
|
|
9
|
-
def
|
10
|
-
|
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
|
data/lib/pubid/core/version.rb
CHANGED
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.
|
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-
|
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
|
data/lib/pubid/core/renderer.rb
DELETED
@@ -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
|