pubid-core 1.0.1 → 1.1.2
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 +10 -22
- data/lib/pubid/core/renderer/base.rb +3 -1
- data/lib/pubid/core/supplement.rb +14 -14
- data/lib/pubid/core/transformer.rb +42 -0
- data/lib/pubid/core/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 452665bfc83c23fed5563fb65e94b05e003491474be0572c10628838bf9bb8d4
|
4
|
+
data.tar.gz: 2c5282618c3bd1e04f26760791371205383191ab752878ac74ed32ac61ff6a2d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57ec902835845daa759d264308e0456851e202a791d0f2dac62c6fb5253202741420f47c9c45f2a2a7398a691e3c17a61c6189ab01f177cbf2b46eb47be15d08
|
7
|
+
data.tar.gz: ae150bad555421587020450b38fba534f1b94429ad7506ff6b32c0a0a4717be367ead10d5b5266259dbd4f9dfdc7a407e87acba122d7bd4f5562e643685c8a88
|
@@ -21,25 +21,9 @@ module Pubid::Core
|
|
21
21
|
def initialize(publisher:, number:, copublisher: nil, part: nil, type: nil,
|
22
22
|
year: nil, edition: nil, language: nil, amendments: nil,
|
23
23
|
corrigendums: nil)
|
24
|
-
if amendments
|
25
|
-
@amendments = if amendments.is_a?(Array)
|
26
|
-
amendments.map do |amendment|
|
27
|
-
self.class.get_amendment_class.new(**amendment)
|
28
|
-
end
|
29
|
-
else
|
30
|
-
[self.class.get_amendment_class.new(**amendments)]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
if corrigendums
|
34
|
-
@corrigendums = if corrigendums.is_a?(Array)
|
35
|
-
corrigendums.map do |corrigendum|
|
36
|
-
self.class.get_corrigendum_class.new(**corrigendum)
|
37
|
-
end
|
38
|
-
else
|
39
|
-
[self.class.get_corrigendum_class.new(**corrigendums)]
|
40
|
-
end
|
41
|
-
end
|
42
24
|
|
25
|
+
@amendments = amendments
|
26
|
+
@corrigendums = corrigendums
|
43
27
|
@publisher = publisher.to_s
|
44
28
|
@number = number
|
45
29
|
@copublisher = copublisher if copublisher
|
@@ -72,6 +56,13 @@ module Pubid::Core
|
|
72
56
|
def parse(code_or_params)
|
73
57
|
params = code_or_params.is_a?(String) ?
|
74
58
|
get_parser_class.new.parse(update_old_code(code_or_params)) : code_or_params
|
59
|
+
transform(params)
|
60
|
+
rescue Parslet::ParseFailed => failure
|
61
|
+
raise Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}"
|
62
|
+
end
|
63
|
+
|
64
|
+
# Transform parameters hash or array or hashes to identifier
|
65
|
+
def transform(params)
|
75
66
|
# Parslet returns an array when match any copublisher
|
76
67
|
# otherwise it's hash
|
77
68
|
if params.is_a?(Array)
|
@@ -80,7 +71,7 @@ module Pubid::Core
|
|
80
71
|
params.inject({}) do |r, i|
|
81
72
|
result = r
|
82
73
|
i.map {|k, v| get_transformer_class.new.apply(k => v).to_a.first }.each do |k, v|
|
83
|
-
result = result.merge(k => r.key?(k) ? [v, r[k]] : v)
|
74
|
+
result = result.merge(k => r.key?(k) ? [v, r[k]].flatten : v)
|
84
75
|
end
|
85
76
|
result
|
86
77
|
end
|
@@ -92,9 +83,6 @@ module Pubid::Core
|
|
92
83
|
end.to_h)
|
93
84
|
end
|
94
85
|
# merge values repeating keys into array (for copublishers)
|
95
|
-
|
96
|
-
rescue Parslet::ParseFailed => failure
|
97
|
-
raise Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}"
|
98
86
|
end
|
99
87
|
|
100
88
|
def get_amendment_class
|
@@ -24,7 +24,9 @@ module Pubid::Core::Renderer
|
|
24
24
|
end.compact.to_h
|
25
25
|
end
|
26
26
|
|
27
|
-
#
|
27
|
+
# Render identifier
|
28
|
+
# @param with_date [Boolean] include year in output
|
29
|
+
# @param with_language_code [:iso,:single] render document language as 2-letter ISO 639-1 language code or single code
|
28
30
|
def render(with_date: true, with_language_code: :iso)
|
29
31
|
params = prerender_params(@params,
|
30
32
|
{ with_date: with_date, with_language_code: with_language_code })
|
@@ -1,36 +1,36 @@
|
|
1
1
|
module Pubid::Core
|
2
2
|
class Supplement
|
3
3
|
include Comparable
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :number, :year
|
5
5
|
|
6
|
-
# Creates new supplement with provided
|
7
|
-
# @param version [Integer]
|
6
|
+
# Creates new supplement with provided update number and optional year
|
8
7
|
# @param number [Integer]
|
9
|
-
|
10
|
-
|
8
|
+
# @param year [Integer]
|
9
|
+
def initialize(number:, year: nil)
|
10
|
+
@number, @year = number&.to_i, year&.to_i
|
11
11
|
end
|
12
12
|
|
13
13
|
def <=>(other)
|
14
|
-
return 0 if
|
14
|
+
return 0 if year.nil? && other.year
|
15
15
|
|
16
|
-
return
|
16
|
+
return year <=> other.year if number == other.number
|
17
17
|
|
18
|
-
(
|
18
|
+
(number <=> other.number) || year <=> other.year
|
19
19
|
end
|
20
20
|
|
21
21
|
def render_pubid_number
|
22
|
-
if @
|
23
|
-
"#{@
|
22
|
+
if @year
|
23
|
+
"#{@number}:#{@year}"
|
24
24
|
else
|
25
|
-
"#{@
|
25
|
+
"#{@number}"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
def render_urn_number
|
30
|
-
if @
|
31
|
-
":#{@
|
30
|
+
if @year
|
31
|
+
":#{@year}:v#{@number}"
|
32
32
|
else
|
33
|
-
":#{@
|
33
|
+
":#{@number}:v1"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -1,4 +1,46 @@
|
|
1
1
|
module Pubid::Core
|
2
2
|
class Transformer < Parslet::Transform
|
3
|
+
class << self
|
4
|
+
def get_amendment_class
|
5
|
+
Amendment
|
6
|
+
end
|
7
|
+
|
8
|
+
def get_corrigendum_class
|
9
|
+
Corrigendum
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
super
|
15
|
+
|
16
|
+
rule(amendments: subtree(:amendments)) do |context|
|
17
|
+
if context[:amendments].is_a?(Array)
|
18
|
+
context[:amendments] = context[:amendments].map do |amendment|
|
19
|
+
self.class.get_amendment_class.new(number: amendment[:number], year: amendment[:year])
|
20
|
+
end
|
21
|
+
else
|
22
|
+
context[:amendments] =
|
23
|
+
[self.class.get_amendment_class.new(
|
24
|
+
number: context[:amendments][:number],
|
25
|
+
year: context[:amendments][:year])]
|
26
|
+
|
27
|
+
end
|
28
|
+
context
|
29
|
+
end
|
30
|
+
|
31
|
+
rule(corrigendums: subtree(:corrigendums)) do |context|
|
32
|
+
if context[:corrigendums].is_a?(Array)
|
33
|
+
context[:corrigendums] = context[:corrigendums].map do |corrigendum|
|
34
|
+
self.class.get_corrigendum_class.new(number: corrigendum[:number], year: corrigendum[:year])
|
35
|
+
end
|
36
|
+
else
|
37
|
+
context[:corrigendums] =
|
38
|
+
[self.class.get_corrigendum_class.new(
|
39
|
+
number: context[:corrigendums][:number],
|
40
|
+
year: context[:corrigendums][:year])]
|
41
|
+
end
|
42
|
+
context
|
43
|
+
end
|
44
|
+
end
|
3
45
|
end
|
4
46
|
end
|
data/lib/pubid/core/version.rb
CHANGED
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.
|
4
|
+
version: 1.1.2
|
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-
|
11
|
+
date: 2022-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|