uc3-dmp-id 0.1.2 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 51832c144e5663dc01c805f92e81e50e63f2ce00200a8cad5525b7a34c9d7eb9
4
- data.tar.gz: e197deb7f608ef478716a8aea113e853ab0d3903f1496f970a73d31d30b7e892
3
+ metadata.gz: ca2358a541ef077a0333d27765542713e1312fc3fed793d87b577a1abdc76834
4
+ data.tar.gz: 19b6b5f67cc27e77fe267234dd887580f5b6dae60229fab006cd3fad3021b0f1
5
5
  SHA512:
6
- metadata.gz: 31bc5d1bb73176c2afff25715590c50d0612f558880f2bde3a750ac5ea8d49674c5dd9b00eff36960454c972a1a31aca6b4f853a98e995dd65977e1f82903ad2
7
- data.tar.gz: 86153dfeebc52570ecb83a012f4e7242e9bec607627c2dcefc5beb101a711199bc346c1388045127df89f13e65c83aa473c0fc77e37810d436ea939101b74f2b
6
+ metadata.gz: 6cff537349cf7ee95e1493589b614403e09a6d61b6d2c2d2e90238ce16867b749b70d74ca4e3442a01c3805f223276d01bb14eb88cd945523c4e3f3211e55cf2
7
+ data.tar.gz: 45f85054462bad1212a1b8470af12b75869dd37b6cfc37d7d46b100ac7adfd18e83a9b05cb8267950dab4280045239e5c97efa66fe6e0699e1b432c610ce97d2
@@ -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.4'
5
5
  end
data/lib/uc3-dmp-id.rb CHANGED
@@ -7,6 +7,7 @@ require 'json-schema'
7
7
  require 'uc3-dmp-event-bridge'
8
8
 
9
9
  require 'uc3-dmp-id/asserter'
10
+ require 'uc3-dmp-id/comparator'
10
11
  require 'uc3-dmp-id/creator'
11
12
  require 'uc3-dmp-id/deleter'
12
13
  require 'uc3-dmp-id/finder'
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.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Riley