relaton-doi 1.19.0 → 1.20.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e538770eb9a82088798f558cda642323ee84380d9ecd56e5ce37efc02f7202f
4
- data.tar.gz: ec5587181416122694e351a5183112be91d342fd59c2c00eb50075cece268efb
3
+ metadata.gz: 5c4c9621e29ce8c9e21c5a87dc09a40ee02dbbda06339c629eb89dafc4ad198b
4
+ data.tar.gz: 220d1d32f0cf84917922683c5f6e6eeea6731d2d01e668e2336116d82c4f62ea
5
5
  SHA512:
6
- metadata.gz: bc7c3a8df13e5ebabd5a05104365a9c0aeb06d1cd5e811ef45947faddfe4eb68212d534bd90ee263cf2adb4acc947fa2545328984f0504cbdc56cfd4b9e4a5d6
7
- data.tar.gz: 82eb7f142beb2fed9e58fb04e3137a7be43cd62e5ec5afb3b3f02590187a1742d52fbb5369b244817b51bdc5f69120029c1bd87a7c23b24b40f26b57fa211a5c
6
+ metadata.gz: 625c124cd3d8711cd8fdb1e9eeb546ef76686a5b5abd4988545590e201127b24e162f5c1e5279c204ada49abd8cf865da013ecab18032d061810a9c8ff093bf4
7
+ data.tar.gz: 8e3e98bdd1d71630252a59e4ce033ea3f8f3572ec01d312a3cfb772a79c101dd44410b1182d8055399ce8442895bf22c152c78ee5ba68765dfcd9a397fcf254e
data/.gitignore CHANGED
@@ -10,6 +10,6 @@
10
10
 
11
11
  # rspec failure tracking
12
12
  .rspec_status
13
- .rubocop-https---raw-githubusercontent-com-riboseinc-oss-guides-master-ci-rubocop-yml
14
13
  Gemfile.lock
15
14
  .vscode/
15
+ .rubocop-remote-87c7cdd254a8d09d005ee06efac7acc0.yml
@@ -72,6 +72,9 @@ module RelatonDoi
72
72
  ATTRS = %i[type fetched title docid date link abstract contributor place
73
73
  doctype relation extent series medium].freeze
74
74
 
75
+ CROSSREF_API_URL = "https://api.crossref.org/works?query=%{query}&filter=%{filter}".freeze
76
+ MAX_RETRIES = 3
77
+
75
78
  #
76
79
  # Initialize instance.
77
80
  #
@@ -384,13 +387,12 @@ module RelatonDoi
384
387
  #
385
388
  # @return [Hash, nil] parent item
386
389
  #
387
- def parent_item # rubocop:disable Metrics/AbcSize
390
+ def parent_item
388
391
  @parent_item ||= begin
389
- query = [@src["container-title"][0], fetch_year].compact.join "+"
392
+ query = CGI.escape [@src["container-title"][0], fetch_year].compact.join("+")
390
393
  filter = "type:#{%w[book book-set edited-book monograph reference-book].join ',type:'}"
391
- resp = Faraday.get "https://api.crossref.org/works?query=#{query}&filter=#{filter}"
392
- json = JSON.parse resp.body
393
- json["message"]["items"].detect { |i| i["title"].include? @src["container-title"][0] }
394
+ items = fetch_crossref(query: query, filter: filter)
395
+ items&.detect { |i| i["title"].include? @src["container-title"][0] }
394
396
  end
395
397
  end
396
398
 
@@ -644,14 +646,13 @@ module RelatonDoi
644
646
  #
645
647
  # @return [String, nil] The location.
646
648
  #
647
- def fetch_location # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
649
+ def fetch_location
648
650
  title = @item[:title].first&.title&.content
649
651
  qparts = [title, fetch_year, @src["publisher"]]
650
652
  query = CGI.escape qparts.compact.join("+").gsub(" ", "+")
651
653
  filter = "type:#{%w[book-chapter book-part book-section book-track].join(',type:')}"
