relaton-doi 1.14.0 → 1.14.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d864a698c9f38895e2d9c357d4d2d1cec68e645a08a6f440507fc3a236b1f671
4
- data.tar.gz: ac0782cd81ba541658b97832c3f1efbf4d460c06ba1a720af369b28c70159795
3
+ metadata.gz: d39addcfe400051b6cfadb759265bee674ace775bff92dab29a1c7f80891cd48
4
+ data.tar.gz: e24fa98bbfbff44bcb9b6b200c79750fe2f72ece457f67162a62324742a56cee
5
5
  SHA512:
6
- metadata.gz: 2e59c3acb8542e99deae9493eec3fdb364f8372feb24ab6f614a62dd8045deb56a12e17013cd21bc7fb33b587fb94e808e53f0bd0c0a44b169985e285312e4d6
7
- data.tar.gz: d0c79b69008ffe853814235600a9c6c693bd027d8c7a38c9813d24933903faa29064f46a54ca6984b0dc14644f74e7a121ba9b2ec223bd2a4aa09625c67b424b
6
+ metadata.gz: 33bf3eabe2d1786be51d05960ad0aff732dc3ebceed3bde02979cb6e01790c2c2f65f221ca5d1f1567b73be3b28ceab9bb2ec4b8303e7165881a7c9d88b3f9ae
7
+ data.tar.gz: d3e180ade463b3e94785c271dd795b440b645426cecf914a6684b67eadd2313b22155eb31860d4602407c38e8266b031c962cd7affad9947c98361553109a4c8
@@ -5,7 +5,6 @@ name: rake
5
5
  on:
6
6
  push:
7
7
  branches: [ master, main ]
8
- tags: [ v* ]
9
8
  pull_request:
10
9
 
11
10
  jobs:
@@ -110,9 +110,16 @@ module RelatonDoi
110
110
  doctype: @message["type"],
111
111
  place: create_place,
112
112
  relation: create_relation,
113
+ extent: create_extent,
114
+ series: create_series,
113
115
  }
114
116
  end
115
117
 
118
+ #
119
+ # Parse the document type.
120
+ #
121
+ # @return [String] The document type.
122
+ #
116
123
  def parse_type
117
124
  TYPES[@message["type"]] || @message["type"]
118
125
  end
@@ -169,9 +176,17 @@ module RelatonDoi
169
176
  # @return [Array<RelatonBib::TypedUri>] The link.
170
177
  #
171
178
  def create_link
172
- return [] unless @message["URL"]
179
+ links = []
180
+ if @message["URL"]
181
+ links << RelatonBib::TypedUri.new(type: "DOI", content: @message["URL"])
182
+ end
183
+ return links unless @message["link"]&.any?
173
184
 
174
- [RelatonBib::TypedUri.new(type: "DOI", content: @message["URL"])]
185
+ link = @message["link"].first
186
+ if link["URL"].match?(/\.pdf$/)
187
+ links << RelatonBib::TypedUri.new(type: "pdf", content: link["URL"])
188
+ end
189
+ links
175
190
  end
176
191
 
177
192
  #
@@ -194,7 +209,7 @@ module RelatonDoi
194
209
  #
195
210
  # @return [Array<RelatonBib::ContributionInfo>] The contributors.
196
211
  #
197
- def create_contributors
212
+ def create_contributors # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
198
213
  contribs = %w[author editor translator].each_with_object([]) do |type, obj|
199
214
  @message[type]&.each do |contrib|
200
215
  obj << contributor(person(contrib), type)
@@ -355,12 +370,77 @@ module RelatonDoi
355
370
  #
356
371
  # @return [Array<RelatonBib::DocumentRelation>] The relations.
357
372
  #
358
- def create_relation
359
- @message["relation"].map do |k, v|
373
+ def create_relation # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
374
+ rels = []
375
+ @message["container-title"]&.each do |ct|
376
+ contrib = included_in_editors(ct)
377
+ bib = RelatonBib::BibliographicItem.new(title: [content: ct], contributor: contrib)
378
+ rels << RelatonBib::DocumentRelation.new(type: "includedIn", bibitem: bib)
379
+ end
380
+ @message["relation"].each_with_object(rels) do |(k, v), a|
360
381
  fref = RelatonBib::FormattedRef.new(content: v["id"])
