relaton-doi 2.0.0.pre.alpha.2 → 2.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a8ae63378c315ebe08dc911802f67dc9e2113d5c9da15a9a598c245d76376c4
4
- data.tar.gz: 56ce213956c38caeb98139543f65abe996dac5556f155b62cb2f9403175786e7
3
+ metadata.gz: b256f738a69cec57a4e6debe0f9cf68c868aaf0cc7cd5cfe95c134e8503dd1ba
4
+ data.tar.gz: 2f6f8ef49e0fce868e1e359594a98b1d52b892ab505dd9c241aeb032623f5925
5
5
  SHA512:
6
- metadata.gz: e7e6b33ffe54f9dc3e4800944cb56a60acef5f32af72ad2f4300ee05f6d027dfdbd4324612a8e826d525a2d00bf80bd1ce89b9b36e28337d6576a291e7dc055f
7
- data.tar.gz: b27b56901521fa3c44f5db65ca85f5f6b2fcd8569a4a0156c5a5c7bc735c54dee1e8c53b3916fabbdb85c69527a8442dea07535fbd73e38c3b150bf1ef0bdc06
6
+ metadata.gz: d481613fa9518026a02b18dd8ffce3d21dbf70930a227c4b9bc208ba36c2ea2859cb80a417e30f10c0f50a30fc3e7ec4acd49c1db60c9a0605d561ee3081452f
7
+ data.tar.gz: dd3c1567ffed897a5c9051a6a00f7f974ac405dcebc32beefdc3a48a5d057226c8d7dd536c0b7c858269a5c6dd66e1cc19447cd0a7391ea9fa2233deade2d05a
@@ -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,13 +1,11 @@
1
- require "faraday"
1
+ require "mechanize"
2
2
 
3
3
  module Relaton
4
4
  module Doi
5
5
  module Crossref
6
6
  extend self
7
7
 
8
- HEADER = {
9
- "User-Agent" => "Relaton::Doi (https://www.relaton.org/guides/doi/; mailto:open.source@ribose.com)"
10
- }.freeze
8
+ USER_AGENT = "Relaton::Doi (https://www.relaton.org/guides/doi/; mailto:open.source@ribose.com)"
11
9
 
12
10
  #
13
11
  # Get a document by DOI from the CrossRef API.
@@ -39,24 +37,34 @@ module Relaton
39
37
  # @return [Hash] The document.
40
38
  #
41
39
  def get_by_id(id) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
42
- # resp = Serrano.works ids: id
43
40
  n = 0
44
41
  url = "https://api.crossref.org/works/#{CGI.escape(id)}"
45
42
  loop do
46
- resp = Faraday.get url, nil, HEADER
47
- case resp.status
48
- when 200
49
- work = JSON.parse resp.body
50
- return work["message"] if work["status"] == "ok"
51
- when 404 then return nil
52
- end
43
+ resp = agent.get url
44
+ work = JSON.parse resp.body
45
+ return work["message"] if work["status"] == "ok"
53
46
 
54
47
  if n > 1
55
48
  raise Relaton::RequestError, "Crossref error: #{resp.body}"
56
49
  end
57
50
 
58
51
  n += 1
59
- sleep resp.headers["x-rate-limit-interval"].to_i * n
52
+ sleep resp.response["x-rate-limit-interval"].to_i * n
53
+ rescue Mechanize::ResponseCodeError => e
54
+ return nil if e.response_code == "404"
55
+
56
+ if n > 1
57
+ raise Relaton::RequestError, "Crossref error: #{e.page.body}"
58
+ end
59
+
60
+ n += 1
61
+ sleep e.page.response["x-rate-limit-interval"].to_i * n
62
+ end
63
+ end
64
+
65
+ def agent
66
+ @agent ||= Mechanize.new do |a|
67
+ a.user_agent = USER_AGENT
60
68
  end
61
69
  end
62
70
  end
@@ -805,16 +805,13 @@ module Relaton
805
805
  url = format(CROSSREF_API_URL, query: query, filter: filter)
806
806
  retries = 0
807
807
  begin
808
- resp = Faraday.get url
809
- case resp.status
810
- when 200..299
811
- JSON.parse(resp.body).dig("message", "items")
812
- when 400..499
813
- nil
814
- else
815
- raise Relaton::RequestError, "Crossref request failed: #{resp.status} #{resp.body}"
816
- end
817
- rescue Faraday::Error => e
808
+ resp = Crossref.agent.get url
809
+ JSON.parse(resp.body).dig("message", "items")
810
+ rescue Mechanize::ResponseCodeError => e
811
+ return nil if e.response_code.start_with?("4")
812
+
813
+ raise Relaton::RequestError, "Crossref request failed: #{e.response_code} #{e.page.body}"
814
+ rescue Net::HTTP::Persistent::Error, Net::HTTPError, Errno::ECONNREFUSED => e
818
815
  retries += 1
819
816
  retry if retries <= MAX_RETRIES
820
817
  raise Relaton::RequestError, "Crossref network error after #{MAX_RETRIES} retries: #{e.message}"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Relaton
4
4
  module Doi
5
- VERSION = "2.0.0-alpha.2"
5
+ VERSION = "2.0.0"
6
6
  end
7
7
  end
data/relaton-doi.gemspec CHANGED
@@ -34,12 +34,12 @@ Gem::Specification.new do |spec|
34
34
  # Uncomment to register a new dependency of your gem
35
35
  # spec.add_dependency "example-gem", "~> 1.0"
36
36
 
37
- spec.add_dependency "relaton-bipm", "~> 2.0.0-alpha.3"
38
- spec.add_dependency "relaton-ieee", "~> 2.0.0-alpha.2"
39
- spec.add_dependency "relaton-ietf", "~> 2.0.0-alpha.3"
40
- spec.add_dependency "relaton-nist", "~> 2.0.0-alpha.3"
37
+ spec.add_dependency "relaton-bipm", "~> 2.0.0"
38
+ spec.add_dependency "relaton-ieee", "~> 2.0.0"
39
+ spec.add_dependency "relaton-ietf", "~> 2.0.0"
40
+ spec.add_dependency "relaton-nist", "~> 2.0.0"
41
41
  # spec.add_dependency "relaton-w3c", "~> 1.10.0"
42
- spec.add_dependency "faraday", "~> 2.7"
42
+ spec.add_dependency "mechanize", "~> 2.0"
43
43
 
44
44
  # For more information and examples about making a new gem, checkout our
45
45
  # guide at: https://bundler.io/guides/creating_gem.html
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-doi
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.alpha.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -15,70 +15,70 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 2.0.0.pre.alpha.3
18
+ version: 2.0.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: 2.0.0.pre.alpha.3
25
+ version: 2.0.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: relaton-ieee
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: 2.0.0.pre.alpha.2
32
+ version: 2.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 2.0.0.pre.alpha.2
39
+ version: 2.0.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: relaton-ietf
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 2.0.0.pre.alpha.3
46
+ version: 2.0.0
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 2.0.0.pre.alpha.3
53
+ version: 2.0.0
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: relaton-nist
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 2.0.0.pre.alpha.3
60
+ version: 2.0.0
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 2.0.0.pre.alpha.3
67
+ version: 2.0.0
68
68
  - !ruby/object:Gem::Dependency
69
- name: faraday
69
+ name: mechanize
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '2.7'
74
+ version: '2.0'
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '2.7'
81
+ version: '2.0'
82
82
  description: 'RelatonDOI: retrieve Standards for bibliographic using DOI through Crossrefand
83
83
  provide Relaton object.'
84
84
  email: