sul_orcid_client 0.4.1 → 0.5.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.
@@ -1,14 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SulOrcidClient
2
4
  # Maps a Cocina Description to an Orcid Work.
3
5
 
4
6
  # Note that this mapping is currently based on a description generated
5
7
  # from an H2 work. However, it could be extended to more completely map descriptions.
8
+ # rubocop:disable Metrics/ClassLength
9
+ # rubocop:disable Metrics/MethodLength
6
10
  class WorkMapper
7
11
  # Error raised by WorkMapper
8
12
  class WorkMapperError < StandardError; end
9
13
 
10
14
  def self.map(description:, doi: nil)
11
- new(description: description, doi: doi).map
15
+ new(description:, doi:).map
12
16
  end
13
17
 
14
18
  # @param [Cocina::Models::Description] description to map
@@ -21,16 +25,16 @@ class SulOrcidClient
21
25
  def map
22
26
  {
23
27
  title: map_title,
24
- "short-description": map_short_description,
28
+ 'short-description': map_short_description,
25
29
  citation: map_citation,
26
30
  type: map_type,
27
- "publication-date": map_publication_date,
28
- "external-ids": map_external_ids,
31
+ 'publication-date': map_publication_date,
32
+ 'external-ids': map_external_ids,
29
33
  url: description.purl,
30
34
  contributors: map_contributors,
31
- "language-code": "en",
35
+ 'language-code': 'en',
32
36
  country: {
33
- value: "US"
37
+ value: 'US'
34
38
  }
35
39
  }.compact
36
40
  end
@@ -41,7 +45,7 @@ class SulOrcidClient
41
45
 
42
46
  def map_title
43
47
  title = description.title.first&.value
44
- raise WorkMapperError, "Title not mapped" unless title
48
+ raise WorkMapperError, 'Title not mapped' unless title
45
49
 
