relaton-iso-bib 1.0.1 → 1.4.0
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/.github/workflows/ubuntu.yml +1 -0
- data/.rubocop.yml +2 -2
- data/README.adoc +145 -217
- data/grammars/biblio.rng +36 -6
- data/grammars/isodoc.rng +574 -22
- data/grammars/isostandard.rng +13 -2
- data/lib/relaton_iso_bib/editorial_group.rb +45 -8
- data/lib/relaton_iso_bib/hash_converter.rb +2 -69
- data/lib/relaton_iso_bib/ics.rb +14 -1
- data/lib/relaton_iso_bib/iso_bibliographic_item.rb +24 -164
- data/lib/relaton_iso_bib/structured_identifier.rb +34 -10
- data/lib/relaton_iso_bib/version.rb +1 -1
- data/lib/relaton_iso_bib/xml_parser.rb +5 -12
- data/relaton_iso_bib.gemspec +3 -2
- metadata +9 -10
- data/lib/relaton_iso_bib/typed_title_string.rb +0 -32
data/grammars/isostandard.rng
CHANGED
@@ -91,6 +91,12 @@
|
|
91
91
|
</define>
|
92
92
|
<define name="sections">
|
93
93
|
<element name="sections">
|
94
|
+
<zeroOrMore>
|
95
|
+
<choice>
|
96
|
+
<ref name="note"/>
|
97
|
+
<ref name="admonition"/>
|
98
|
+
</choice>
|
99
|
+
</zeroOrMore>
|
94
100
|
<ref name="clause"/>
|
95
101
|
<optional>
|
96
102
|
<choice>
|
@@ -247,7 +253,7 @@
|
|
247
253
|
<define name="preface">
|
248
254
|
<element name="preface">
|
249
255
|
<optional>
|
250
|
-
<ref name="
|
256
|
+
<ref name="abstract"/>
|
251
257
|
</optional>
|
252
258
|
<ref name="foreword"/>
|
253
259
|
<optional>
|
@@ -263,6 +269,8 @@
|
|
263
269
|
<value>publicly-available-specification</value>
|
264
270
|
<value>international-workshop-agreement</value>
|
265
271
|
<value>guide</value>
|
272
|
+
<value>amendment</value>
|
273
|
+
<value>technical-corrigendum</value>
|
266
274
|
</choice>
|
267
275
|
</define>
|
268
276
|
<define name="structuredidentifier">
|
@@ -354,6 +362,9 @@
|
|
354
362
|
<data type="boolean"/>
|
355
363
|
</attribute>
|
356
364
|
</optional>
|
365
|
+
<optional>
|
366
|
+
<attribute name="number"/>
|
367
|
+
</optional>
|
357
368
|
<optional>
|
358
369
|
<attribute name="subsequence"/>
|
359
370
|
</optional>
|
@@ -510,7 +521,7 @@
|
|
510
521
|
</attribute>
|
511
522
|
</optional>
|
512
523
|
<oneOrMore>
|
513
|
-
<ref name="
|
524
|
+
<ref name="BasicBlock"/>
|
514
525
|
</oneOrMore>
|
515
526
|
</element>
|
516
527
|
</define>
|
@@ -33,7 +33,7 @@ module RelatonIsoBib
|
|
33
33
|
# @option workgroup [Integer] :number
|
34
34
|
#
|
35
35
|
# @param secretariat [String, NilClass]
|
36
|
-
def initialize(technical_committee:, **args)
|
36
|
+
def initialize(technical_committee:, **args) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/AbcSize
|
37
37
|
@technical_committee = technical_committee.map do |tc|
|
38
38
|
tc.is_a?(Hash) ? IsoSubgroup.new(tc) : tc
|
39
39
|
end
|
@@ -46,11 +46,15 @@ module RelatonIsoBib
|
|
46
46
|
@secretariat = args[:secretariat]
|
47
47
|
end
|
48
48
|
|
49
|
-
#
|
49
|
+
# @return [true]
|
50
|
+
def presence?
|
51
|
+
true
|
52
|
+
end
|
50
53
|
|
51
54
|
# @param builder [Nokogiri::XML::Builder]
|
52
|
-
def to_xml(builder)
|
53
|
-
return unless technical_committee || subcommittee || workgroup ||
|
55
|
+
def to_xml(builder) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize, Metrics/MethodLength
|
56
|
+
return unless technical_committee || subcommittee || workgroup ||
|
57
|
+
secretariat
|
54
58
|
|
55
59
|
builder.editorialgroup do
|
56
60
|
technical_committee.each do |tc|
|
@@ -65,16 +69,39 @@ module RelatonIsoBib
|
|
65
69
|
builder.secretariat secretariat if secretariat
|
66
70
|
end
|
67
71
|
end
|
68
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
69
72
|
|
70
73
|
# @return [Hash]
|
71
|
-
def to_hash
|
72
|
-
hash = {
|
73
|
-
|
74
|
+
def to_hash # rubocop:disable Metrics/AbcSize
|
75
|
+
hash = {
|
76
|
+
"technical_committee" => single_element_array(technical_committee),
|
77
|
+
}
|
78
|
+
if subcommittee&.any?
|
79
|
+
hash["subcommittee"] = single_element_array(subcommittee)
|
80
|
+
end
|
74
81
|
hash["workgroup"] = single_element_array(workgroup) if workgroup&.any?
|
75
82
|
hash["secretariat"] = secretariat if secretariat
|
76
83
|
hash
|
77
84
|
end
|
85
|
+
|
86
|
+
# @param prefix [String]
|
87
|
+
# @return [String]
|
88
|
+
def to_asciibib(prefix = "") # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
89
|
+
pref = prefix.empty? ? prefix : prefix + "."
|
90
|
+
pref += "editorialgroup"
|
91
|
+
out = ""
|
92
|
+
technical_committee.each do |tc|
|
93
|
+
out += tc.to_asciibib "#{pref}.technical_committee",
|
94
|
+
technical_committee.size
|
95
|
+
end
|
96
|
+
subcommittee.each do |sc|
|
97
|
+
out += sc.to_asciibib "#{pref}.subcommittee", subcommittee.size
|
98
|
+
end
|
99
|
+
workgroup.each do |wg|
|
100
|
+
out += wg.to_asciibib "#{pref}.workgroup", workgroup.size
|
101
|
+
end
|
102
|
+
out += "#{pref}.secretariat:: #{secretariat}\n" if secretariat
|
103
|
+
out
|
104
|
+
end
|
78
105
|
end
|
79
106
|
|
80
107
|
# ISO subgroup.
|
@@ -111,5 +138,15 @@ module RelatonIsoBib
|
|
111
138
|
hash["number"] = number if number
|
112
139
|
hash
|
113
140
|
end
|
141
|
+
|
142
|
+
# @param prefix [String]
|
143
|
+
# @param count [Integer] number of the elements
|
144
|
+
def to_asciibib(prefix, count = 1)
|
145
|
+
out = count > 1 ? "#{prefix}::\n" : ""
|
146
|
+
out += "#{prefix}.type:: #{type}\n" if type
|
147
|
+
out += "#{prefix}.number:: #{number}\n" if number
|
148
|
+
out += "#{prefix}.name:: #{name}\n"
|
149
|
+
out
|
150
|
+
end
|
114
151
|
end
|
115
152
|
end
|
@@ -1,75 +1,8 @@
|
|
1
1
|
module RelatonIsoBib
|
2
2
|
class HashConverter < RelatonBib::HashConverter
|
3
3
|
class << self
|
4
|
-
# @override RelatonBib::HashConverter.hash_to_bib
|
5
|
-
# @param args [Hash]
|
6
|
-
# @param nested [TrueClass, FalseClass]
|
7
|
-
# @return [Hash]
|
8
|
-
def hash_to_bib(args, nested = false)
|
9
|
-
ret = super
|
10
|
-
return if ret.nil?
|
11
|
-
|
12
|
-
editorialgroup_hash_to_bib(ret)
|
13
|
-
ics_hash_to_bib(ret)
|
14
|
-
structuredidentifier_hash_to_bib(ret)
|
15
|
-
ret
|
16
|
-
end
|
17
|
-
|
18
|
-
def split_title(content, lang = "en", script = "Latn")
|
19
|
-
titles = content&.split(/ (?:--|—|–) /)
|
20
|
-
case titles&.size
|
21
|
-
when nil, 0
|
22
|
-
intro, main, part = nil, "", nil
|
23
|
-
when 1
|
24
|
-
intro, main, part = nil, titles[0], nil
|
25
|
-
when 2
|
26
|
-
if /^(Part|Partie) \d+:/ =~ titles[1]
|
27
|
-
intro, main, part = nil, titles[0], titles[1]
|
28
|
-
else
|
29
|
-
intro, main, part = titles[0], titles[1], nil
|
30
|
-
end
|
31
|
-
when 3
|
32
|
-
intro, main, part = titles[0], titles[1], titles[2]
|
33
|
-
else
|
34
|
-
intro, main, part = titles[0], titles[1], titles[2..-1]&.join(" -- ")
|
35
|
-
end
|
36
|
-
{
|
37
|
-
title_intro: intro,
|
38
|
-
title_main: main,
|
39
|
-
title_part: part,
|
40
|
-
language: lang,
|
41
|
-
script: script,
|
42
|
-
}
|
43
|
-
end
|
44
|
-
|
45
4
|
private
|
46
5
|
|
47
|
-
#
|
48
|
-
# Ovverides superclass's method
|
49
|
-
#
|
50
|
-
# @param ret [Hash]
|
51
|
-
def title_hash_to_bib(ret)
|
52
|
-
return unless ret[:title]
|
53
|
-
|
54
|
-
ret[:title] = array(ret[:title])
|
55
|
-
ret[:title] = ret[:title].reduce([]) do |a, t|
|
56
|
-
if t.is_a?(String)
|
57
|
-
a << split_title(t)
|
58
|
-
elsif t.is_a?(Hash) && t[:type]
|
59
|
-
idx = a.index { |i| i[:language] == t[:language] }
|
60
|
-
title_key = t[:type].sub("-", "_").to_sym
|
61
|
-
if idx
|
62
|
-
a[idx][title_key] = t[:content]
|
63
|
-
a
|
64
|
-
else
|
65
|
-
a << { title_key => t[:content], language: t[:language], script: t[:script] }
|
66
|
-
end
|
67
|
-
elsif t.is_a?(Hash) && t[:content]
|
68
|
-
a << split_title(t[:content], t[:language], t[:script])
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
6
|
#
|
74
7
|
# Ovverides superclass's method
|
75
8
|
#
|
@@ -83,9 +16,9 @@ module RelatonIsoBib
|
|
83
16
|
# Ovverides superclass's method
|
84
17
|
#
|
85
18
|
# @param title [Hash]
|
86
|
-
# @return [
|
19
|
+
# @return [RelatonBib::TypedTitleString]
|
87
20
|
def typed_title_strig(title)
|
88
|
-
TypedTitleString.new title
|
21
|
+
RelatonBib::TypedTitleString.new title
|
89
22
|
end
|
90
23
|
|
91
24
|
# @param ret [Hash]
|
data/lib/relaton_iso_bib/ics.rb
CHANGED
@@ -7,7 +7,8 @@ module RelatonIsoBib
|
|
7
7
|
# @param subgroup [Integer, NilClass]
|
8
8
|
def initialize(code = nil, field: nil, group: nil, subgroup: nil)
|
9
9
|
unless code || field
|
10
|
-
raise ArgumentError,
|
10
|
+
raise ArgumentError,
|
11
|
+
"wrong arguments (should be string or { fieldcode: [String] }"
|
11
12
|
end
|
12
13
|
|
13
14
|
field, group, subgroup = code.split "." if code
|
@@ -28,5 +29,17 @@ module RelatonIsoBib
|
|
28
29
|
hash["code"] = code if code
|
29
30
|
hash
|
30
31
|
end
|
32
|
+
|
33
|
+
# @param prefix [String]
|
34
|
+
# @param count [Integer] number of ICS
|
35
|
+
# @return [String]
|
36
|
+
def to_asciibib(prefix = "", count = 1)
|
37
|
+
pref = prefix.empty? ? prefix : prefix + "."
|
38
|
+
pref += "ics"
|
39
|
+
out = count > 1 ? "#{pref}::\n" : ""
|
40
|
+
out += "#{pref}.code:: #{code}\n"
|
41
|
+
out += "#{pref}.description:: #{description}\n"
|
42
|
+
out
|
43
|
+
end
|
31
44
|
end
|
32
45
|
end
|
@@ -3,7 +3,6 @@
|
|
3
3
|
require "nokogiri"
|
4
4
|
require "isoics"
|
5
5
|
require "relaton_bib"
|
6
|
-
require "relaton_iso_bib/typed_title_string"
|
7
6
|
require "relaton_iso_bib/editorial_group"
|
8
7
|
require "relaton_iso_bib/xml_parser"
|
9
8
|
require "relaton_iso_bib/structured_identifier"
|
@@ -23,16 +22,16 @@ module RelatonIsoBib
|
|
23
22
|
# Bibliographic item.
|
24
23
|
class IsoBibliographicItem < RelatonBib::BibliographicItem
|
25
24
|
TYPES = %w[
|
26
|
-
standard
|
27
25
|
international-standard technical-specification technical-report
|
28
26
|
publicly-available-specification international-workshop-agreement guide
|
27
|
+
amendment technical-corrigendum
|
29
28
|
].freeze
|
30
29
|
|
31
30
|
# @return [RelatonIsoBib::StructuredIdentifier]
|
32
31
|
attr_reader :structuredidentifier
|
33
32
|
|
34
33
|
# @!attribute [r] title
|
35
|
-
# @return [Array<
|
34
|
+
# @return [Array<RelatonBib::TypedTitleString>]
|
36
35
|
|
37
36
|
# @return [String, NilClass]
|
38
37
|
attr_reader :doctype, :stagename
|
@@ -43,9 +42,6 @@ module RelatonIsoBib
|
|
43
42
|
# @return [Array<RelatonIsoBib::Ics>]
|
44
43
|
attr_reader :ics
|
45
44
|
|
46
|
-
# @return [TrueClass, FalseClass, NilClass]
|
47
|
-
attr_accessor :all_parts
|
48
|
-
|
49
45
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
50
46
|
# rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
|
51
47
|
|
@@ -76,7 +72,7 @@ module RelatonIsoBib
|
|
76
72
|
# @option title [String] :language
|
77
73
|
# @option title [String] :script
|
78
74
|
#
|
79
|
-
# @param editorialgroup [Hash, RelatonIsoBib::EditorialGroup
|
75
|
+
# @param editorialgroup [Hash, RelatonIsoBib::EditorialGroup]
|
80
76
|
# @option workgrpup [String] :name
|
81
77
|
# @option workgrpup [String] :abbreviation
|
82
78
|
# @option workgrpup [String] :url
|
@@ -128,24 +124,23 @@ module RelatonIsoBib
|
|
128
124
|
# @raise [ArgumentError]
|
129
125
|
def initialize(**args)
|
130
126
|
check_doctype args[:doctype]
|
131
|
-
# check_language args.fetch(:language, [])
|
132
|
-
# check_script args.fetch(:script, [])
|
133
127
|
|
134
128
|
super_args = args.select do |k|
|
135
129
|
%i[id docnumber language script docstatus date abstract contributor
|
136
130
|
edition version relation biblionote series medium place copyright
|
137
131
|
link fetched docid formattedref extent accesslocation classification
|
138
|
-
validity keyword].include? k
|
132
|
+
validity doctype keyword].include? k
|
139
133
|
end
|
140
134
|
super super_args
|
141
135
|
|
142
136
|
@type = args[:type] || "standard"
|
143
137
|
|
144
|
-
@title = args.fetch(:title, []).
|
138
|
+
@title = args.fetch(:title, []).map do |t|
|
145
139
|
if t.is_a? Hash
|
146
|
-
a + typed_titles(t)
|
140
|
+
# a + typed_titles(t)
|
141
|
+
RelatonBib::TypedTitleString.new t
|
147
142
|
else
|
148
|
-
|
143
|
+
t
|
149
144
|
end
|
150
145
|
end
|
151
146
|
|
@@ -157,92 +152,14 @@ module RelatonIsoBib
|
|
157
152
|
end
|
158
153
|
|
159
154
|
@structuredidentifier = args[:structuredidentifier]
|
160
|
-
@doctype
|
155
|
+
# @doctype = args[:doctype] || "international-standard"
|
161
156
|
@ics = args.fetch(:ics, []).map { |i| i.is_a?(Hash) ? Ics.new(i) : i }
|
162
157
|
@stagename = args[:stagename]
|
163
158
|
@id_attribute = true
|
164
159
|
end
|
165
|
-
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
166
|
-
# rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
|
167
|
-
|
168
|
-
def disable_id_attribute
|
169
|
-
@id_attribute = false
|
170
|
-
end
|
171
|
-
|
172
|
-
# remove title part components and abstract
|
173
|
-
def to_all_parts
|
174
|
-
me = deep_clone
|
175
|
-
me.disable_id_attribute
|
176
|
-
me.relation << RelatonBib::DocumentRelation.new(
|
177
|
-
type: "instance", bibitem: self,
|
178
|
-
)
|
179
|
-
me.language.each do |l|
|
180
|
-
me.title.delete_if { |t| t.type == "title-part" }
|
181
|
-
ttl = me.title.select { |t| t.type != "main" && t.title.language.include?(l) }
|
182
|
-
tm_en = ttl.map { |t| t.title.content }.join " – "
|
183
|
-
me.title.detect { |t| t.type == "main" && t.title.language.include?(l) }&.title&.content = tm_en
|
184
|
-
end
|
185
|
-
me.abstract = []
|
186
|
-
me.docidentifier.each(&:remove_part)
|
187
|
-
me.docidentifier.each(&:all_parts)
|
188
|
-
me.structuredidentifier.remove_part
|
189
|
-
me.structuredidentifier.all_parts
|
190
|
-
me.docidentifier.each &:remove_date
|
191
|
-
me.structuredidentifier&.remove_date
|
192
|
-
me.all_parts = true
|
193
|
-
me
|
194
|
-
end
|
195
|
-
|
196
|
-
def abstract=(value)
|
197
|
-
@abstract = value
|
198
|
-
end
|
199
|
-
|
200
|
-
def deep_clone
|
201
|
-
dump = Marshal.dump self
|
202
|
-
Marshal.load dump
|
203
|
-
end
|
204
|
-
|
205
|
-
# convert ISO:yyyy reference to reference to most recent
|
206
|
-
# instance of reference, removing date-specific infomration:
|
207
|
-
# date of publication, abstracts. Make dated reference Instance relation
|
208
|
-
# of the redacated document
|
209
|
-
def to_most_recent_reference
|
210
|
-
me = deep_clone
|
211
|
-
self.disable_id_attribute
|
212
|
-
me.relation << RelatonBib::DocumentRelation.new(type: "instance", bibitem: self)
|
213
|
-
me.abstract = []
|
214
|
-
me.date = []
|
215
|
-
me.docidentifier.each &:remove_date
|
216
|
-
me.structuredidentifier&.remove_date
|
217
|
-
me.id&.sub! /-[12]\d\d\d/, ""
|
218
|
-
me
|
219
|
-
end
|
220
|
-
|
221
|
-
# @param lang [String] language code Iso639
|
222
|
-
# @return [Array<RelatonIsoBib::TypedTitleString>]
|
223
|
-
def title(lang: nil)
|
224
|
-
if lang
|
225
|
-
@title.select { |t| t.title.language.include? lang }
|
226
|
-
else
|
227
|
-
@title
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
# @param type [Symbol] type of url, can be :src/:obp/:rss
|
232
|
-
# @return [String]
|
233
|
-
def url(type = :src)
|
234
|
-
@link.detect { |s| s.type == type.to_s }.content.to_s
|
235
|
-
end
|
236
160
|
|
237
161
|
# @return [String]
|
238
|
-
def to_xml(builder = nil, **opts
|
239
|
-
if opts[:note]&.any?
|
240
|
-
opts.fetch(:note, []).each do |n|
|
241
|
-
@biblionote << RelatonBib::BiblioNote.new(
|
242
|
-
content: n[:text], type: n[:type], format: "text/plain",
|
243
|
-
)
|
244
|
-
end
|
245
|
-
end
|
162
|
+
def to_xml(builder = nil, **opts)
|
246
163
|
super builder, **opts do |b|
|
247
164
|
if opts[:bibdata] && (doctype || respond_to?(:committee) && committee ||
|
248
165
|
editorialgroup || ics.any? || structuredidentifier || stagename ||
|
@@ -250,7 +167,7 @@ module RelatonIsoBib
|
|
250
167
|
b.ext do
|
251
168
|
b.doctype doctype if doctype
|
252
169
|
b.docsubtype docsubtype if respond_to?(:docsubtype) && docsubtype
|
253
|
-
# GB renders gbcommittee elements istead of an editorialgroup
|
170
|
+
# GB renders gbcommittee elements istead of an editorialgroup
|
254
171
|
if respond_to? :committee
|
255
172
|
committee&.to_xml b
|
256
173
|
else
|
@@ -265,36 +182,26 @@ module RelatonIsoBib
|
|
265
182
|
end
|
266
183
|
end
|
267
184
|
|
185
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
186
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
187
|
+
|
268
188
|
# @return [Hash]
|
269
189
|
def to_hash
|
270
190
|
hash = super
|
271
|
-
hash["editorialgroup"] = editorialgroup.to_hash if editorialgroup
|
272
|
-
hash["ics"] = single_element_array(ics) if ics&.any?
|
273
|
-
hash["structuredidentifier"] = structuredidentifier.to_hash if structuredidentifier
|
274
|
-
hash["doctype"] = doctype if doctype
|
275
191
|
hash["stagename"] = stagename if stagename
|
276
192
|
hash
|
277
193
|
end
|
278
194
|
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
# end
|
288
|
-
# end
|
289
|
-
# end
|
195
|
+
# @param prefix [String]
|
196
|
+
# @return [String]
|
197
|
+
def to_asciibib(prefix = "")
|
198
|
+
pref = prefix.empty? ? prefix : prefix + "."
|
199
|
+
out = super
|
200
|
+
out += "#{pref}stagename:: #{stagename}\n" if stagename
|
201
|
+
out
|
202
|
+
end
|
290
203
|
|
291
|
-
|
292
|
-
# @raise ArgumentError
|
293
|
-
# def check_script(script)
|
294
|
-
# script.each do |scr|
|
295
|
-
# raise ArgumentError, "invalid script: #{scr}" unless scr == "Latn"
|
296
|
-
# end
|
297
|
-
# end
|
204
|
+
private
|
298
205
|
|
299
206
|
# @param doctype [String]
|
300
207
|
# @raise ArgumentError
|
@@ -304,64 +211,17 @@ module RelatonIsoBib
|
|
304
211
|
end
|
305
212
|
end
|
306
213
|
|
307
|
-
# rubocop:disable Metrics/
|
308
|
-
|
309
|
-
# @param title [Hash]
|
310
|
-
# @option title [String] :title_intro
|
311
|
-
# @option title [String] :title_main
|
312
|
-
# @option title [String] :title_part
|
313
|
-
# @option title [String] :language
|
314
|
-
# @option title [String] :script
|
315
|
-
# @return [Array<RelatonIsoBib::TypedTitleStrig>]
|
316
|
-
def typed_titles(title)
|
317
|
-
titles = []
|
318
|
-
if title[:title_intro]
|
319
|
-
titles << TypedTitleString.new(
|
320
|
-
type: "title-intro", content: title[:title_intro],
|
321
|
-
language: title[:language], script: title[:script], format: "text/plain",
|
322
|
-
)
|
323
|
-
end
|
324
|
-
|
325
|
-
if title[:title_main]
|
326
|
-
titles << TypedTitleString.new(
|
327
|
-
type: "title-main", content: title[:title_main],
|
328
|
-
language: title[:language], script: title[:script], format: "text/plain",
|
329
|
-
)
|
330
|
-
end
|
331
|
-
|
332
|
-
if title[:title_part]
|
333
|
-
titles << TypedTitleString.new(
|
334
|
-
type: "title-part", content: title[:title_part],
|
335
|
-
language: title[:language], script: title[:script], format: "text/plain",
|
336
|
-
)
|
337
|
-
end
|
338
|
-
|
339
|
-
unless titles.empty?
|
340
|
-
titles << TypedTitleString.new(
|
341
|
-
type: "main", content: titles.map { |t| t.title.content }.join(" – "),
|
342
|
-
language: title[:language], script: title[:script], format: "text/plain",
|
343
|
-
)
|
344
|
-
end
|
345
|
-
|
346
|
-
titles
|
347
|
-
end
|
348
|
-
|
349
|
-
def makeid(id, attribute, _delim = "")
|
214
|
+
def makeid(id, attribute, _delim = "") # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize
|
350
215
|
return nil if attribute && !@id_attribute
|
351
216
|
|
352
217
|
id ||= @docidentifier.reject { |i| i&.type == "DOI" }[0]
|
353
|
-
# contribs = publishers.map { |p| p&.entity&.abbreviation }.join '/'
|
354
|
-
# idstr = "#{contribs}#{delim}#{id.project_number}"
|
355
|
-
# idstr = id.project_number.to_s
|
356
218
|
if id
|
357
219
|
idstr = id.id
|
358
220
|
idstr = "IEV" if structuredidentifier&.project_number == "IEV"
|
359
221
|
else
|
360
222
|
idstr = formattedref&.content
|
361
223
|
end
|
362
|
-
# if id.part_number&.size&.positive? then idstr += "-#{id.part_number}"
|
363
224
|
idstr&.gsub(/:/, "-")&.gsub(/\s/, "")&.strip
|
364
225
|
end
|
365
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
366
226
|
end
|
367
227
|
end
|