relaton-bib 1.16.1 → 1.16.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/relaton_bib/contributor.rb +35 -17
- data/lib/relaton_bib/hash_converter.rb +2 -1
- data/lib/relaton_bib/version.rb +1 -1
- data/lib/relaton_bib/xml_parser.rb +38 -42
- 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: 8098843fe273de5162b5c7f640ed970e78829a22a71aef66675a65bd9eaa60aa
|
4
|
+
data.tar.gz: 89e952252458837ebbec87cec74801414f676e0aafea76bf69a7c98157e96c32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc73ddea87f2eed0caca6361ec228aaac81d609ac1309d54d6da77aec9f9bdb6ec64182288b670f85c42f80115eb60c6372a3fd7ed240bd9e191ea253e350b9b
|
7
|
+
data.tar.gz: f58d6eb817231bc984a8d7928ca4f1d2319497e30debdaa46781a610949056ec5a2bdd768e7a742be77fc30dfd3288ff3006a6cc2dcf0476c7548ac48becc878
|
@@ -123,20 +123,13 @@ module RelatonBib
|
|
123
123
|
# @return [RelatonBib::LocalizedString, nil]
|
124
124
|
attr_reader :name
|
125
125
|
|
126
|
-
# @return [Array<RelatonBib::FormattedString>]
|
127
|
-
attr_reader :description
|
128
|
-
|
129
126
|
# @return [RelatonBib::Organization]
|
130
127
|
attr_reader :organization
|
131
128
|
|
132
|
-
# @param organization [RelatonBib::Organization]
|
129
|
+
# @param organization [RelatonBib::Organization, nil]
|
133
130
|
# @param name [RelatonBib::LocalizedString, nil]
|
134
131
|
# @param description [Array<RelatonBib::FormattedString>]
|
135
|
-
def initialize(organization
|
136
|
-
unless organization.is_a? RelatonBib::Organization
|
137
|
-
raise ArgumentError, "organization should be an instance of RelatonBib::Organization"
|
138
|
-
end
|
139
|
-
|
132
|
+
def initialize(organization: nil, name: nil, description: [])
|
140
133
|
@name = name
|
141
134
|
@organization = organization
|
142
135
|
@description = description
|
@@ -145,19 +138,44 @@ module RelatonBib
|
|
145
138
|
# @param opts [Hash]
|
146
139
|
# @option opts [Nokogiri::XML::Builder] :builder XML builder
|
147
140
|
# @option opts [String] :lang language
|
148
|
-
def to_xml(**opts)
|
141
|
+
def to_xml(**opts)
|
142
|
+
return unless organization || name || description&.any?
|
143
|
+
|
149
144
|
opts[:builder].affiliation do |builder|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
desc.each { |d| builder.description { d.to_xml builder } }
|
154
|
-
organization.to_xml(**opts)
|
145
|
+
name_xml builder
|
146
|
+
description_xml builder
|
147
|
+
organization&.to_xml(**opts)
|
155
148
|
end
|
156
149
|
end
|
157
150
|
|
151
|
+
def name_xml(builder)
|
152
|
+
builder.name { name.to_xml builder } if name
|
153
|
+
end
|
154
|
+
|
155
|
+
def description_xml(builder)
|
156
|
+
description.each { |d| builder.description { d.to_xml builder } }
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# Get description.
|
161
|
+
#
|
162
|
+
# @param [String, nil] lang language if nil return all description
|
163
|
+
#
|
164
|
+
# @return return [Array<RelatonBib::FormattedString>] description
|
165
|
+
#
|
166
|
+
def description(lang = nil)
|
167
|
+
return @description unless lang
|
168
|
+
|
169
|
+
@description.select { |d| d.language&.include? lang }
|
170
|
+
end
|
171
|
+
|
172
|
+
#
|
173
|
+
# Render affiliation as hash.
|
174
|
+
#
|
158
175
|
# @return [Hash]
|
176
|
+
#
|
159
177
|
def to_hash
|
160
|
-
hash = organization
|
178
|
+
hash = organization&.to_hash || {}
|
161
179
|
hash["name"] = name.to_hash if name
|
162
180
|
if description&.any?
|
163
181
|
hash["description"] = single_element_array(description)
|
@@ -175,7 +193,7 @@ module RelatonBib
|
|
175
193
|
description.each do |d|
|
176
194
|
out += d.to_asciibib "#{pref}affiliation.description", description.size
|
177
195
|
end
|
178
|
-
out += organization.to_asciibib "#{pref}affiliation.*"
|
196
|
+
out += organization.to_asciibib "#{pref}affiliation.*" if organization
|
179
197
|
out
|
180
198
|
end
|
181
199
|
end
|
@@ -288,9 +288,10 @@ module RelatonBib
|
|
288
288
|
end
|
289
289
|
FormattedString.new(**cnt)
|
290
290
|
end
|
291
|
+
name = LocalizedString.new(a[:name][:content], a[:name][:language], a[:name][:script]) if a[:name]
|
291
292
|
Affiliation.new(
|
292
293
|
organization: Organization.new(**org_hash_to_bib(a[:organization])),
|
293
|
-
description: a[:description],
|
294
|
+
description: a[:description], name: name
|
294
295
|
)
|
295
296
|
end
|
296
297
|
end
|
data/lib/relaton_bib/version.rb
CHANGED
@@ -180,13 +180,11 @@ module RelatonBib
|
|
180
180
|
#
|
181
181
|
def fetch_series(item) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/AbcSize,Metrics/MethodLength,Metrics/PerceivedComplexity
|
182
182
|
item.xpath("./series").reduce([]) do |mem, sr|
|
183
|
-
abbr = sr.at "abbreviation"
|
184
|
-
abbreviation = abbr &&
|
185
|
-
LocalizedString.new(abbr.text, abbr[:language], abbr[:script])
|
186
183
|
formattedref = fref(sr)
|
187
184
|
title = ttitle(sr.at("title"))
|
188
185
|
next mem unless formattedref || title
|
189
186
|
|
187
|
+
abbreviation = localized_string sr.at("abbreviation")
|
190
188
|
mem << Series.new(
|
191
189
|
type: sr[:type], formattedref: formattedref,
|
192
190
|
title: title, place: sr.at("place")&.text,
|
@@ -310,9 +308,7 @@ module RelatonBib
|
|
310
308
|
# @param title [Nokogiri::XML::Element]
|
311
309
|
# @return [Array<RelatonBib::LocalizedString>]
|
312
310
|
def variants(elm)
|
313
|
-
elm.xpath("variant").map
|
314
|
-
LocalizedString.new v.text, v[:language], v[:script]
|
315
|
-
end
|
311
|
+
elm.xpath("variant").map { |v| localized_string v }
|
316
312
|
end
|
317
313
|
|
318
314
|
#
|
@@ -388,27 +384,20 @@ module RelatonBib
|
|
388
384
|
#
|
389
385
|
# @param [Nokogiri::XML::Element] person XML element
|
390
386
|
#
|
391
|
-
# @return [RelatonBib::Person] person
|
387
|
+
# @return [RelatonBib::Person, nil] person
|
392
388
|
#
|
393
|
-
def get_person(person) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
FormattedString.new(content: e.text, language: e[:language],
|
398
|
-
script: e[:script], format: e[:format])
|
399
|
-
end
|
400
|
-
Affiliation.new organization: get_org(org), description: desc
|
401
|
-
end
|
389
|
+
def get_person(person) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
390
|
+
return unless person
|
391
|
+
|
392
|
+
affiliations = person.xpath("./affiliation").map { |a| fetch_affiliation a }
|
402
393
|
|
403
394
|
contact = parse_contact person
|
404
395
|
identifier = person.xpath("./identifier").map do |pi|
|
405
396
|
PersonIdentifier.new pi[:type], pi.text
|
406
397
|
end
|
407
398
|
|
408
|
-
|
409
|
-
|
410
|
-
sn = person.at "./name/surname"
|
411
|
-
sname = sn && LocalizedString.new(sn.text, sn[:language], sn[:script])
|
399
|
+
cname = localized_string person.at("./name/completename")
|
400
|
+
sname = localized_string person.at("./name/surname")
|
412
401
|
|
413
402
|
name = FullName.new(
|
414
403
|
completename: cname, surname: sname,
|
@@ -426,6 +415,22 @@ module RelatonBib
|
|
426
415
|
)
|
427
416
|
end
|
428
417
|
|
418
|
+
def fetch_affiliation(elm)
|
419
|
+
org = get_org elm.at("./organization")
|
420
|
+
desc = elm.xpath("./description").map do |e|
|
421
|
+
FormattedString.new(content: e.text, language: e[:language],
|
422
|
+
script: e[:script], format: e[:format])
|
423
|
+
end
|
424
|
+
name = localized_string elm.at("./name")
|
425
|
+
Affiliation.new organization: org, description: desc, name: name
|
426
|
+
end
|
427
|
+
|
428
|
+
def localized_string(elm)
|
429
|
+
return unless elm
|
430
|
+
|
431
|
+
LocalizedString.new(elm.text, elm[:language], elm[:script])
|
432
|
+
end
|
433
|
+
|
429
434
|
#
|
430
435
|
# Parse contact information
|
431
436
|
#
|
@@ -467,10 +472,7 @@ module RelatonBib
|
|
467
472
|
# @return [RelatonBib::LocalizedString, nil] initials
|
468
473
|
#
|
469
474
|
def parse_initials(person)
|
470
|
-
|
471
|
-
return unless inits
|
472
|
-
|
473
|
-
LocalizedString.new(inits.text, inits[:language], inits[:script])
|
475
|
+
localized_string person.at("./name/formatted-initials")
|
474
476
|
end
|
475
477
|
|
476
478
|
#
|
@@ -497,24 +499,21 @@ module RelatonBib
|
|
497
499
|
# @return [Array<RelatonBib::LocalizedString>] name parts
|
498
500
|
#
|
499
501
|
def name_part(person, part)
|
500
|
-
person.xpath("./name/#{part}").map
|
501
|
-
LocalizedString.new np.text, np[:language], np[:script]
|
502
|
-
end
|
502
|
+
person.xpath("./name/#{part}").map { |np| localized_string np }
|
503
503
|
end
|
504
504
|
|
505
505
|
# @param item [Nokogiri::XML::Element]
|
506
506
|
# @return [Array<RelatonBib::ContributionInfo>]
|
507
507
|
def fetch_contributors(item)
|
508
|
-
item.xpath("./contributor").map
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
end
|
516
|
-
ContributionInfo.new entity: entity, role: role
|
508
|
+
item.xpath("./contributor").map { |c| fetch_contribution_info c }
|
509
|
+
end
|
510
|
+
|
511
|
+
def fetch_contribution_info(contrib)
|
512
|
+
entity = get_org(contrib.at("./organization")) || get_person(contrib.at("./person"))
|
513
|
+
role = contrib.xpath("./role").map do |r|
|
514
|
+
{ type: r[:type], description: r.xpath("./description").map(&:text) }
|
517
515
|
end
|
516
|
+
ContributionInfo.new entity: entity, role: role
|
518
517
|
end
|
519
518
|
|
520
519
|
# @param item [Nokogiri::XML::Element]
|
@@ -529,16 +528,13 @@ module RelatonBib
|
|
529
528
|
|
530
529
|
# @param item [Nokogiri::XML::Element]
|
531
530
|
# @return [Array<RelatonBib::CopyrightAssociation>]
|
532
|
-
def fetch_copyright(item)
|
531
|
+
def fetch_copyright(item)
|
533
532
|
item.xpath("./copyright").map do |cp|
|
534
|
-
owner = cp.xpath("owner").map
|
535
|
-
ContributionInfo.new entity: get_org(o.at("organization"))
|
536
|
-
end
|
533
|
+
owner = cp.xpath("owner").map { |o| fetch_contribution_info o }
|
537
534
|
from = cp.at("from")&.text
|
538
535
|
to = cp.at("to")&.text
|
539
536
|
scope = cp.at("scope")&.text
|
540
|
-
CopyrightAssociation.new(owner: owner, from: from, to: to,
|
541
|
-
scope: scope)
|
537
|
+
CopyrightAssociation.new(owner: owner, from: from, to: to, scope: scope)
|
542
538
|
end
|
543
539
|
end
|
544
540
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-bib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.16.
|
4
|
+
version: 1.16.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: 2023-
|
11
|
+
date: 2023-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|