uc3-dmp-id 0.1.2 → 0.1.3

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: 51832c144e5663dc01c805f92e81e50e63f2ce00200a8cad5525b7a34c9d7eb9
4
- data.tar.gz: e197deb7f608ef478716a8aea113e853ab0d3903f1496f970a73d31d30b7e892
3
+ metadata.gz: 10840ba39949ec387dd3016a717d75cf3ba5d259fe164fb54e9c2d436e74a24b
4
+ data.tar.gz: 398c7de1d549a738bfc574cdf56c71b1bff8400402aee5bc8b356fdcb9f01ecb
5
5
  SHA512:
6
- metadata.gz: 31bc5d1bb73176c2afff25715590c50d0612f558880f2bde3a750ac5ea8d49674c5dd9b00eff36960454c972a1a31aca6b4f853a98e995dd65977e1f82903ad2
7
- data.tar.gz: 86153dfeebc52570ecb83a012f4e7242e9bec607627c2dcefc5beb101a711199bc346c1388045127df89f13e65c83aa473c0fc77e37810d436ea939101b74f2b
6
+ metadata.gz: 793eeaf24f53e8a77e36596d91c56501f125f8d9272bd6b432dd05bc2d170d907d25fe213c276cf614ed8118884ac0be796cfa53e3d02c88ed91bf8660ab2f53
7
+ data.tar.gz: 8214ca8f136883170f45b025bc80e73e047ad2a6172837e08ab8f1b3dc48049d3038a95f4df278958c7b3d6a5b5b938a988ec88c3bb556bb0791c998c2603200
@@ -209,12 +209,8 @@ module Uc3DmpId
209
209
  end
210
210
  end
211
211
 
212
- def _score_related_work(latest_version:, work:)
212
+ def _score_related_work(latest_version:, work:); end
213
213
 
214
- end
215
-
216
- def _score_funding(latest_version:, funding:)
217
-
218
- end
214
+ def _score_funding(latest_version:, funding:); end
219
215
  end
220
216
  end
@@ -2,23 +2,24 @@
2
2
 
3
3
  require 'text'
4
4
 
5
+ # rubocop:disable Metrics/ClassLength
5
6
  module Uc3DmpId
6
7
  class ComparatorError < StandardError; end
7
8
 
8
9
  # Class that compares incoming data from an external source to the DMP
9
10
  # It determines if they are likely related and applies a confidence rating
10
11
  class Comparator
11
-
12
12
  MSG_MISSING_AUGMENTER = 'No Augmenter specified!'
13
13
  MSG_MISSING_DMP = 'No DMP or the DMP did not contain enough information to use.'
14
14
 
15
- STOP_WORDS = %w[a an and if of or the then they]
15
+ STOP_WORDS = %w[a an and if of or the then they].freeze
16
16
 
17
17
  # See the bottom of this file for a hard-coded crosswalk between Crossref funder ids and ROR ids
18
18
  # Some APIs do not support ROR fully for funder ids, so we need to be able to reference both
19
19
 
20
20
  attr_accessor :augmenter, :dmp, :details_hash, :logger
21
21
 
22
+ # rubocop:disable Metrics/AbcSize
22
23
  def initialize(**args)
23
24
  @logger = args[:logger]
24
25
  @details_hash = {}
@@ -31,6 +32,7 @@ module Uc3DmpId
31
32
  _extract_dmp_details(dmp:)
32
33
  raise ComparatorError, MSG_MISSING_DMP if @details_hash.empty?
33
34
  end
35
+ # rubocop:enable Metrics/AbcSize
34
36
 
35
37
  # Compare the incoming hash with the DMP details that were gathered during initialization.
36
38
  #
@@ -53,6 +55,7 @@ module Uc3DmpId
53
55
  # { id: ["http://some.repo.org", "https://doi.org/re3data123"], name: "Repo" }
54
56
  # ]
55
57
  # }
58
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
56
59
  def compare(hash:)
57
60
  response = { confidence: 'None', score: 0, notes: [], source: @augmenter['name'] }
58
61
  return response unless hash.is_a?(Hash) && !hash['title'].nil?
@@ -67,20 +70,27 @@ module Uc3DmpId
67
70
  response = _last_name_and_affiliation_match?(array: hash['people'], response:)
68
71
 
69
72
  # Only process the following if we had some matching contributors, affiliations or opportuniy nbrs
70
- response = _repository_match?(array: hash['repositories'], response:) if response[:score] > 0
71
- response = _keyword_match?(array: hash['repositories'], response:) if response[:score] > 0
72
- response = _text_match?(type: 'title', text: hash['title'], response:) if response[:score] > 0
73
- response = _text_match?(type: 'abstract', text: hash['abstract'], response:) if response[:score] > 0
73
+ response = _repository_match?(array: hash['repositories'], response:) if response[:score].positive?
74
+ response = _keyword_match?(array: hash['repositories'], response:) if response[:score].positive?
75
+ response = _text_match?(type: 'title', text: hash['title'], response:) if response[:score].positive?
76
+ response = _text_match?(type: 'abstract', text: hash['abstract'], response:) if response[:score].positive?
74
77
  # If the score is less than 3 then we have no confidence that it is a match
75
78
  return response if response[:score] <= 2
76
79
 
77
80
  # Set the confidence level based on the score
78
- response[:confidence] = response[:score] > 15 ? 'High' : (response[:score] > 10 ? 'Medium' : 'Low')
81
+ response[:confidence] = if response[:score] > 15
82
+ 'High'
83
+ else
84
+ (response[:score] > 10 ? 'Medium' : 'Low')
85
+ end
79
86
  response
