relaton-doi 1.20.1 → 1.20.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: 5c4c9621e29ce8c9e21c5a87dc09a40ee02dbbda06339c629eb89dafc4ad198b
4
- data.tar.gz: 220d1d32f0cf84917922683c5f6e6eeea6731d2d01e668e2336116d82c4f62ea
3
+ metadata.gz: a2ee98f5c55309ec50367b65844a73f17c56f4f9333e13f6247d49556b01c2e9
4
+ data.tar.gz: 75ecddeaa14322883cdb8fd3920ea8f4305db25893c8df5c52c31bda35bd4344
5
5
  SHA512:
6
- metadata.gz: 625c124cd3d8711cd8fdb1e9eeb546ef76686a5b5abd4988545590e201127b24e162f5c1e5279c204ada49abd8cf865da013ecab18032d061810a9c8ff093bf4
7
- data.tar.gz: 8e3e98bdd1d71630252a59e4ce033ea3f8f3572ec01d312a3cfb772a79c101dd44410b1182d8055399ce8442895bf22c152c78ee5ba68765dfcd9a397fcf254e
6
+ metadata.gz: 2ebb92c089cc1b5c769da6ee0589e328b758467e074cb283c47f2f8d006e44b8b4c581ea311d1fb816ef36f11bd2c278824f7afb02e4755f81bad5b288b93814
7
+ data.tar.gz: bf79f0ef9d6969330b0edcc05dcab3877aeb6cc0654eda3e85ceedcc78ce92343a307da125ba6f57a49d46adb7dc5230e4fa049ce60cd1b9f73cceaf6e911ec3
@@ -7,6 +7,7 @@ on:
7
7
  branches: [ master, main ]
8
8
  tags: [ v* ]
9
9
  pull_request:
10
+ workflow_dispatch:
10
11
 
11
12
  jobs:
12
13
  rake:
@@ -1,4 +1,5 @@
1
1
  require "faraday"
2
+ require "uri"
2
3
 
3
4
  module RelatonDoi
4
5
  module Crossref
@@ -8,6 +9,8 @@ module RelatonDoi
8
9
  "User-Agent" => "Relaton/RelatonDoi (https://www.relaton.org/guides/doi/; mailto:open.source@ribose.com)"
9
10
  }.freeze
10
11
 
12
+ MAX_REDIRECTS = 5
13
+
11
14
  #
12
15
  # Get a document by DOI from the CrossRef API.
13
16
  #
@@ -37,9 +40,9 @@ module RelatonDoi
37
40
  #
38
41
  # @return [Hash] The document.
39
42
  #
40
- def get_by_id(id) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
41
- # resp = Serrano.works ids: id
43
+ def get_by_id(id) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
42
44
  n = 0
45
+ redirects = 0
43
46
  url = "https://api.crossref.org/works/#{CGI.escape(id)}"
44
47
  loop do
45
48
  resp = Faraday.get url, nil, HEADER
@@ -48,6 +51,15 @@ module RelatonDoi
48
51
  work = JSON.parse resp.body
49
52
  return work["message"] if work["status"] == "ok"
50
53
  when 404 then return nil
54
+ when 301, 302
55
+ raise RelatonBib::RequestError, "Crossref error: too many redirects" if redirects >= MAX_REDIRECTS
56
+
57
+ location = resp.headers["location"] || resp.headers["Location"]
58
+ raise RelatonBib::RequestError, "Crossref error: redirect without Location" if location.nil? || location.empty?
59
+
60
+ url = URI.join(url, location).to_s
61
+ redirects += 1
62
+ next
51
63
  end
52
64
 
53
65
  if n > 1
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RelatonDoi
4
- VERSION = "1.20.1"
4
+ VERSION = "1.20.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.20.1
4
+ version: 1.20.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: 2026-01-26 00:00:00.000000000 Z
11
+ date: 2026-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: relaton-bib