652
- resp = Faraday.get "https://api.crossref.org/works?query=#{query}&filter=#{filter}"
653
- json = JSON.parse resp.body
654
- json["message"]["items"].detect do |i|
654
+ items = fetch_crossref(query: query, filter: filter)
655
+ items&.detect do |i|
655
656
  i["publisher-location"] && i["container-title"].include?(title)
656
657
  end&.dig("publisher-location")
657
658
  end
@@ -732,7 +733,7 @@ module RelatonDoi
732
733
  from, to = @src["page"].split("-")
733
734
  extent << RelatonBib::Locality.new("page", from, to)
734
735
  end
735
- extent.any? ? [RelatonBib::LocalityStack.new(extent)] : []
736
+ extent.any? ? [RelatonBib::Extent.new(extent)] : []
736
737
  end
737
738
 
738
739
  #
@@ -769,5 +770,37 @@ module RelatonDoi
769
770
 
770
771
  RelatonBib::Medium.new genre: genre
771
772
  end
773
+
774
+ #
775
+ # Fetch data from Crossref API with retry logic.
776
+ #
777
+ # @param [String] query The query string.
778
+ # @param [String] filter The filter string.
779
+ #
780
+ # @return [Array<Hash>, nil] Items array from response or nil for 4xx responses.
781
+ #
782
+ # @raise [RelatonBib::RequestError] If request fails after retries.
783
+ #
784
+ def fetch_crossref(query:, filter:) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
785
+ url = format(CROSSREF_API_URL, query: query, filter: filter)
786
+ retries = 0
787
+ begin
788
+ resp = Faraday.get url
789
+ case resp.status
790
+ when 200..299
791
+ JSON.parse(resp.body).dig("message", "items")
792
+ when 400..499
793
+ nil
794
+ else
795
+ raise RelatonBib::RequestError, "Crossref request failed: #{resp.status} #{resp.body}"
796
+ end
797
+ rescue Faraday::Error => e
798
+ retries += 1
799
+ retry if retries <= MAX_RETRIES
800
+ raise RelatonBib::RequestError, "Crossref network error after #{MAX_RETRIES} retries: #{e.message}"
801
+ rescue JSON::ParserError => e
802
+ raise RelatonBib::RequestError, "Crossref JSON parsing error: #{e.message}"
803
+ end
804
+ end
772
805
  end
773
806
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RelatonDoi
4
- VERSION = "1.19.0"
4
+ VERSION = "1.20.1"
5
5
  end
data/relaton-doi.gemspec CHANGED
@@ -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.19.0"
38
- spec.add_dependency "relaton-bipm", "~> 1.19.0"
39
- spec.add_dependency "relaton-ieee", "~> 1.19.0"
40
- spec.add_dependency "relaton-ietf", "~> 1.19.0"
41
- spec.add_dependency "relaton-nist", "~> 1.19.0"
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"
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,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-doi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.0
4
+ version: 1.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-04 00:00:00.000000000 Z
11
+ date: 2026-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: relaton-bib
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.19.0
19
+ version: 1.20.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.19.0
26
+ version: 1.20.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: relaton-bipm
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.19.0
33
+ version: 1.20.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.19.0
40
+ version: 1.20.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: relaton-ieee
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.19.0
47
+ version: 1.20.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.19.0
54
+ version: 1.20.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: relaton-ietf
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.19.0
61
+ version: 1.20.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.19.0
68
+ version: 1.20.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: relaton-nist
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.19.0
75
+ version: 1.20.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.19.0
82
+ version: 1.20.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: faraday
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -126,7 +126,7 @@ licenses:
126
126
  - BSD-2-Clause
127
127
  metadata:
128
128
  homepage_uri: https://github.com/relaton/relaton-doi
129
- post_install_message:
129
+ post_install_message:
130
130
  rdoc_options: []
131
131
  require_paths:
132
132
  - lib
@@ -141,8 +141,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0'
143
143
  requirements: []
144
- rubygems_version: 3.3.27
145
- signing_key:
144
+ rubygems_version: 3.5.22
145
+ signing_key:
146
146
  specification_version: 4
147
147
  summary: 'RelatonDOI: retrieve Standards for bibliographic using DOI through Crossrefand
148
148
  provide Relaton object.'