80
87
  end
88
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
81
89
 
82
90
  private
83
91
 
92
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
93
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
84
94
  def _extract_dmp_details(dmp:)
85
95
  return nil unless dmp.is_a?(Hash) && !dmp['title'].nil? && !dmp['contact'].nil?
86
96
 
@@ -111,13 +121,16 @@ module Uc3DmpId
111
121
  _extract_repositories(repos: hosts.flatten.compact.uniq)
112
122
 
113
123
  # Clean up the results by flattening and removing duplicates from the Arrays
114
- @details_hash.keys.each do |key|
124
+ @details_hash.each_key do |key|
115
125
  @details_hash[key] = @details_hash[key].flatten.compact.uniq if @details_hash[key].is_a?(Array)
116
126
  end
117
- @logger&.debug(message: "Extracted the following from the DMP", details: @details_hash)
127
+ @logger&.debug(message: 'Extracted the following from the DMP', details: @details_hash)
118
128
  end
129
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
130
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
119
131
 
120
132
  # Extract all of the funding information
133
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
121
134
  def _extract_funding(array:)
122
135
  return [] unless array.is_a?(Array)
123
136
 
@@ -143,8 +156,10 @@ module Uc3DmpId
143
156
  end
144
157
  array
145
158
  end
159
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
146
160
 
147
161
  # Extract all of the ORCIDs, last names, and affiliation ids and names
162
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
148
163
  def _extract_people(array:)
149
164
  return [] unless array.is_a?(Array)
150
165
 
@@ -164,8 +179,10 @@ module Uc3DmpId
164
179
  end
165
180
  array
166
181
  end
182
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
167
183
 
168
184
  # Extract all of the re3data ids, URLs and names
185
+ # rubocop:disable Metrics/AbcSize
169
186
  def _extract_repositories(repos:)
170
187
  return [] unless repos.is_a?(Array)
171
188
 
@@ -179,11 +196,13 @@ module Uc3DmpId
179
196
  end
180
197
  repos
181
198
  end
199
+ # rubocop:enable Metrics/AbcSize
182
200
 
183
201
  # Returns whether or not the incoming grant id(s) match the DMPs grant id. Expecting:
184
202
  # [
185
203
  # { id: "https://doi.org/crossref123", name: "Bar", grant: ["1234", "http://foo.bar/543"] }
186
204
  # ]
205
+ # rubocop:disable Metrics/AbcSize
187
206
  def _grants_match?(array:, response:)
188
207
  return response unless array.is_a?(Array) && response.is_a?(Hash)
189
208
 
@@ -191,7 +210,7 @@ module Uc3DmpId
191
210
  .map { |funding| funding['grant'].map { |id| id&.downcase&.strip } }
192
211
  .flatten.compact.uniq
193
212
 
194
- matched = _compare_arrays(array_a: @details_hash.fetch(:grant_ids, []), array_b: ids)
213
+ matched = _compare_arrays(array_a: @details_hash.fetch(:grant_ids, []), array_b: ids)
195
214
  return response if matched <= 0
196
215
 
197
216
  response[:confidence] = 'Absolute'
@@ -199,11 +218,13 @@ module Uc3DmpId
199
218
  response[:notes] << 'the grant ID matched'
200
219
  response
201
220
  end
221
+ # rubocop:enable Metrics/AbcSize
202
222
 
203
223
  # Returns whether or not the incoming grant id(s) match the DMPs opportunity id. Expecting:
204
224
  # [
205
225
  # { id: "https://doi.org/crossref123", name: "Bar", grant: ["1234", "http://foo.bar/543"] }
206
226
  # ]
227
+ # rubocop:disable Metrics/AbcSize
207
228
  def _opportunities_match?(array:, response:)
208
229
  return response unless array.is_a?(Array) && response.is_a?(Hash)
209
230
 
@@ -211,13 +232,14 @@ module Uc3DmpId
211
232
  .map { |funding| funding['grant'].map { |id| id&.downcase&.strip } }
212
233
  .flatten.compact.uniq
213
234
 
214
- matched = _compare_arrays(array_a: @details_hash.fetch(:opportunity_ids, []), array_b: ids)
235
+ matched = _compare_arrays(array_a: @details_hash.fetch(:opportunity_ids, []), array_b: ids)
215
236
  return response if matched <= 0
216
237
 
217
238
  response[:score] += 5
218
239
  response[:notes] << 'the funding opportunity number matched'
219
240
  response
220
241
  end
242
+ # rubocop:enable Metrics/AbcSize
221
243
 
222
244
  # Returns whether or not the inciming list of creators/contributors match those on the DMP. Expecting:
223
245
  # [
@@ -227,6 +249,7 @@ module Uc3DmpId
227
249
  # affiliation: { id: "https://ror.org/blah", name: "Foo" }
228
250
  # }
229
251
  # ]
252
+ # rubocop:disable Metrics/AbcSize
230
253
  def _orcids_match?(array:, response:)
231
254
  return response unless array.is_a?(Array) && response.is_a?(Hash)
232
255
 
@@ -234,13 +257,14 @@ module Uc3DmpId
234
257
  .map { |person| person['id']&.downcase&.strip }
235
258
  .flatten.compact.uniq
236
259
 
