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.
@@ -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.2"
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,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-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-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: 1.20.1
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: 2026-01-26 00:00:00.000000000 Z
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: 1.20.0
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: 1.20.0
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: 1.20.0
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: 1.20.0
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: 1.20.0
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: 1.20.0
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: 1.20.0
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: 1.20.0
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/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
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.7.0
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.5.22
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.'
@@ -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