uc3-dmp-id 0.0.64 → 0.0.66

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: 9a0c6efaee7727ad373bdccdc9184e12d1abefafe3834768c210d949d854c669
4
- data.tar.gz: 0c771250b7459256822a87dc99bdbc720ebca8cc2f4d5a5c53ccfcf5a8a0d0aa
3
+ metadata.gz: b2d9a4bba715adc0eb2b0101d9484d8a57ea7f3643a3cd63088191fa82da5157
4
+ data.tar.gz: b42b00fa9a0bfae9c4f69539ebb612f9c2ab063fe20b1d96987a62cbe35cae60
5
5
  SHA512:
6
- metadata.gz: 98025dcd7ccdd69b284b910d8391a715c2b2b72799398cf432bf1688efc25b22caf7f25e5b5ca0eb2d528b7256703304f287fa15b92cc9df6ce96d4aa4e7c738
7
- data.tar.gz: bdc3d64ec36a853aca5ec44d32a415b65dc868b83c3bd48ce4054aae2a546a8005b3f25400d6bd759ef8fb6085e1f0bdfea16c1b4b6e178e1861e443a9a1cb3e
6
+ metadata.gz: aba3791e3f85c77c3b1fce370e8d4c62e441148c2ea399074ad794505165fb9475488b552001f29613eaf5540e300a3271fe66b83af55bb6410679526828906b
7
+ data.tar.gz: e5d2470504ff9dbc2d9c61552c69a20229de6ae29d32361df1cf197b4ca97252bfb2d353c3126f42ab2a9b5f601e18a39ef1d6b4ccb6949caa1b2cfdeb7dcdb5
@@ -38,7 +38,7 @@ module Uc3DmpId
38
38
  raise CreatorError, MSG_UNABLE_TO_MINT if p_key.nil?
39
39
 
40
40
  # Add the DMPHub specific attributes and then save
41
- annotated = Helper.annotate_dmp_json(provenance: provenance, owner_org: owner_org, p_key: p_key, json: json['dmp'])
41
+ annotated = Helper.annotate_dmp_json(provenance: provenance, p_key: p_key, json: json['dmp'])
42
42
  puts "CREATING DMP ID:" if debug
43
43
  puts annotated if debug
44
44
 
@@ -133,16 +133,32 @@ module Uc3DmpId
133
133
  a == b
134
134
  end
135
135
 
136
+ # Extract the Contact's ORCID id
137
+ def extract_owner_id(json: {})
138
+ return nil unless json.is_a?(Hash)
139
+
140
+ dmp = json['dmp'].nil? ? json : json['dmp']
141
+ owner_org = dmp.fetch('contact', {}).fetch('contact_id', {})['identifier']
142
+
143
+ dmp.fetch('contributor', []).map do { |contributor| contributor.fetch('contact_id', {})['identifier'] }.first
144
+ end
145
+
136
146
  # Extract the Contact's affiliaiton ROR ID
137
147
  def extract_owner_org(json: {})
138
148
  return nil unless json.is_a?(Hash)
139
149
 
140
150
  dmp = json['dmp'].nil? ? json : json['dmp']
141
151
  owner_org = dmp.fetch('contact', {}).fetch('dmproadmap_affiliation', {}).fetch('affiliation_id', {})['identifier']
152
+ return owner_org unless owner_org.nil?
153
+
154
+ orgs = dmp.fetch('contributor', []).map do |contributor|
155
+ contributor.fetch('dmproadmap_affiliation', {}).fetch('affiliation_id', {})['identifier']
156
+ end
157
+ orgs.compact.max_by { |i| orgs.count(i) }
142
158
  end
143
159
 
144
160
  # Add DMPHub specific fields to the DMP ID JSON
145
- def annotate_dmp_json(provenance:, owner_org:, p_key:, json:)
161
+ def annotate_dmp_json(provenance:, p_key:, json:)
146
162
  json = parse_json(json: json)
147
163
  return json if provenance.nil? || owner_org.nil? || p_key.nil? || !json.is_a?(Hash)
148
164
 
@@ -157,9 +173,13 @@ module Uc3DmpId
157
173
  # Ensure that the :dmp_id matches the :PK
158
174
  annotated['dmp_id'] = pk_to_dmp_id(p_key: remove_pk_prefix(p_key: annotated['PK']))
159
175
 
176
+ owner_id = extract_owner_id(json: json)
177
+ owner_org = extract_owner_org(json: json)
178
+
160
179
  # Update the modification timestamps
161
180
  annotated['dmphub_modification_day'] = Time.now.strftime('%Y-%m-%d')
162
- annotated['dmphub_owner_org'] = owner_org.to_s
181
+ annotated['dmphub_owner_id'] = owner_id unless owner_id.nil?
182
+ annotated['dmphub_owner_org'] = owner_org unless owner_org.nil?
163
183
  annotated['dmphub_updated_at'] = Time.now.iso8601
164
184
  # Only add the Creation date if it is blank
165
185
  annotated['dmphub_created_at'] = Time.now.iso8601 if json['dmphub_created_at'].nil?
@@ -181,10 +201,6 @@ module Uc3DmpId
181
201
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
182
202
  def cleanse_dmp_json(json:)
183
203
  return json unless json.is_a?(Hash) || json.is_a?(Array)
184
-
185
- puts "Cleansing DMP JSON:"
186
- puts json
187
-
188
204
  # If it's an array clean each of the objects individually
189
205
  return json.map { |obj| cleanse_dmp_json(json: obj) }.compact if json.is_a?(Array)
190
206
 
@@ -46,7 +46,6 @@ module Uc3DmpId
46
46
  # fetch the existing latest version of the DMP ID
47
47
  client = Uc3DmpDynamo::Client.new(debug: debug)
48
48
  dmp = Finder.by_pk(p_key: p_key, client: client, debug: debug)
49
- owner_org = Helper.extract_owner_org(json: dmp)
50
49
  # Don't continue if DMP ID could not be found or the contact has no identifier (should be impossible)
51
50
  raise UpdaterError, MSG_DMP_NOT_FOUND if dmp.nil? || owner_org.nil?
52
51
 
@@ -54,7 +53,7 @@ module Uc3DmpId
54
53
  raise UpdaterError, errs if errs.is_a?(Array) && errs.any?
55
54
 
56
55
  # Add the DMPHub specific attributes and then add the download URl for the PDF
57
- annotated = Helper.annotate_dmp_json(provenance: provenance, owner_org: owner_org, p_key: p_key, json: dmp['dmp'])
56
+ annotated = Helper.annotate_dmp_json(provenance: provenance, p_key: p_key, json: dmp['dmp'])
58
57
  annotated['dmproadmap_related_identifiers'] = [] if annotated['dmproadmap_related_identifiers'].nil?
59
58
  annotated['dmproadmap_related_identifiers'] << {
60
59
  descriptor: 'is_metadata_for', work_type: 'output_management_plan', type: 'url', identifier: url
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uc3DmpId
4
- VERSION = '0.0.64'
4
+ VERSION = '0.0.66'
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.0.64
4
+ version: 0.0.66
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Riley