237
- matched = _compare_arrays(array_a: @details_hash.fetch(:identifiers, []), array_b: ids)
260
+ matched = _compare_arrays(array_a: @details_hash.fetch(:identifiers, []), array_b: ids)
238
261
  return response if matched <= 0
239
262
 
240
263
  response[:score] += (matched * 2)
241
264
  response[:notes] << 'contributor ORCIDs matched'
242
265
  response
243
266
  end
267
+ # rubocop:enable Metrics/AbcSize
244
268
 
245
269
  # Returns whether or not the inciming list of creators/contributors match those on the DMP. Expecting:
246
270
  # [
@@ -250,6 +274,7 @@ module Uc3DmpId
250
274
  # affiliation: { id: "https://ror.org/blah", name: "Foo" }
251
275
  # }
252
276
  # ]
277
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
253
278
  def _last_name_and_affiliation_match?(array:, response:)
254
279
  return response unless array.is_a?(Array) && response.is_a?(Hash)
255
280
 
@@ -260,20 +285,22 @@ module Uc3DmpId
260
285
  affil_names = affiliations.map { |affil| affil['name']&.downcase&.strip }&.flatten&.compact&.uniq
261
286
 
262
287
  # Check the person last names and affiliation name and RORs
263
- last_names_matched = _compare_arrays(array_a: @details_hash.fetch(:last_names, []), array_b: last_names)
264
- rors_matched = _compare_arrays(array_a: @details_hash.fetch(:affiliation_ids, []), array_b: rors)
265
- affil_names_matched = _compare_arrays(array_a: @details_hash.fetch(:affiliations, []), array_b: affil_names)
288
+ last_names_matched = _compare_arrays(array_a: @details_hash.fetch(:last_names, []), array_b: last_names)
289
+ rors_matched = _compare_arrays(array_a: @details_hash.fetch(:affiliation_ids, []), array_b: rors)
290
+ affil_names_matched = _compare_arrays(array_a: @details_hash.fetch(:affiliations, []), array_b: affil_names)
266
291
  return response if last_names_matched <= 0 && rors_matched <= 0 && affil_names_matched <= 0
267
292
 
268
293
  response[:score] += last_names_matched + rors_matched + affil_names_matched
269
294
  response[:notes] << 'contributor names and affiliations matched'
270
295
  response
271
296
  end
297
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
272
298
 
273
299
  # Returns whether or not the incoming list of repositories match those defined in the DMP. Expecting:
274
300
  # [
275
301
  # { id: ["http://some.repo.org", "https://doi.org/re3data123"], name: "Repo" }
276
302
  # ]
303
+ # rubocop:disable Metrics/AbcSize
277
304
  def _repository_match?(array:, response:)
278
305
  return response unless array.is_a?(Array) && response.is_a?(Hash)
279
306
 
@@ -282,13 +309,14 @@ module Uc3DmpId
282
309
  .map { |repo| repo['id'].map { |id| id&.downcase&.strip } }
283
310
  .flatten.compact.uniq
284
311
 
285
- matched = _compare_arrays(array_a: @details_hash.fetch(:identifiers, []), array_b: ids)
312
+ matched = _compare_arrays(array_a: @details_hash.fetch(:identifiers, []), array_b: ids)
286
313
  return response if matched <= 0
287
314
 
288
315
  response[:score] += matched
289
316
  response[:notes] << 'repositories matched'
290
317
  response
291
318
  end
319
+ # rubocop:enable Metrics/AbcSize
292
320
 
293
321
  # Returns whether or not the list of keywords exist in the DMP. Expecting:
294
322
  # keywords: ["foo", "bar"]
@@ -296,7 +324,7 @@ module Uc3DmpId
296
324
  return response unless array.is_a?(Array) && response.is_a?(Hash)
297
325
 
298
326
  keywords = array.map { |word| word&.downcase&.strip }&.flatten&.compact&.uniq
299
- matched = _compare_arrays(array_a: @details_hash.fetch(:keywords, []), array_b: keywords)
327
+ matched = _compare_arrays(array_a: @details_hash.fetch(:keywords, []), array_b: keywords)
300
328
  return response if matched <= 0
301
329
 
302
330
  response[:score] += 1
@@ -305,7 +333,8 @@ module Uc3DmpId
305
333
  end
306
334
 
307
335
  # Uses an NLP library to determine if the :text matches the DMP/Project :title or :description
308
- def _text_match?(type: 'title', text:, response:, logger: nil)
336
+ # rubocop:disable Metrics/AbcSize
337
+ def _text_match?(text:, response:, type: 'title')
309
338
  return response unless response.is_a?(Hash) && text.is_a?(String) && !text.strip.empty? &&
310
339
  !@details_hash[type.to_sym].nil?
311
340
 
@@ -317,13 +346,14 @@ module Uc3DmpId
317
346
  "incoming_#{type}": cleansed,
318
347
  nlp_score: nlp_processor.similarity(@details_hash[type.to_sym], cleansed)
319
348
  }
320
- @logger&.debug(message: "Text::WhiteSimilarity score", details:)
349
+ @logger&.debug(message: 'Text::WhiteSimilarity score', details:)
321
350
  return response if details[:nlp_score] < 0.5
322
351
 
323
352
  response[:score] += details[:nlp_score] >= 0.75 ? 5 : 2
324
353
  response[:notes] << "#{type}s are similar"
325
354
  response
326
355
  end
356
+ # rubocop:enable Metrics/AbcSize
327
357
 
328
358
  # Change the incoming text to lower case, remove spaces and STOP_WORDS