46
50
  {
47
51
  title: {
@@ -51,41 +55,41 @@ class SulOrcidClient
51
55
  end
52
56
 
53
57
  def map_short_description
54
- description.note.find { |note| note.type == "abstract" }&.value
58
+ description.note.find { |note| note.type == 'abstract' }&.value
55
59
  end
56
60
 
57
61
  def map_citation
58
- citation = description.note.find { |note| note.type == "preferred citation" }&.value
62
+ citation = description.note.find { |note| note.type == 'preferred citation' }&.value
59
63
  return unless citation
60
64
 
61
65
  {
62
- "citation-type": "formatted-unspecified",
63
- "citation-value": citation
66
+ 'citation-type': 'formatted-unspecified',
67
+ 'citation-value': citation
64
68
  }
65
69
  end
66
70
 
67
71
  def map_external_ids
68
- {"external-id":
72
+ { 'external-id':
69
73
  [
70
- map_external_id("uri", description.purl, description.purl)
74
+ map_external_id('uri', description.purl, description.purl)
71
75
  ].tap do |ids|
72
- ids << map_external_id("doi", doi, "https://doi.org/#{doi}") if doi
73
- end}
76
+ ids << map_external_id('doi', doi, "https://doi.org/#{doi}") if doi
77
+ end }
74
78
  end
75
79
 
76
80
  def map_external_id(type, value, url)
77
81
  {
78
- "external-id-type": type,
79
- "external-id-value": value,
80
- "external-id-url": {
82
+ 'external-id-type': type,
83
+ 'external-id-value': value,
84
+ 'external-id-url': {
81
85
  value: url
82
86
  },
83
- "external-id-relationship": "self"
87
+ 'external-id-relationship': 'self'
84
88
  }
85
89
  end
86
90
 
87
91
  def map_publication_date
88
- date = event_value("publication") || event_value("deposit")
92
+ date = event_value('publication') || event_value('deposit')
89
93
  return unless date
90
94
 
91
95
  year, month, day = parse_date(date)
@@ -96,8 +100,8 @@ class SulOrcidClient
96
100
  value: year
97
101
  }
98
102
  }.tap do |publication_date|
99
- publication_date[:month] = {value: month} if month
100
- publication_date[:day] = {value: day} if month && day
103
+ publication_date[:month] = { value: month } if month
104
+ publication_date[:day] = { value: day } if month && day
101
105
  end
102
106
  end
103
107
 
@@ -113,64 +117,67 @@ class SulOrcidClient
113
117
  end
114
118
 
115
119
  H2_TERM_MAP = {
116
- "Data" => "data-set",
117
- "Software/Code" => "software",
118
- "Article" => "journal-article",
119
- "Book" => "book",
120
- "Book chapter" => "book-chapter",
121
- "Code" => "software",
122
- "Conference session" => "lecture-speech",
123
- "Course/instructional materials" => "manual",
124
- "Database" => "data-set",
125
- "Dramatic performance" => "artistic-performance",
126
- "Geospatial data" => "data-set",
127
- "Journal/periodical issue" => "journal-issue",
128
- "Performance" => "artistic-performance",
129
- "Poetry reading" => "artistic-performance",
130
- "Poster" => "conference-poster",
131
- "Preprint" => "preprint",
132
- "Presentation recording" => "lecture-speech",
133
- "Questionnaire" => "research-technique",
134
- "Report" => "report",
135
- "Software" => "software",
136
- "Speech" => "lecture-speech",
137
- "Statistical model" => "research-technique",
138
- "Syllabus" => "manual",
139
- "Tabular data" => "data-set",
140
- "Technical report" => "report",
141
- "Text corpus" => "data-set",
142
- "Thesis" => "dissertation-thesis",
143
- "Working paper" => "working-paper"
144
- }
120
+ 'Data' => 'data-set',
121
+ 'Software/Code' => 'software',
122
+ 'Article' => 'journal-article',
123
+ 'Book' => 'book',
124
+ 'Book chapter' => 'book-chapter',
125
+ 'Code' => 'software',
126
+ 'Conference session' => 'lecture-speech',
127
+ 'Course/instructional materials' => 'manual',
128
+ 'Database' => 'data-set',
129
+ 'Dramatic performance' => 'artistic-performance',
130
+ 'Geospatial data' => 'data-set',
131
+ 'Journal/periodical issue' => 'journal-issue',
132
+ 'Performance' => 'artistic-performance',
133
+ 'Poetry reading' => 'artistic-performance',
134
+ 'Poster' => 'conference-poster',
135
+ 'Preprint' => 'preprint',
136
+ 'Presentation recording' => 'lecture-speech',
137
+ 'Questionnaire' => 'research-technique',
138
+ 'Report' => 'report',
139
+ 'Software' => 'software',
140
+ 'Speech' => 'lecture-speech',
141
+ 'Statistical model' => 'research-technique',
142
+ 'Syllabus' => 'manual',
143
+ 'Tabular data' => 'data-set',
144
+ 'Technical report' => 'report',
145
+ 'Text corpus' => 'data-set',
146
+ 'Thesis' => 'dissertation-thesis',
147
+ 'Working paper' => 'working-paper'
148
+ }.freeze
145
149
 
146
150
  def map_type
147
151
  # See https://info.orcid.org/ufaqs/what-work-types-does-orcid-support/
148
152
  # For now, only mapping H2 terms; if there is not an H2 term, using "other".
149
153
 
150
- h2_form = description.form.find { |form| form.source&.value == "Stanford self-deposit resource types" }
151
- return "other" unless h2_form
154
+ h2_form = description.form.find { |form| form.source&.value == 'Stanford self-deposit resource types' }
155
+ return 'other' unless h2_form
152
156
 
153
157
  map_h2_resource_types(h2_form)
154
158
  end
155
159
 
156
160
  def map_h2_resource_types(form)
157
161
  # Try to match subtypes first, then type
158
- subtype_terms = form.structuredValue.select { |term| term.type == "subtype" }.map(&:value)
159
- type_term = form.structuredValue.find { |term| term.type == "type" }&.value
162
+ subtype_terms = form.structuredValue.select { |term| term.type == 'subtype' }.map(&:value)
163
+ type_term = form.structuredValue.find { |term| term.type == 'type' }&.value
160
164
  matching_term = (subtype_terms + [type_term]).find { |term| H2_TERM_MAP.key?(term) }
161
- return "other" unless matching_term
165
+ return 'other' unless matching_term
162
166
 
163
167
  H2_TERM_MAP[matching_term]
164
168
  end
165
169
 
166
170
  def map_contributors
167
- contributors = description.contributor.map do |contributor|
168
- ContributorMapper.map(contributor: contributor)
169
- end.compact.presence
171
+ contributors = description.contributor.filter_map do |contributor|
172
+ ContributorMapper.map(contributor:)
173
+ end.presence
170
174
  return unless contributors
175
+
171
176
  {
172
177
  contributor: contributors
173
178
  }
174
179
  end
175
180
  end
181
+ # rubocop:enable Metrics/ClassLength
182
+ # rubocop:enable Metrics/MethodLength
176
183
  end
@@ -1,18 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_support"
4
- require "active_support/core_ext"
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
5
 
6
- require "faraday"
7
- require "faraday/retry"
8
- require "oauth2"
9
- require "singleton"
10
- require "zeitwerk"
6
+ require 'faraday'
7
+ require 'faraday/retry'
8
+ require 'oauth2'
9
+ require 'singleton'
10
+ require 'zeitwerk'
11
11
 
12
12
  # Load the gem's internal dependencies: use Zeitwerk instead of needing to manually require classes
13
13
  Zeitwerk::Loader.for_gem.setup
14
14
 
15
15
  # Client for interacting with ORCID API
16
+ # rubocop:disable Metrics/ClassLength
16
17
  class SulOrcidClient
17
18
  include Singleton
18
19
 
@@ -52,16 +53,17 @@ class SulOrcidClient
52
53
  end
53
54
 
54
55
  # Fetches the name for a user given an orcidid
56
+ # rubocop:disable Metrics/MethodLength
55
57
  def fetch_name(orcidid:)
56
58
  match = /[0-9xX]{4}-[0-9xX]{4}-[0-9xX]{4}-[0-9xX]{4}/.match(orcidid)
57
- raise "invalid orcidid provided" unless match
59
+ raise 'invalid orcidid provided' unless match
58
60
 
59
61
  response = public_conn.get("/v3.0/#{match[0]&.upcase}/personal-details")
60
62
  case response.status
61
63
  when 200
62
64
  resp_json = JSON.parse(response.body)
63
- [resp_json.dig("name", "given-names", "value"),
64
- resp_json.dig("name", "family-name", "value")]
65
+ [resp_json.dig('name', 'given-names', 'value'),
66
+ resp_json.dig('name', 'family-name', 'value')]
65
67
  else
66
68
  raise "ORCID.org API returned #{response.status} (#{response.body}) for: #{orcidid}"
67
69
  end
@@ -71,19 +73,20 @@ class SulOrcidClient
71
73
  # see https://info.orcid.org/documentation/api-tutorials/api-tutorial-searching-the-orcid-registry
72
74
  # @param [query] query to pass to ORCID
73
75
  # @param [expanded] set to true or false (defaults to false) to indicate an expanded query results (see ORCID docs)
76
+ # rubocop:disable Metrics/AbcSize
74
77
  def search(query:, expanded: false)
75
78
  if expanded
76
- search_method = "expanded-search"
77
- response_name = "expanded-result"
79
+ search_method = 'expanded-search'
80
+ response_name = 'expanded-result'
78
81
  else
79
- search_method = "search"
80
- response_name = "result"
82
+ search_method = 'search'
83
+ response_name = 'result'
81
84
  end
82
85
 
83
86
  # this is the maximum number of rows ORCID allows in their response currently
84
87
  max_num_returned = 1000
85
88
  total_response = get("/v3.0/#{search_method}/?q=#{query}&rows=#{max_num_returned}")
86
- num_results = total_response["num-found"]
89
+ num_results = total_response['num-found']
87
90
 
88
91
  return total_response if num_results <= max_num_returned
89
92
 
@@ -105,24 +108,26 @@ class SulOrcidClient
105
108
  # @return [string] put-code
106
109
  def add_work(orcidid:, work:, token:)
107
110
  response = conn_with_token(token).post("/v3.0/#{base_orcidid(orcidid)}/work",
108
- work.to_json,
109
- "Content-Type" => "application/json")
111
+ work.to_json,
112
+ 'Content-Type' => 'application/json')
110
113
 
111
114
  case response.status
112
115
  when 201
113
- response["Location"].match(%r{work/(\d+)})[1]
116
+ response['Location'].match(%r{work/(\d+)})[1]
114
117
  when 401
115
118
  raise InvalidTokenError,
116
- "Invalid token for #{orcidid} - ORCID.org API returned #{response.status} (#{response.body})"
119
+ "Invalid token for #{orcidid} - ORCID.org API returned #{response.status} (#{response.body})"
117
120
  when 409
118
121
  match = response.body.match(/put-code (\d+)\./)
119
- raise "ORCID.org API returned a 409, but could not find put-code" unless match
122
+ raise 'ORCID.org API returned a 409, but could not find put-code' unless match
120
123
 
121
124
  match[1]
122
125
  else
123
126
  raise "ORCID.org API returned #{response.status} (#{response.body}) for: #{work.to_json}"
124
127
  end
125
128
  end
129
+ # rubocop:enable Metrics/MethodLength
130
+ # rubocop:enable Metrics/AbcSize
126
131
 
127
132
  # Update an existing work for a researcher.
128
133
  # @param [String] orcidid an ORCiD ID for the researcher
@@ -133,12 +138,16 @@ class SulOrcidClient
133
138
  # @raise [RuntimeError] if the API response status is not successful
134
139
  def update_work(orcidid:, work:, token:, put_code:)
135
140
  response = conn_with_token(token).put("/v3.0/#{base_orcidid(orcidid)}/work/#{put_code}",
136
- work.merge({"put-code" => put_code}).to_json,
137
- "Content-Type" => "application/vnd.orcid+json")
141
+ work.merge({ 'put-code' => put_code }).to_json,
142
+ 'Content-Type' => 'application/vnd.orcid+json')
138
143
 
139
- raise "ORCID.org API returned #{response.status} when updating #{put_code} for #{orcidid}. The author may have previously deleted this work from their ORCID profile." if response.status == 404
144
+ if response.status == 404
145
+ raise "ORCID.org API returned #{response.status} when updating #{put_code} for #{orcidid}. The author may have previously deleted " \
146
+ 'this work from their ORCID profile.'
147
+ end
140
148
 
141
149
  raise "ORCID.org API returned #{response.status} when updating #{put_code} for #{orcidid}" unless response.status == 200
150
+
142
151
  true
143
152
  end
144
153
 
@@ -171,7 +180,7 @@ class SulOrcidClient
171
180
 
172
181
  def client_token
173
182
  client = OAuth2::Client.new(client_id, client_secret, site: base_auth_url)
174
- token = client.client_credentials.get_token({scope: "/read-public"})
183
+ token = client.client_credentials.get_token({ scope: '/read-public' })
175
184
  token.token
176
185
  end
177
186
 
@@ -184,9 +193,9 @@ class SulOrcidClient
184
193
  def public_conn
185
194
  conn = Faraday.new(url: base_public_url) do |faraday|
186
195
  faraday.request :retry, max: 5,
187
- interval: 0.5,
188
- interval_randomness: 0.5,
189
- backoff_factor: 2
196
+ interval: 0.5,
197
+ interval_randomness: 0.5,
198
+ backoff_factor: 2
190
199
  end
191
200
  conn.options.timeout = 500
192
201
  conn.options.open_timeout = 10
@@ -195,12 +204,13 @@ class SulOrcidClient
195
204
  end
196
205
 
197
206
  # @return [Faraday::Connection]
207
+ # rubocop:disable Metrics/MethodLength
198
208
  def conn_with_token(token)
199
209
  conn = Faraday.new(url: base_url) do |faraday|
200
210
  faraday.request :retry, max: 3,
201
- interval: 0.5,
202
- interval_randomness: 0.5,
203
- backoff_factor: 2
211
+ interval: 0.5,
212
+ interval_randomness: 0.5,
213
+ backoff_factor: 2
204
214
  end
205
215
  conn.options.timeout = 500
206
216
  conn.options.open_timeout = 10
@@ -208,11 +218,12 @@ class SulOrcidClient
208
218
  conn.headers[:authorization] = "Bearer #{token}"
209
219
  conn
210
220
  end
221
+ # rubocop:enable Metrics/MethodLength
211
222
 
212
223
  def headers
213
224
  {
214
- "Accept" => "application/json",
215
- "User-Agent" => "stanford-library-sul-pub"
225
+ 'Accept' => 'application/json',
226
+ 'User-Agent' => 'stanford-library-sul-pub'
216
227
  }
217
228
  end
218
229
 
@@ -224,3 +235,4 @@ class SulOrcidClient
224
235
  orcidid[-19, 19]
225
236
  end
226
237
  end
238
+ # rubocop:enable Metrics/ClassLength
@@ -1,24 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path("lib", __dir__)
3
+ lib = File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require "sul_orcid_client/version"
5
+ require 'sul_orcid_client/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "sul_orcid_client"
8
+ spec.name = 'sul_orcid_client'
9
9
  spec.version = SulOrcidClient::VERSION
10
- spec.authors = ["Peter Mangiafico", "Justin Littman"]
11
- spec.email = ["pmangiafico@stanford.edu", "jlittman@stanford.edu"]
10
+ spec.authors = ['Peter Mangiafico', 'Justin Littman']
11
+ spec.email = ['pmangiafico@stanford.edu', 'jlittman@stanford.edu']
12
12
 
13
- spec.summary = "Interface for interacting with the ORCID API."
14
- spec.description = "This provides API interaction with the ORCID API"
15
- spec.homepage = "https://github.com/sul-dlss/sul_orcid_client"
16
- spec.required_ruby_version = ">= 3.2.0"
13
+ spec.summary = 'Interface for interacting with the ORCID API.'
14
+ spec.description = 'This provides API interaction with the ORCID API'
15
+ spec.homepage = 'https://github.com/sul-dlss/sul_orcid_client'
16
+ spec.required_ruby_version = '>= 3.2.0'
17
17
 
18
- spec.metadata["homepage_uri"] = spec.homepage
19
- spec.metadata["source_code_uri"] = "https://github.com/sul-dlss/sul_orcid_client"
20
- spec.metadata["changelog_uri"] = "https://github.com/sul-dlss/sul_orcid_client/releases"
21
- spec.metadata["rubygems_mfa_required"] = "true"
18
+ spec.metadata['homepage_uri'] = spec.homepage
19
+ spec.metadata['source_code_uri'] = 'https://github.com/sul-dlss/sul_orcid_client'
20
+ spec.metadata['changelog_uri'] = 'https://github.com/sul-dlss/sul_orcid_client/releases'
21
+ spec.metadata['rubygems_mfa_required'] = 'true'
22
22
 
23
23
  # Specify which files should be added to the gem when it is released.
24
24
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -27,22 +27,26 @@ Gem::Specification.new do |spec|
27
27
  (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
28
28
  end
29
29
  end
30
- spec.bindir = "exe"
30
+ spec.bindir = 'exe'
31
31
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
- spec.require_paths = ["lib"]
32
+ spec.require_paths = ['lib']
33
33
 
34
- spec.add_dependency "activesupport", ">= 4.2", "< 8"
35
- spec.add_dependency "cocina-models", "~> 0.90"
36
- spec.add_dependency "faraday"
37
- spec.add_dependency "faraday-retry"
38
- spec.add_dependency "oauth2"
39
- spec.add_dependency "zeitwerk"
34
+ spec.add_dependency 'activesupport', '>= 4.2'
35
+ spec.add_dependency 'cocina-models', '~> 0.90'
36
+ spec.add_dependency 'faraday'
37
+ spec.add_dependency 'faraday-retry'
38
+ spec.add_dependency 'oauth2'
39
+ spec.add_dependency 'zeitwerk'
40
40
 
41
- spec.add_development_dependency "rake", "~> 13.0"
42
- spec.add_development_dependency "rspec", "~> 3.0"
43
- spec.add_development_dependency "rubocop-rspec"
44
- spec.add_development_dependency "simplecov"
45
- spec.add_development_dependency "standard"
46
- spec.add_development_dependency "vcr"
47
- spec.add_development_dependency "webmock"
41
+ spec.add_development_dependency 'rake', '~> 13.0'
42
+ spec.add_development_dependency 'rspec', '~> 3.0'
43
+ spec.add_development_dependency 'rubocop'
44
+ spec.add_development_dependency 'rubocop-capybara'
45
+ spec.add_development_dependency 'rubocop-factory_bot'
46
+ spec.add_development_dependency 'rubocop-performance'
47
+ spec.add_development_dependency 'rubocop-rspec'
48
+ spec.add_development_dependency 'rubocop-rspec_rails'
49
+ spec.add_development_dependency 'simplecov'
50
+ spec.add_development_dependency 'vcr'
51
+ spec.add_development_dependency 'webmock'
48
52
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sul_orcid_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Mangiafico
8
8
  - Justin Littman
9
- autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2023-11-20 00:00:00.000000000 Z
11
+ date: 2025-02-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
@@ -18,9 +17,6 @@ dependencies:
18
17
  - - ">="
19
18
  - !ruby/object:Gem::Version
20
19
  version: '4.2'
21
- - - "<"
22
- - !ruby/object:Gem::Version
23
- version: '8'
24
20
  type: :runtime
25
21
  prerelease: false
26
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -28,9 +24,6 @@ dependencies:
28
24
  - - ">="
29
25
  - !ruby/object:Gem::Version
30
26
  version: '4.2'
31
- - - "<"
32
- - !ruby/object:Gem::Version
33
- version: '8'
34
27
  - !ruby/object:Gem::Dependency
35
28
  name: cocina-models
36
29
  requirement: !ruby/object:Gem::Requirement
@@ -129,6 +122,62 @@ dependencies:
129
122
  - - "~>"
130
123
  - !ruby/object:Gem::Version
131
124
  version: '3.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-capybara
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-factory_bot
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-performance
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
132
181
  - !ruby/object:Gem::Dependency
133
182
  name: rubocop-rspec
134
183
  requirement: !ruby/object:Gem::Requirement
@@ -144,7 +193,7 @@ dependencies:
144
193
  - !ruby/object:Gem::Version
145
194
  version: '0'
146
195
  - !ruby/object:Gem::Dependency
147
- name: simplecov
196
+ name: rubocop-rspec_rails
148
197
  requirement: !ruby/object:Gem::Requirement
149
198
  requirements:
150
199
  - - ">="
@@ -158,7 +207,7 @@ dependencies:
158
207
  - !ruby/object:Gem::Version
159
208
  version: '0'
160
209
  - !ruby/object:Gem::Dependency
161
- name: standard
210
+ name: simplecov
162
211
  requirement: !ruby/object:Gem::Requirement
163
212
  requirements:
164
213
  - - ">="
@@ -209,8 +258,6 @@ extra_rdoc_files: []
209
258
  files:
210
259
  - ".rspec"
211
260
  - ".rubocop.yml"
212
- - ".rubocop/custom.yml"
213
- - ".standard.yml"
214
261
  - Gemfile
215
262
  - Gemfile.lock
216
263
  - LICENSE
@@ -229,7 +276,6 @@ metadata:
229
276
  source_code_uri: https://github.com/sul-dlss/sul_orcid_client
230
277
  changelog_uri: https://github.com/sul-dlss/sul_orcid_client/releases
231
278
  rubygems_mfa_required: 'true'
232
- post_install_message:
233
279
  rdoc_options: []
234
280
  require_paths:
235
281
  - lib
@@ -244,8 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
290
  - !ruby/object:Gem::Version
245
291
  version: '0'
246
292
  requirements: []
247
- rubygems_version: 3.4.21
248
- signing_key:
293
+ rubygems_version: 3.6.3
249
294
  specification_version: 4
250
295
  summary: Interface for interacting with the ORCID API.
251
296
  test_files: []