relaton-doi 1.20.1 → 2.0.0.pre.alpha.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 +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -1
- data/CLAUDE.md +45 -0
- data/README.adoc +24 -25
- data/lib/relaton/doi/crossref.rb +64 -0
- data/lib/relaton/doi/parser.rb +827 -0
- data/lib/relaton/doi/processor.rb +64 -0
- data/lib/relaton/doi/util.rb +8 -0
- data/lib/relaton/doi/version.rb +7 -0
- data/lib/relaton/doi.rb +24 -0
- data/relaton-doi.gemspec +7 -8
- metadata +19 -35
- data/lib/relaton_doi/crossref.rb +0 -62
- data/lib/relaton_doi/parser.rb +0 -806
- data/lib/relaton_doi/processor.rb +0 -57
- data/lib/relaton_doi/util.rb +0 -6
- data/lib/relaton_doi/version.rb +0 -5
- data/lib/relaton_doi.rb +0 -27
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require "relaton/core/processor"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Doi
|
|
5
|
+
class Processor < Core::Processor
|
|
6
|
+
attr_reader :idtype
|
|
7
|
+
|
|
8
|
+
def initialize # rubocop:disable Lint/MissingSuper
|
|
9
|
+
@short = :relaton_doi
|
|
10
|
+
@prefix = "DOI"
|
|
11
|
+
@defaultprefix = %r{^doi:}
|
|
12
|
+
@idtype = "DOI"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @param code [String] DOI
|
|
16
|
+
# @param date [String, nil] year
|
|
17
|
+
# @param opts [Hash]
|
|
18
|
+
# @return [RelatonBib::BibliographicItem]
|
|
19
|
+
def get(code, _date, _opts)
|
|
20
|
+
require_relative "../doi"
|
|
21
|
+
Crossref.get(code)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# @param [String] source source name
|
|
26
|
+
# @param [Hash] opts
|
|
27
|
+
# @option opts [String] :output directory to output documents
|
|
28
|
+
# @option opts [String] :format
|
|
29
|
+
#
|
|
30
|
+
def fetch_data(_source, _opts)
|
|
31
|
+
Util.info "This processor does not support fetching data by source name. Use `get` method with DOI instead."
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @param xml [String]
|
|
35
|
+
# @return [Bib::ItemData]
|
|
36
|
+
def from_xml(xml)
|
|
37
|
+
require_relative "../doi"
|
|
38
|
+
Bib::Item.from_xml xml
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @param yaml [String]
|
|
42
|
+
# @return [Bib::ItemData]
|
|
43
|
+
def from_yaml(yaml)
|
|
44
|
+
require_relative "../doi"
|
|
45
|
+
Bib::Item.from_yaml yaml
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Returns hash of XML grammar
|
|
49
|
+
# @return [String]
|
|
50
|
+
def grammar_hash
|
|
51
|
+
require_relative "../doi"
|
|
52
|
+
@grammar_hash ||= ::Relaton::Doi.grammar_hash
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def remove_index_file
|
|
56
|
+
Util.info "This processor does not support index file. No action taken."
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Returns number of threads
|
|
60
|
+
# @return [Integer]
|
|
61
|
+
def threads = 2
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
data/lib/relaton/doi.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "relaton/bipm"
|
|
4
|
+
require "relaton/ietf"
|
|
5
|
+
require "relaton/ieee"
|
|
6
|
+
require "relaton/nist"
|
|
7
|
+
require_relative "doi/version"
|
|
8
|
+
require_relative "doi/util"
|
|
9
|
+
require_relative "doi/parser"
|
|
10
|
+
require_relative "doi/crossref"
|
|
11
|
+
|
|
12
|
+
module Relaton
|
|
13
|
+
module Doi
|
|
14
|
+
extend self
|
|
15
|
+
|
|
16
|
+
def grammar_hash
|
|
17
|
+
bipm_ver = Gem.loaded_specs["relaton-bipm"].version.to_s
|
|
18
|
+
Digest::MD5.hexdigest(
|
|
19
|
+
Relaton::Nist::VERSION + Relaton::Ietf::VERSION + Relaton::Ieee::VERSION +
|
|
20
|
+
bipm_ver + Relaton::Bib::VERSION,
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/relaton-doi.gemspec
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "lib/
|
|
3
|
+
require_relative "lib/relaton/doi/version"
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "relaton-doi"
|
|
7
|
-
spec.version =
|
|
7
|
+
spec.version = Relaton::Doi::VERSION
|
|
8
8
|
spec.authors = ["Ribose Inc."]
|
|
9
9
|
spec.email = ["open.source@ribose.com"]
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
|
14
14
|
"using DOI through Crossrefand provide Relaton object."
|
|
15
15
|
spec.homepage = "https://github.com/relaton/relaton-doi"
|
|
16
16
|
spec.license = "BSD-2-Clause"
|
|
17
|
-
spec.required_ruby_version = ">= 2.
|
|
17
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 3.2.0")
|
|
18
18
|
|
|
19
19
|
# spec.metadata["allowed_push_host"] = "TODO: Set to 'https://mygemserver.com'"
|
|
20
20
|
|
|
@@ -34,11 +34,10 @@ 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-
|
|
38
|
-
spec.add_dependency "relaton-
|
|
39
|
-
spec.add_dependency "relaton-
|
|
40
|
-
spec.add_dependency "relaton-
|
|
41
|
-
spec.add_dependency "relaton-nist", "~> 1.20.0"
|
|
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"
|
|
42
41
|
# spec.add_dependency "relaton-w3c", "~> 1.10.0"
|
|
43
42
|
spec.add_dependency "faraday", "~> 2.7"
|
|
44
43
|
|
metadata
CHANGED
|
@@ -1,85 +1,70 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: relaton-doi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0.pre.alpha.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: relaton-bib
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - "~>"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.20.0
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: 1.20.0
|
|
27
12
|
- !ruby/object:Gem::Dependency
|
|
28
13
|
name: relaton-bipm
|
|
29
14
|
requirement: !ruby/object:Gem::Requirement
|
|
30
15
|
requirements:
|
|
31
16
|
- - "~>"
|
|
32
17
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
18
|
+
version: 2.0.0.pre.alpha.3
|
|
34
19
|
type: :runtime
|
|
35
20
|
prerelease: false
|
|
36
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
22
|
requirements:
|
|
38
23
|
- - "~>"
|
|
39
24
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
25
|
+
version: 2.0.0.pre.alpha.3
|
|
41
26
|
- !ruby/object:Gem::Dependency
|
|
42
27
|
name: relaton-ieee
|
|
43
28
|
requirement: !ruby/object:Gem::Requirement
|
|
44
29
|
requirements:
|
|
45
30
|
- - "~>"
|
|
46
31
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
32
|
+
version: 2.0.0.pre.alpha.2
|
|
48
33
|
type: :runtime
|
|
49
34
|
prerelease: false
|
|
50
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
36
|
requirements:
|
|
52
37
|
- - "~>"
|
|
53
38
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
39
|
+
version: 2.0.0.pre.alpha.2
|
|
55
40
|
- !ruby/object:Gem::Dependency
|
|
56
41
|
name: relaton-ietf
|
|
57
42
|
requirement: !ruby/object:Gem::Requirement
|
|
58
43
|
requirements:
|
|
59
44
|
- - "~>"
|
|
60
45
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
46
|
+
version: 2.0.0.pre.alpha.3
|
|
62
47
|
type: :runtime
|
|
63
48
|
prerelease: false
|
|
64
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
50
|
requirements:
|
|
66
51
|
- - "~>"
|
|
67
52
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
53
|
+
version: 2.0.0.pre.alpha.3
|
|
69
54
|
- !ruby/object:Gem::Dependency
|
|
70
55
|
name: relaton-nist
|
|
71
56
|
requirement: !ruby/object:Gem::Requirement
|
|
72
57
|
requirements:
|
|
73
58
|
- - "~>"
|
|
74
59
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
60
|
+
version: 2.0.0.pre.alpha.3
|
|
76
61
|
type: :runtime
|
|
77
62
|
prerelease: false
|
|
78
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
64
|
requirements:
|
|
80
65
|
- - "~>"
|
|
81
66
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
67
|
+
version: 2.0.0.pre.alpha.3
|
|
83
68
|
- !ruby/object:Gem::Dependency
|
|
84
69
|
name: faraday
|
|
85
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -107,6 +92,7 @@ files:
|
|
|
107
92
|
- ".gitignore"
|
|
108
93
|
- ".rspec"
|
|
109
94
|
- ".rubocop.yml"
|
|
95
|
+
- CLAUDE.md
|
|
110
96
|
- Gemfile
|
|
111
97
|
- LICENSE.txt
|
|
112
98
|
- README.adoc
|
|
@@ -114,19 +100,18 @@ files:
|
|
|
114
100
|
- bin/console
|
|
115
101
|
- bin/rspec
|
|
116
102
|
- bin/setup
|
|
117
|
-
- lib/
|
|
118
|
-
- lib/
|
|
119
|
-
- lib/
|
|
120
|
-
- lib/
|
|
121
|
-
- lib/
|
|
122
|
-
- lib/
|
|
103
|
+
- lib/relaton/doi.rb
|
|
104
|
+
- lib/relaton/doi/crossref.rb
|
|
105
|
+
- lib/relaton/doi/parser.rb
|
|
106
|
+
- lib/relaton/doi/processor.rb
|
|
107
|
+
- lib/relaton/doi/util.rb
|
|
108
|
+
- lib/relaton/doi/version.rb
|
|
123
109
|
- relaton-doi.gemspec
|
|
124
110
|
homepage: https://github.com/relaton/relaton-doi
|
|
125
111
|
licenses:
|
|
126
112
|
- BSD-2-Clause
|
|
127
113
|
metadata:
|
|
128
114
|
homepage_uri: https://github.com/relaton/relaton-doi
|
|
129
|
-
post_install_message:
|
|
130
115
|
rdoc_options: []
|
|
131
116
|
require_paths:
|
|
132
117
|
- lib
|
|
@@ -134,15 +119,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
134
119
|
requirements:
|
|
135
120
|
- - ">="
|
|
136
121
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 2.
|
|
122
|
+
version: 3.2.0
|
|
138
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
124
|
requirements:
|
|
140
125
|
- - ">="
|
|
141
126
|
- !ruby/object:Gem::Version
|
|
142
127
|
version: '0'
|
|
143
128
|
requirements: []
|
|
144
|
-
rubygems_version: 3.
|
|
145
|
-
signing_key:
|
|
129
|
+
rubygems_version: 3.6.9
|
|
146
130
|
specification_version: 4
|
|
147
131
|
summary: 'RelatonDOI: retrieve Standards for bibliographic using DOI through Crossrefand
|
|
148
132
|
provide Relaton object.'
|
data/lib/relaton_doi/crossref.rb
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
require "faraday"
|
|
2
|
-
|
|
3
|
-
module RelatonDoi
|
|
4
|
-
module Crossref
|
|
5
|
-
extend self
|
|
6
|
-
|
|
7
|
-
HEADER = {
|
|
8
|
-
"User-Agent" => "Relaton/RelatonDoi (https://www.relaton.org/guides/doi/; mailto:open.source@ribose.com)"
|
|
9
|
-
}.freeze
|
|
10
|
-
|
|
11
|
-
#
|
|
12
|
-
# Get a document by DOI from the CrossRef API.
|
|
13
|
-
#
|
|
14
|
-
# @param [String] doi The DOI.
|
|
15
|
-
#
|
|
16
|
-
# @return [RelatonBib::BibliographicItem, RelatonIetf::IetfBibliographicItem,
|
|
17
|
-
# RelatonBipm::BipmBibliographicItem, RelatonIeee::IeeeBibliographicItem,
|
|
18
|
-
# RelatonNist::NistBibliographicItem] The bibitem.
|
|
19
|
-
#
|
|
20
|
-
def get(doi)
|
|
21
|
-
Util.info "Fetching from search.crossref.org ...", key: doi
|
|
22
|
-
id = doi.sub(%r{^doi:}, "")
|
|
23
|
-
message = get_by_id id
|
|
24
|
-
if message
|
|
25
|
-
Util.info "Found: `#{message['DOI']}`", key: doi
|
|
26
|
-
Parser.parse message
|
|
27
|
-
else
|
|
28
|
-
Util.info "Not found.", key: doi
|
|
29
|
-
nil
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
#
|
|
34
|
-
# Get a document by DOI from the CrossRef API.
|
|
35
|
-
#
|
|
36
|
-
# @param [String] id The DOI.
|
|
37
|
-
#
|
|
38
|
-
# @return [Hash] The document.
|
|
39
|
-
#
|
|
40
|
-
def get_by_id(id) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
|
41
|
-
# resp = Serrano.works ids: id
|
|
42
|
-
n = 0
|
|
43
|
-
url = "https://api.crossref.org/works/#{CGI.escape(id)}"
|
|
44
|
-
loop do
|
|
45
|
-
resp = Faraday.get url, nil, HEADER
|
|
46
|
-
case resp.status
|
|
47
|
-
when 200
|
|
48
|
-
work = JSON.parse resp.body
|
|
49
|
-
return work["message"] if work["status"] == "ok"
|
|
50
|
-
when 404 then return nil
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
if n > 1
|
|
54
|
-
raise RelatonBib::RequestError, "Crossref error: #{resp.body}"
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
n += 1
|
|
58
|
-
sleep resp.headers["x-rate-limit-interval"].to_i * n
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|