361
382
  bib = create_bibitem v["id"], formattedref: fref
362
383
  type = REALATION_TYPES[k] || k
363
- RelatonBib::DocumentRelation.new(type: type, bibitem: bib)
384
+ a << RelatonBib::DocumentRelation.new(type: type, bibitem: bib)
385
+ end
386
+ end
387
+
388
+ #
389
+ # Fetch included in editors.
390
+ #
391
+ # @param [String] title container-title
392
+ #
393
+ # @return [Array<RelatonBib::ContributionInfo>] The editors contribution info.
394
+ #
395
+ def included_in_editors(title)
396
+ item = fetch_included_in title
397
+ return [] unless item
398
+
399
+ item["editor"].map { |e| contributor(person(e), "editor") }
400
+ end
401
+
402
+ #
403
+ # Fetch included in relation.
404
+ #
405
+ # @param [String] title container-title
406
+ #
407
+ # @return [Hash] The included in relation item.
408
+ #
409
+ def fetch_included_in(title) # rubocop:disable Metrics/AbcSize
410
+ year = (@message["published"] || @message["approved"])["date-parts"][0][0]
411
+ query = "#{title}, #{@message['publisher']}, #{@message['publisher-location']}, #{year}"
412
+ resp = Faraday.get %{http://api.crossref.org/works?query.bibliographic="#{query}"&rows=5&filter=type:book}
413
+ json = JSON.parse resp.body
414
+ json["message"]["items"].detect { |i| i["title"].include?(title) && i["editor"] }
415
+ end
416
+
417
+ #
418
+ # Create an extent from the message hash.
419
+ #
420
+ # @return [Array<RelatonBib::Locality>] The extent.
421
+ #
422
+ def create_extent # rubocop:disable Metrics/AbcSize
423
+ extent = []
424
+ extent << RelatonBib::Locality.new("volume", @message["volume"]) if @message["volume"]
425
+ extent << RelatonBib::Locality.new("issue", @message["issue"]) if @message["issue"]
426
+ if @message["page"]
427
+ from, to = @message["page"].split("-")
428
+ extent << RelatonBib::Locality.new("page", from, to)
429
+ end
430
+ extent.any? ? [RelatonBib::LocalityStack.new(extent)] : []
431
+ end
432
+
433
+ #
434
+ # Create a series from the message hash.
435
+ #
436
+ # @return [Arrey<RelatonBib::Series>] The series.
437
+ #
438
+ def create_series
439
+ return [] unless @message["container-title"]
440
+
441
+ @message["container-title"].map do |ct|
442
+ title = RelatonBib::TypedTitleString.new content: ct
443
+ RelatonBib::Series.new title: title
364
444
  end
365
445
  end
366
446
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RelatonDoi
4
- VERSION = "1.14.0"
4
+ VERSION = "1.14.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-doi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.14.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-08 00:00:00.000000000 Z
11
+ date: 2022-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: equivalent-xml
@@ -208,7 +208,7 @@ licenses:
208
208
  - BSD-2-Clause
209
209
  metadata:
210
210
  homepage_uri: https://github.com/relaton/relaton-doi
211
- post_install_message:
211
+ post_install_message:
212
212
  rdoc_options: []
213
213
  require_paths:
214
214
  - lib
@@ -223,8 +223,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
223
  - !ruby/object:Gem::Version
224
224
  version: '0'
225
225
  requirements: []
226
- rubygems_version: 3.1.6
227
- signing_key:
226
+ rubygems_version: 3.2.3
227
+ signing_key:
228
228
  specification_version: 4
229
229
  summary: 'RelatonDOI: retrieve Standards for bibliographic using DOI through Crossrefand
230
230
  provide Relaton object.'