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 +4 -4
- data/.github/workflows/rake.yml +1 -0
- data/lib/relaton/doi/crossref.rb +21 -13
- data/lib/relaton/doi/parser.rb +7 -10
- data/lib/relaton/doi/version.rb +1 -1
- data/relaton-doi.gemspec +5 -5
- metadata +12 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b256f738a69cec57a4e6debe0f9cf68c868aaf0cc7cd5cfe95c134e8503dd1ba
|
|
4
|
+
data.tar.gz: 2f6f8ef49e0fce868e1e359594a98b1d52b892ab505dd9c241aeb032623f5925
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d481613fa9518026a02b18dd8ffce3d21dbf70930a227c4b9bc208ba36c2ea2859cb80a417e30f10c0f50a30fc3e7ec4acd49c1db60c9a0605d561ee3081452f
|
|
7
|
+
data.tar.gz: dd3c1567ffed897a5c9051a6a00f7f974ac405dcebc32beefdc3a48a5d057226c8d7dd536c0b7c858269a5c6dd66e1cc19447cd0a7391ea9fa2233deade2d05a
|
data/.github/workflows/rake.yml
CHANGED
data/lib/relaton/doi/crossref.rb
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
require "
|
|
1
|
+
require "mechanize"
|
|
2
2
|
|
|
3
3
|
module Relaton
|
|
4
4
|
module Doi
|
|
5
5
|
module Crossref
|
|
6
6
|
extend self
|
|
7
7
|
|
|
8
|
-
|
|
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 =
|
|
47
|
-
|
|
48
|
-
|
|
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.
|
|
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
|
data/lib/relaton/doi/parser.rb
CHANGED
|
@@ -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 =
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
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}"
|
data/lib/relaton/doi/version.rb
CHANGED
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
|
|
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
|
|
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 "
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
67
|
+
version: 2.0.0
|
|
68
68
|
- !ruby/object:Gem::Dependency
|
|
69
|
-
name:
|
|
69
|
+
name: mechanize
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '2.
|
|
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.
|
|
81
|
+
version: '2.0'
|
|
82
82
|
description: 'RelatonDOI: retrieve Standards for bibliographic using DOI through Crossrefand
|
|
83
83
|
provide Relaton object.'
|
|
84
84
|
email:
|