329
359
  def _cleanse_text(text:)
@@ -343,158 +373,159 @@ module Uc3DmpId
343
373
  # TODO: Remove this hard-coded crosswalk once the community has broader support for using ROR for funder ids
344
374
  ROR_FUNDREF_ID_CROSSWALK = {
345
375
  # NIH ID Crosswalk
346
- "https://ror.org/01cwqze88": "https://doi.org/10.13039/100000002",
347
- "https://ror.org/04mhx6838": "https://doi.org/10.13039/100000055",
348
- "https://ror.org/012pb6c26": "https://doi.org/10.13039/100000050",
349
- "https://ror.org/03wkg3b53": "https://doi.org/10.13039/100000053",
350
- "https://ror.org/0060t0j89": "https://doi.org/10.13039/100000092",
351
- "https://ror.org/00372qc85": "https://doi.org/10.13039/100000070",
352
- "https://ror.org/00190t495": "https://doi.org/10.13039/100008460",
353
- "https://ror.org/00j4k1h63": "https://doi.org/10.13039/100000066",
354
- "https://ror.org/01y3zfr79": "https://doi.org/10.13039/100000056",
355
- "https://ror.org/04q48ey07": "https://doi.org/10.13039/100000057",
356
- "https://ror.org/0493hgw16": "https://doi.org/10.13039/100006545",
357
- "https://ror.org/04vfsmv21": "https://doi.org/10.13039/100000098",
358
- "https://ror.org/03jh5a977": "https://doi.org/10.13039/100000093",
359
- "https://ror.org/04xeg9z08": "https://doi.org/10.13039/100000025",
360
- "https://ror.org/01s5ya894": "https://doi.org/10.13039/100000065",
361
- "https://ror.org/02meqm098": "https://doi.org/10.13039/100000002",
362
- "https://ror.org/049v75w11": "https://doi.org/10.13039/100000049",
363
- "https://ror.org/004a2wv92": "https://doi.org/10.13039/100000072",
364
- "https://ror.org/00adh9b73": "https://doi.org/10.13039/100000062",
365
- "https://ror.org/043z4tv69": "https://doi.org/10.13039/100000060",
366
- "https://ror.org/00x19de83": "https://doi.org/10.13039/100000002",
367
- "https://ror.org/02jzrsm59": "https://doi.org/10.13039/100000027",
368
- "https://ror.org/006zn3t30": "https://doi.org/10.13039/100000069",
369
- "https://ror.org/04byxyr05": "https://doi.org/10.13039/100000071",
370
- "https://ror.org/04pw6fb54": "https://doi.org/10.13039/100006108",
371
- "https://ror.org/05aq6yn88": "https://doi.org/10.13039/100006955",
372
- "https://ror.org/02xey9a22": "https://doi.org/10.13039/100000061",
373
- "https://ror.org/00fj8a872": "https://doi.org/10.13039/100000052",
374
- "https://ror.org/01wtjyf13": "https://doi.org/10.13039/100000063",
375
- "https://ror.org/04r5s4b52": "https://doi.org/10.13039/100005440",
376
- "https://ror.org/046zezr58": "https://doi.org/10.13039/100006085",
377
- "https://ror.org/02e3wq066": "https://doi.org/10.13039/100006086",
378
- "https://ror.org/031gy6182": "https://doi.org/10.13039/100000002",
379
- "https://ror.org/054j5yq82": "https://doi.org/10.13039/100000002",
380
- "https://ror.org/02yrzyf97": "https://doi.org/10.13039/100000002",
376
+ 'https://ror.org/01cwqze88': 'https://doi.org/10.13039/100000002',
377
+ 'https://ror.org/04mhx6838': 'https://doi.org/10.13039/100000055',
378
+ 'https://ror.org/012pb6c26': 'https://doi.org/10.13039/100000050',
379
+ 'https://ror.org/03wkg3b53': 'https://doi.org/10.13039/100000053',
380
+ 'https://ror.org/0060t0j89': 'https://doi.org/10.13039/100000092',
381
+ 'https://ror.org/00372qc85': 'https://doi.org/10.13039/100000070',
382
+ 'https://ror.org/00190t495': 'https://doi.org/10.13039/100008460',
383
+ 'https://ror.org/00j4k1h63': 'https://doi.org/10.13039/100000066',
384
+ 'https://ror.org/01y3zfr79': 'https://doi.org/10.13039/100000056',
385
+ 'https://ror.org/04q48ey07': 'https://doi.org/10.13039/100000057',
386
+ 'https://ror.org/0493hgw16': 'https://doi.org/10.13039/100006545',
387
+ 'https://ror.org/04vfsmv21': 'https://doi.org/10.13039/100000098',
388
+ 'https://ror.org/03jh5a977': 'https://doi.org/10.13039/100000093',
389
+ 'https://ror.org/04xeg9z08': 'https://doi.org/10.13039/100000025',
390
+ 'https://ror.org/01s5ya894': 'https://doi.org/10.13039/100000065',
391
+ 'https://ror.org/02meqm098': 'https://doi.org/10.13039/100000002',
392
+ 'https://ror.org/049v75w11': 'https://doi.org/10.13039/100000049',
393
+ 'https://ror.org/004a2wv92': 'https://doi.org/10.13039/100000072',
394
+ 'https://ror.org/00adh9b73': 'https://doi.org/10.13039/100000062',
395
+ 'https://ror.org/043z4tv69': 'https://doi.org/10.13039/100000060',
396
+ 'https://ror.org/00x19de83': 'https://doi.org/10.13039/100000002',
397
+ 'https://ror.org/02jzrsm59': 'https://doi.org/10.13039/100000027',
398
+ 'https://ror.org/006zn3t30': 'https://doi.org/10.13039/100000069',
399
+ 'https://ror.org/04byxyr05': 'https://doi.org/10.13039/100000071',
400
+ 'https://ror.org/04pw6fb54': 'https://doi.org/10.13039/100006108',
401
+ 'https://ror.org/05aq6yn88': 'https://doi.org/10.13039/100006955',
402
+ 'https://ror.org/02xey9a22': 'https://doi.org/10.13039/100000061',
403
+ 'https://ror.org/00fj8a872': 'https://doi.org/10.13039/100000052',
404
+ 'https://ror.org/01wtjyf13': 'https://doi.org/10.13039/100000063',
405
+ 'https://ror.org/04r5s4b52': 'https://doi.org/10.13039/100005440',
406
+ 'https://ror.org/046zezr58': 'https://doi.org/10.13039/100006085',
407
+ 'https://ror.org/02e3wq066': 'https://doi.org/10.13039/100006086',
408
+ 'https://ror.org/031gy6182': 'https://doi.org/10.13039/100000002',
409
+ 'https://ror.org/054j5yq82': 'https://doi.org/10.13039/100000002',
410
+ 'https://ror.org/02yrzyf97': 'https://doi.org/10.13039/100000002',
381
411
 
382
412
  # NSF ID Crosswalk
383
- "https://.org/021nxhr62": "https://doi.org/10.13039/100000001",
384
- "https://.org/04aqat463": "https://doi.org/10.13039/100000001",
385
- "https://.org/01rcfpa16": "https://doi.org/10.13039/100005441",
386
- "https://.org/014eweh95": "https://doi.org/10.13039/100005445",
387
- "https://.org/001xhss06": "https://doi.org/10.13039/100000076",
388
- "https://.org/04qn9mx93": "https://doi.org/10.13039/100000153",
389
- "https://.org/03g87he71": "https://doi.org/10.13039/100000155",
390
- "https://.org/01tnvpc68": "https://doi.org/10.13039/100000156",
391
- "https://.org/01rvays47": "https://doi.org/10.13039/100000154",
392
- "https://.org/002jdaq33": "https://doi.org/10.13039/100000152",
393
- "https://.org/025kzpk63": "https://doi.org/10.13039/100000083",
394
- "https://.org/04nh1dc89": "https://doi.org/10.13039/100007523",
395
- "https://.org/01mng8331": "https://doi.org/10.13039/100000143",
396
- "https://.org/02rdzmk74": "https://doi.org/10.13039/100000144",
397
- "https://.org/053a2cp42": "https://doi.org/10.13039/100000145",
398
- "https://.org/014bj5w56": "https://doi.org/10.13039/100000081",
399
- "https://.org/00whkrf32": "https://doi.org/10.13039/100000082",
400
- "https://.org/05s7cqk18": "https://doi.org/10.13039/100000173",
401
- "https://.org/02kd4km72": "https://doi.org/10.13039/100000172",
402
- "https://.org/03mamvh39": "https://doi.org/10.13039/100000171",
403
- "https://.org/00b6sbb32": "https://doi.org/10.13039/100000084",
404
- "https://.org/0471zv972": "https://doi.org/10.13039/100000146",
405
- "https://.org/028yd4c30": "https://doi.org/10.13039/100000147",
406
- "https://.org/01krpsy48": "https://doi.org/10.13039/100000148",
407
- "https://.org/050rnw378": "https://doi.org/10.13039/100000149",
408
- "https://.org/0388pet74": "https://doi.org/10.13039/100000150",
409
- "https://.org/03xyg3m20": "https://doi.org/10.13039/100000151",
410
- "https://.org/05p847d66": "https://doi.org/10.13039/100000085",
411
- "https://.org/037gd6g64": "https://doi.org/10.13039/100000159",
412
- "https://.org/05v01mk25": "https://doi.org/10.13039/100000160",
413
- "https://.org/05wqqhv83": "https://doi.org/10.13039/100000141",
414
- "https://.org/05nwjp114": "https://doi.org/10.13039/100007352",
415
- "https://.org/05fnzca26": "https://doi.org/10.13039/100000162",
416
- "https://.org/02trddg58": "https://doi.org/10.13039/100000163",
417
- "https://.org/029b7h395": "https://doi.org/10.13039/100000086",
418
- "https://.org/04mg8wm74": "https://doi.org/10.13039/100000164",
419
- "https://.org/01ar8dr59": "https://doi.org/10.13039/100000165",
420
- "https://.org/01pc7k308": "https://doi.org/10.13039/100000078",
421
- "https://.org/051fftw81": "https://doi.org/10.13039/100000121",
422
- "https://.org/04ap5x931": "https://doi.org/10.13039/100000166",
423
- "https://.org/00apvva27": "https://doi.org/10.13039/100005716",
424
- "https://.org/04nseet23": "https://doi.org/10.13039/100000179",
425
- "https://.org/04k9mqs78": "https://doi.org/10.13039/100000106",
426
- "https://.org/01k638r21": "https://doi.org/10.13039/100000089",
427
- "https://.org/01gmp5538": "https://doi.org/10.13039/100005447",
428
- "https://.org/01vnjbg30": "https://doi.org/10.13039/100005449",
429
- "https://.org/03h7mcc28": "https://doi.org/10.13039/100000088",
430
- "https://.org/05wgkzg12": "https://doi.org/10.13039/100000169",
431
- "https://.org/0445wmv88": "https://doi.org/10.13039/100000170",
432
- "https://.org/02dz2hb46": "https://doi.org/10.13039/100000077",
433
- "https://.org/034m1ez10": "https://doi.org/10.13039/100000107",
434
- "https://.org/02a65dj82": "https://doi.org/10.13039/100005717",
435
- "https://.org/020fhsn68": "https://doi.org/10.13039/100000001",
436
- "https://.org/03z9hh605": "https://doi.org/10.13039/100000174",
437
- "https://.org/04ya3kq71": "https://doi.org/10.13039/100007521",
438
- "https://.org/04evh7y43": "https://doi.org/10.13039/100005443",
439
- "https://.org/04h67aa53": "https://doi.org/10.13039/100000177",
440
- "https://.org/025dabr11": "https://doi.org/10.13039/100005446",
441
- "https://.org/04vw0kz07": "https://doi.org/10.13039/100005448",
442
- "https://.org/054ydxh33": "https://doi.org/10.13039/100005554",
443
- "https://.org/01sharn77": "https://doi.org/10.13039/100006091",
444
- "https://.org/02ch5q898": "https://doi.org/10.13039/100000001",
413
+ 'https://.org/021nxhr62': 'https://doi.org/10.13039/100000001',
414
+ 'https://.org/04aqat463': 'https://doi.org/10.13039/100000001',
415
+ 'https://.org/01rcfpa16': 'https://doi.org/10.13039/100005441',
416
+ 'https://.org/014eweh95': 'https://doi.org/10.13039/100005445',
417
+ 'https://.org/001xhss06': 'https://doi.org/10.13039/100000076',
418
+ 'https://.org/04qn9mx93': 'https://doi.org/10.13039/100000153',
419
+ 'https://.org/03g87he71': 'https://doi.org/10.13039/100000155',
420
+ 'https://.org/01tnvpc68': 'https://doi.org/10.13039/100000156',
421
+ 'https://.org/01rvays47': 'https://doi.org/10.13039/100000154',
422
+ 'https://.org/002jdaq33': 'https://doi.org/10.13039/100000152',
423
+ 'https://.org/025kzpk63': 'https://doi.org/10.13039/100000083',
424
+ 'https://.org/04nh1dc89': 'https://doi.org/10.13039/100007523',
425
+ 'https://.org/01mng8331': 'https://doi.org/10.13039/100000143',
426
+ 'https://.org/02rdzmk74': 'https://doi.org/10.13039/100000144',
427
+ 'https://.org/053a2cp42': 'https://doi.org/10.13039/100000145',
428
+ 'https://.org/014bj5w56': 'https://doi.org/10.13039/100000081',
429
+ 'https://.org/00whkrf32': 'https://doi.org/10.13039/100000082',
430
+ 'https://.org/05s7cqk18': 'https://doi.org/10.13039/100000173',
431
+ 'https://.org/02kd4km72': 'https://doi.org/10.13039/100000172',
432
+ 'https://.org/03mamvh39': 'https://doi.org/10.13039/100000171',
433
+ 'https://.org/00b6sbb32': 'https://doi.org/10.13039/100000084',
434
+ 'https://.org/0471zv972': 'https://doi.org/10.13039/100000146',
435
+ 'https://.org/028yd4c30': 'https://doi.org/10.13039/100000147',
436
+ 'https://.org/01krpsy48': 'https://doi.org/10.13039/100000148',
437
+ 'https://.org/050rnw378': 'https://doi.org/10.13039/100000149',
438
+ 'https://.org/0388pet74': 'https://doi.org/10.13039/100000150',
439
+ 'https://.org/03xyg3m20': 'https://doi.org/10.13039/100000151',
440
+ 'https://.org/05p847d66': 'https://doi.org/10.13039/100000085',
441
+ 'https://.org/037gd6g64': 'https://doi.org/10.13039/100000159',
442
+ 'https://.org/05v01mk25': 'https://doi.org/10.13039/100000160',
443
+ 'https://.org/05wqqhv83': 'https://doi.org/10.13039/100000141',
444
+ 'https://.org/05nwjp114': 'https://doi.org/10.13039/100007352',
445
+ 'https://.org/05fnzca26': 'https://doi.org/10.13039/100000162',
446
+ 'https://.org/02trddg58': 'https://doi.org/10.13039/100000163',
447
+ 'https://.org/029b7h395': 'https://doi.org/10.13039/100000086',
448
+ 'https://.org/04mg8wm74': 'https://doi.org/10.13039/100000164',
449
+ 'https://.org/01ar8dr59': 'https://doi.org/10.13039/100000165',
450
+ 'https://.org/01pc7k308': 'https://doi.org/10.13039/100000078',
451
+ 'https://.org/051fftw81': 'https://doi.org/10.13039/100000121',
452
+ 'https://.org/04ap5x931': 'https://doi.org/10.13039/100000166',
453
+ 'https://.org/00apvva27': 'https://doi.org/10.13039/100005716',
454
+ 'https://.org/04nseet23': 'https://doi.org/10.13039/100000179',
455
+ 'https://.org/04k9mqs78': 'https://doi.org/10.13039/100000106',
456
+ 'https://.org/01k638r21': 'https://doi.org/10.13039/100000089',
457
+ 'https://.org/01gmp5538': 'https://doi.org/10.13039/100005447',
458
+ 'https://.org/01vnjbg30': 'https://doi.org/10.13039/100005449',
459
+ 'https://.org/03h7mcc28': 'https://doi.org/10.13039/100000088',
460
+ 'https://.org/05wgkzg12': 'https://doi.org/10.13039/100000169',
461
+ 'https://.org/0445wmv88': 'https://doi.org/10.13039/100000170',
462
+ 'https://.org/02dz2hb46': 'https://doi.org/10.13039/100000077',
463
+ 'https://.org/034m1ez10': 'https://doi.org/10.13039/100000107',
464
+ 'https://.org/02a65dj82': 'https://doi.org/10.13039/100005717',
465
+ 'https://.org/020fhsn68': 'https://doi.org/10.13039/100000001',
466
+ 'https://.org/03z9hh605': 'https://doi.org/10.13039/100000174',
467
+ 'https://.org/04ya3kq71': 'https://doi.org/10.13039/100007521',
468
+ 'https://.org/04evh7y43': 'https://doi.org/10.13039/100005443',
469
+ 'https://.org/04h67aa53': 'https://doi.org/10.13039/100000177',
470
+ 'https://.org/025dabr11': 'https://doi.org/10.13039/100005446',
471
+ 'https://.org/04vw0kz07': 'https://doi.org/10.13039/100005448',
472
+ 'https://.org/054ydxh33': 'https://doi.org/10.13039/100005554',
473
+ 'https://.org/01sharn77': 'https://doi.org/10.13039/100006091',
474
+ 'https://.org/02ch5q898': 'https://doi.org/10.13039/100000001',
445
475
 
446
476
  # NASA ID Crosswalk
447
- "https://.org/0171mag52": "https://doi.org/10.13039/100006198",
448
- "https://.org/027k65916": "https://doi.org/10.13039/100006196",
449
- "https://.org/027ka1x80": "https://doi.org/10.13039/100000104",
450
- "https://.org/02acart68": "https://doi.org/10.13039/100006195",
451
- "https://.org/059fqnc42": "https://doi.org/10.13039/100006193",
452
- "https://.org/01cyfxe35": "https://doi.org/10.13039/100016595",
453
- "https://.org/04xx4z452": "https://doi.org/10.13039/100006203",
454
- "https://.org/0399mhs52": "https://doi.org/10.13039/100006199",
455
- "https://.org/02epydz83": "https://doi.org/10.13039/100006197",
456
- "https://.org/03j9e2j92": "https://doi.org/10.13039/100006205",
457
- "https://.org/02s42x260": "https://doi.org/10.13039/100000104",
458
- "https://.org/01p7gwa14": "https://doi.org/10.13039/100000104",
459
- "https://.org/01qxmdg18": "https://doi.org/10.13039/100000104",
460
- "https://.org/006ndaj41": "https://doi.org/10.13039/100000104",
461
- "https://.org/03em45j53": "https://doi.org/10.13039/100007346",
462
- "https://.org/045t78n53": "https://doi.org/10.13039/100000104",
463
- "https://.org/00r57r863": "https://doi.org/10.13039/100000104",
464
- "https://.org/0401vze59": "https://doi.org/10.13039/100007726",
465
- "https://.org/04hccab49": "https://doi.org/10.13039/100000104",
466
- "https://.org/04437j066": "https://doi.org/10.13039/100000104",
467
- "https://.org/028b18z22": "https://doi.org/10.13039/100000104",
468
- "https://.org/00ryjtt64": "https://doi.org/10.13039/100000104",
477
+ 'https://.org/0171mag52': 'https://doi.org/10.13039/100006198',
478
+ 'https://.org/027k65916': 'https://doi.org/10.13039/100006196',
479
+ 'https://.org/027ka1x80': 'https://doi.org/10.13039/100000104',
480
+ 'https://.org/02acart68': 'https://doi.org/10.13039/100006195',
481
+ 'https://.org/059fqnc42': 'https://doi.org/10.13039/100006193',
482
+ 'https://.org/01cyfxe35': 'https://doi.org/10.13039/100016595',
483
+ 'https://.org/04xx4z452': 'https://doi.org/10.13039/100006203',
484
+ 'https://.org/0399mhs52': 'https://doi.org/10.13039/100006199',
485
+ 'https://.org/02epydz83': 'https://doi.org/10.13039/100006197',
486
+ 'https://.org/03j9e2j92': 'https://doi.org/10.13039/100006205',
487
+ 'https://.org/02s42x260': 'https://doi.org/10.13039/100000104',
488
+ 'https://.org/01p7gwa14': 'https://doi.org/10.13039/100000104',
489
+ 'https://.org/01qxmdg18': 'https://doi.org/10.13039/100000104',
490
+ 'https://.org/006ndaj41': 'https://doi.org/10.13039/100000104',
491
+ 'https://.org/03em45j53': 'https://doi.org/10.13039/100007346',
492
+ 'https://.org/045t78n53': 'https://doi.org/10.13039/100000104',
493
+ 'https://.org/00r57r863': 'https://doi.org/10.13039/100000104',
494
+ 'https://.org/0401vze59': 'https://doi.org/10.13039/100007726',
495
+ 'https://.org/04hccab49': 'https://doi.org/10.13039/100000104',
496
+ 'https://.org/04437j066': 'https://doi.org/10.13039/100000104',
497
+ 'https://.org/028b18z22': 'https://doi.org/10.13039/100000104',
498
+ 'https://.org/00ryjtt64': 'https://doi.org/10.13039/100000104',
469
499
 
470
500
  # DOE ID Crosswalk
471
- "https://ror.org/01bj3aw27": "https://doi.org/10.13039/100000015",
472
- "https://ror.org/03q1rgc19": "https://doi.org/10.13039/100006133",
473
- "https://ror.org/02xznz413": "https://doi.org/10.13039/100006134",
474
- "https://ror.org/03sk1we31": "https://doi.org/10.13039/100006168",
475
- "https://ror.org/00f93gc02": "https://doi.org/10.13039/100006177",
476
- "https://ror.org/05tj7dm33": "https://doi.org/10.13039/100006147",
477
- "https://ror.org/0012c7r22": "https://doi.org/10.13039/100006192",
478
- "https://ror.org/00mmn6b08": "https://doi.org/10.13039/100006132",
479
- "https://ror.org/03ery9d53": "https://doi.org/10.13039/100006120",
480
- "https://ror.org/033jmdj81": "https://doi.org/10.13039/100000015",
481
- "https://ror.org/03rd4h240": "https://doi.org/10.13039/100006130",
482
- "https://ror.org/0054t4769": "https://doi.org/10.13039/100006200",
483
- "https://ror.org/03eecgp81": "https://doi.org/10.13039/100006174",
484
- "https://ror.org/00heb4d89": "https://doi.org/10.13039/100006135",
485
- "https://ror.org/05ek3m339": "https://doi.org/10.13039/100006150",
486
- "https://ror.org/00km40770": "https://doi.org/10.13039/100006138",
487
- "https://ror.org/02ah1da87": "https://doi.org/10.13039/100006137",
488
- "https://ror.org/05hsv7e61": "https://doi.org/10.13039/100000015",
489
- "https://ror.org/01c9ay627": "https://doi.org/10.13039/100006165",
490
- "https://ror.org/04z2gev20": "https://doi.org/10.13039/100006183",
491
- "https://ror.org/02z1qvq09": "https://doi.org/10.13039/100006144",
492
- "https://ror.org/03jf3w726": "https://doi.org/10.13039/100006186",
493
- "https://ror.org/04848jz84": "https://doi.org/10.13039/100006142",
494
- "https://ror.org/04s778r16": "https://doi.org/10.13039/100006171",
495
- "https://ror.org/04nnxen11": "https://doi.org/10.13039/100000015",
496
- "https://ror.org/05csy5p27": "https://doi.org/10.13039/100010268",
497
- "https://ror.org/05efnac71": "https://doi.org/10.13039/100000015"
498
- }
501
+ 'https://ror.org/01bj3aw27': 'https://doi.org/10.13039/100000015',
502
+ 'https://ror.org/03q1rgc19': 'https://doi.org/10.13039/100006133',
503
+ 'https://ror.org/02xznz413': 'https://doi.org/10.13039/100006134',
504
+ 'https://ror.org/03sk1we31': 'https://doi.org/10.13039/100006168',
505
+ 'https://ror.org/00f93gc02': 'https://doi.org/10.13039/100006177',
506
+ 'https://ror.org/05tj7dm33': 'https://doi.org/10.13039/100006147',
507
+ 'https://ror.org/0012c7r22': 'https://doi.org/10.13039/100006192',
508
+ 'https://ror.org/00mmn6b08': 'https://doi.org/10.13039/100006132',
509
+ 'https://ror.org/03ery9d53': 'https://doi.org/10.13039/100006120',
510
+ 'https://ror.org/033jmdj81': 'https://doi.org/10.13039/100000015',
511
+ 'https://ror.org/03rd4h240': 'https://doi.org/10.13039/100006130',
512
+ 'https://ror.org/0054t4769': 'https://doi.org/10.13039/100006200',
513
+ 'https://ror.org/03eecgp81': 'https://doi.org/10.13039/100006174',
514
+ 'https://ror.org/00heb4d89': 'https://doi.org/10.13039/100006135',
515
+ 'https://ror.org/05ek3m339': 'https://doi.org/10.13039/100006150',
516
+ 'https://ror.org/00km40770': 'https://doi.org/10.13039/100006138',
517
+ 'https://ror.org/02ah1da87': 'https://doi.org/10.13039/100006137',
518
+ 'https://ror.org/05hsv7e61': 'https://doi.org/10.13039/100000015',
519
+ 'https://ror.org/01c9ay627': 'https://doi.org/10.13039/100006165',
520
+ 'https://ror.org/04z2gev20': 'https://doi.org/10.13039/100006183',
521
+ 'https://ror.org/02z1qvq09': 'https://doi.org/10.13039/100006144',
522
+ 'https://ror.org/03jf3w726': 'https://doi.org/10.13039/100006186',
523
+ 'https://ror.org/04848jz84': 'https://doi.org/10.13039/100006142',
524
+ 'https://ror.org/04s778r16': 'https://doi.org/10.13039/100006171',
525
+ 'https://ror.org/04nnxen11': 'https://doi.org/10.13039/100000015',
526
+ 'https://ror.org/05csy5p27': 'https://doi.org/10.13039/100010268',
527
+ 'https://ror.org/05efnac71': 'https://doi.org/10.13039/100000015'
528
+ }.freeze
499
529
  end
500
530
  end
531
+ # rubocop:enable Metrics/ClassLength
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uc3DmpId
4
- VERSION = '0.1.2'
4
+ VERSION = '0.1.3'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uc3-dmp-id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Riley