relaton-doi 1.20.2 → 2.0.0.pre.alpha.1

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.
@@ -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
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Doi
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-doi".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Relaton
4
+ module Doi
5
+ VERSION = "2.0.0-alpha.1"
6
+ end
7
+ end
@@ -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/relaton_doi/version"
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 = RelatonDoi::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.7.0"
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,11 @@ 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-bib", "~> 1.20.0"
38
- spec.add_dependency "relaton-bipm", "~> 1.20.0"
39
- spec.add_dependency "relaton-ieee", "~> 1.20.0"
40
- spec.add_dependency "relaton-ietf", "~> 1.20.0"
41
- spec.add_dependency "relaton-nist", "~> 1.20.0"
37
+ spec.add_dependency "relaton-bib", "~> 2.0.0-alpha.4"
38
+ spec.add_dependency "relaton-bipm", "~> 2.0.0-alpha.1"
39
+ spec.add_dependency "relaton-ieee", "~> 2.0.0-alpha.1"
40
+ spec.add_dependency "relaton-ietf", "~> 2.0.0-alpha.2"
41
+ spec.add_dependency "relaton-nist", "~> 2.0.0-alpha.2"
42
42
  # spec.add_dependency "relaton-w3c", "~> 1.10.0"
43
43
  spec.add_dependency "faraday", "~> 2.7"
44
44
 
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-doi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.20.2
4
+ version: 2.0.0.pre.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2026-04-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: relaton-bib
@@ -16,70 +15,70 @@ dependencies:
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: 1.20.0
18
+ version: 2.0.0.pre.alpha.4
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: 1.20.0
25
+ version: 2.0.0.pre.alpha.4
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: relaton-bipm
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: 1.20.0
32
+ version: 2.0.0.pre.alpha.1
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: 1.20.0
39
+ version: 2.0.0.pre.alpha.1
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: relaton-ieee
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: 1.20.0
46
+ version: 2.0.0.pre.alpha.1
48
47
  type: :runtime
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
- version: 1.20.0
53
+ version: 2.0.0.pre.alpha.1
55
54
  - !ruby/object:Gem::Dependency
56
55
  name: relaton-ietf
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - "~>"
60
59
  - !ruby/object:Gem::Version
61
- version: 1.20.0
60
+ version: 2.0.0.pre.alpha.2
62
61
  type: :runtime
63
62
  prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
66
65
  - - "~>"
67
66
  - !ruby/object:Gem::Version
68
- version: 1.20.0
67
+ version: 2.0.0.pre.alpha.2
69
68
  - !ruby/object:Gem::Dependency
70
69
  name: relaton-nist
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
72
  - - "~>"
74
73
  - !ruby/object:Gem::Version
75
- version: 1.20.0
74
+ version: 2.0.0.pre.alpha.2
76
75
  type: :runtime
77
76
  prerelease: false
78
77
  version_requirements: !ruby/object:Gem::Requirement
79
78
  requirements:
80
79
  - - "~>"
81
80
  - !ruby/object:Gem::Version
82
- version: 1.20.0
81
+ version: 2.0.0.pre.alpha.2
83
82
  - !ruby/object:Gem::Dependency
84
83
  name: faraday
85
84
  requirement: !ruby/object:Gem::Requirement
@@ -107,6 +106,7 @@ files:
107
106
  - ".gitignore"
108
107
  - ".rspec"
109
108
  - ".rubocop.yml"
109
+ - CLAUDE.md
110
110
  - Gemfile
111
111
  - LICENSE.txt
112
112
  - README.adoc
@@ -114,19 +114,18 @@ files:
114
114
  - bin/console
115
115
  - bin/rspec
116
116
  - bin/setup
117
- - lib/relaton_doi.rb
118
- - lib/relaton_doi/crossref.rb
119
- - lib/relaton_doi/parser.rb
120
- - lib/relaton_doi/processor.rb
121
- - lib/relaton_doi/util.rb
122
- - lib/relaton_doi/version.rb
117
+ - lib/relaton/doi.rb
118
+ - lib/relaton/doi/crossref.rb
119
+ - lib/relaton/doi/parser.rb
120
+ - lib/relaton/doi/processor.rb
121
+ - lib/relaton/doi/util.rb
122
+ - lib/relaton/doi/version.rb
123
123
  - relaton-doi.gemspec
124
124
  homepage: https://github.com/relaton/relaton-doi
125
125
  licenses:
126
126
  - BSD-2-Clause
127
127
  metadata:
128
128
  homepage_uri: https://github.com/relaton/relaton-doi
129
- post_install_message:
130
129
  rdoc_options: []
131
130
  require_paths:
132
131
  - lib
@@ -134,15 +133,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
133
  requirements:
135
134
  - - ">="
136
135
  - !ruby/object:Gem::Version
137
- version: 2.7.0
136
+ version: 3.2.0
138
137
  required_rubygems_version: !ruby/object:Gem::Requirement
139
138
  requirements:
140
139
  - - ">="
141
140
  - !ruby/object:Gem::Version
142
141
  version: '0'
143
142
  requirements: []
144
- rubygems_version: 3.5.22
145
- signing_key:
143
+ rubygems_version: 3.6.9
146
144
  specification_version: 4
147
145
  summary: 'RelatonDOI: retrieve Standards for bibliographic using DOI through Crossrefand
148
146
  provide Relaton object.'
@@ -1,74 +0,0 @@
1
- require "faraday"
2
- require "uri"
3
-
4
- module RelatonDoi
5
- module Crossref
6
- extend self
7
-
8
- HEADER = {
9
- "User-Agent" => "Relaton/RelatonDoi (https://www.relaton.org/guides/doi/; mailto:open.source@ribose.com)"
10
- }.freeze
11
-
12
- MAX_REDIRECTS = 5
13
-
14
- #
15
- # Get a document by DOI from the CrossRef API.
16
- #
17
- # @param [String] doi The DOI.
18
- #
19
- # @return [RelatonBib::BibliographicItem, RelatonIetf::IetfBibliographicItem,
20
- # RelatonBipm::BipmBibliographicItem, RelatonIeee::IeeeBibliographicItem,
21
- # RelatonNist::NistBibliographicItem] The bibitem.
22
- #
23
- def get(doi)
24
- Util.info "Fetching from search.crossref.org ...", key: doi
25
- id = doi.sub(%r{^doi:}, "")
26
- message = get_by_id id
27
- if message
28
- Util.info "Found: `#{message['DOI']}`", key: doi
29
- Parser.parse message
30
- else
31
- Util.info "Not found.", key: doi
32
- nil
33
- end
34
- end
35
-
36
- #
37
- # Get a document by DOI from the CrossRef API.
38
- #
39
- # @param [String] id The DOI.
40
- #
41
- # @return [Hash] The document.
42
- #
43
- def get_by_id(id) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
44
- n = 0
45
- redirects = 0
46
- url = "https://api.crossref.org/works/#{CGI.escape(id)}"
47
- loop do
48
- resp = Faraday.get url, nil, HEADER
49
- case resp.status
50
- when 200
51
- work = JSON.parse resp.body
52
- return work["message"] if work["status"] == "ok"
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
63
- end
64
-
65
- if n > 1
66
- raise RelatonBib::RequestError, "Crossref error: #{resp.body}"
67
- end
68
-
69
- n += 1
70
- sleep resp.headers["x-rate-limit-interval"].to_i * n
71
- end
72
- end
73
- end
74
- end