uc3-dmp-id 0.0.140 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,6 +6,7 @@ require 'time'
6
6
  module Uc3DmpId
7
7
  class UpdaterError < StandardError; end
8
8
 
9
+ # Class that handles updating a DMP ID
9
10
  class Updater
10
11
  class << self
11
12
  # Update a DMP ID
@@ -13,137 +14,166 @@ module Uc3DmpId
13
14
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
14
15
  # -------------------------------------------------------------------------
15
16
  def update(provenance:, p_key:, json: {}, note: nil, logger: nil)
16
- raise UpdaterError, MSG_DMP_INVALID_DMP_ID unless p_key.is_a?(String) && !p_key.strip.empty?
17
+ raise UpdaterError, Helper::MSG_DMP_INVALID_DMP_ID unless p_key.is_a?(String) && !p_key.strip.empty?
17
18
 
18
- mods = Helper.parse_json(json: json).fetch('dmp', {})
19
- p_key = Helper.append_pk_prefix(p_key: p_key)
19
+ mods = Helper.parse_json(json:).fetch('dmp', {})
20
+ p_key = Helper.append_pk_prefix(p_key:)
20
21
  logger.debug(message: "Incoming modifications for PK #{p_key}", details: mods) if logger.respond_to?(:debug)
21
22
 
22
23
  # Fetch the latest version of the DMP ID
23
24
  client = Uc3DmpDynamo::Client.new
24
- latest_version = Finder.by_pk(p_key: p_key, client: client, logger: logger, cleanse: false)
25
- latest_version = latest_version['dmp'].nil? ? latest_version : latest_version.fetch('dmp', {})
25
+ latest_version = Finder.by_pk(p_key:, client:, logger:, cleanse: false)
26
+ latest_version = latest_version.fetch('dmp', {}) unless latest_version['dmp'].nil?
26
27
  logger.debug(message: "Latest version for PK #{p_key}", details: latest_version) if logger.respond_to?(:debug)
27
28
 
28
29
  # Verify that the DMP ID is updateable with the info passed in
29
- errs = _updateable?(provenance: provenance, p_key: p_key, latest_version: latest_version['dmp'], mods: mods['dmp'])
30
- logger.error(message: errs.join(', ')) if errs.is_a?(Array) && errs.any?
30
+ errs = _updateable?(provenance:, p_key:, latest_version: latest_version['dmp'],
31
+ mods: mods['dmp'])
32
+ logger.error(message: errs.join(', ')) if logger.respond_to?(:error) && errs.is_a?(Array) && errs.any?
31
33
  raise UpdaterError, errs if errs.is_a?(Array) && errs.any?
32
34
  # Don't continue if nothing has changed!
33
- raise UpdaterError, MSG_NO_CHANGE if Helper.eql?(dmp_a: latest_version, dmp_b: mods)
35
+ raise UpdaterError, Helper::MSG_NO_CHANGE if Helper.eql?(dmp_a: latest_version, dmp_b: mods)
34
36
 
35
37
  # Version the DMP ID record (if applicable).
36
38
  owner = latest_version['dmphub_provenance_id']
37
39
  updater = provenance['PK']
38
- version = Versioner.generate_version(client: client, latest_version: latest_version, owner: owner, updater: updater,
39
- logger: logger)
40
- raise UpdaterError, MSG_DMP_UNABLE_TO_VERSION if version.nil?
40
+ version = Versioner.generate_version(client:, latest_version:, owner:,
41
+ updater:, logger:)
42
+ raise UpdaterError, Helper::MSG_DMP_UNABLE_TO_VERSION if version.nil?
41
43
 
42
44
  # Remove the version info because we don't want to save it on the record
43
45
  version.delete('dmphub_versions')
44
46
 
45
47
  # Splice the assertions
46
- version = _process_modifications(owner: owner, updater: updater, version: version, mods: mods, note: note,
47
- logger: logger)
48
-
48
+ version = _process_modifications(owner:, updater:, version:, mods:, note:,
49
+ logger:)
49
50
  # Set the :modified timestamps
50
- now = Time.now.utc.iso8601
51
- version['modified'] = now
51
+ now = Time.now.utc
52
+ version['modified'] = now.iso8601
53
+ version['dmphub_modification_day'] = now.strftime('%Y-%m-%d')
52
54
 
53
55
  # Save the changes
54
- resp = client.put_item(json: version, logger: logger)
55
- raise UpdaterError, MSG_DMP_UNABLE_TO_VERSION if resp.nil?
56
+ resp = client.put_item(json: version, logger:)
57
+ raise UpdaterError, Helper::MSG_DMP_UNABLE_TO_VERSION if resp.nil?
56
58
 
57
59
  # Send the updates to EZID
58
- _post_process(provenance: provenance, json: version, logger: logger)
60
+ _post_process(provenance:, json: version, logger:)
59
61
 
60
62
  # Return the new version record
61
63
  logger.info(message: "Updated DMP ID: #{p_key}") if logger.respond_to?(:debug)
62
- Helper.cleanse_dmp_json(json: JSON.parse({ dmp: version }.to_json))
64
+
65
+ # Append the :dmphub_versions Array
66
+ json = JSON.parse({ dmp: version }.to_json)
67
+ json = Versioner.append_versions(p_key:, dmp: json, client:, logger:)
68
+ Helper.cleanse_dmp_json(json:)
63
69
  end
64
70
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
65
71
  # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
66
72
 
67
73
  # Save a DMP ID's corresponding narrative PDF document to S3 and add the download URL for that
68
74
  # document to the DMP ID's :dmpraodmap_related_identifiers array as an `is_metadata_for` relation
75
+ # rubocop:disable Metrics/AbcSize
69
76
  def attach_narrative(provenance:, p_key:, url:, logger: nil)
70
- raise UpdaterError, MSG_DMP_INVALID_DMP_ID unless p_key.is_a?(String) && !p_key.strip.empty?
77
+ raise UpdaterError, Helper::MSG_DMP_INVALID_DMP_ID unless p_key.is_a?(String) && !p_key.strip.empty?
71
78
 
72
79
  # fetch the existing latest version of the DMP ID
73
- client = Uc3DmpDynamo::Client.new(logger: logger)
74
- dmp = Finder.by_pk(p_key: p_key, client: client, logger: logger, cleanse: false)
75
- logger.info(message: "Existing latest record", details: dmp) if logger.respond_to?(:debug)
76
- raise UpdaterError, MSG_DMP_FORBIDDEN unless provenance.is_a?(Hash) && !provenance['PK'].nil? &&
77
- provenance['Pk'] == dmp['dmphub_provenance_id']
80
+ client = Uc3DmpDynamo::Client.new(logger:)
81
+ dmp = Finder.by_pk(p_key:, client:, logger:, cleanse: false)
82
+ logger.info(message: 'Existing latest record', details: dmp) if logger.respond_to?(:debug)
83
+ raise UpdaterError, Helper::MSG_DMP_FORBIDDEN unless provenance.is_a?(Hash) && !provenance['PK'].nil? &&
84
+ provenance['PK'] == dmp['dmp']['dmphub_provenance_id']
78
85
 
79
86
  # Add the download URl for the PDF as a related identifier on the DMP ID record
80
- annotated = Helper.annotate_dmp_json(provenance: provenance, p_key: p_key, json: dmp['dmp'])
87
+ annotated = Helper.annotate_dmp_json(provenance:, p_key:, json: dmp['dmp'])
81
88
  annotated['dmproadmap_related_identifiers'] = [] if annotated['dmproadmap_related_identifiers'].nil?
82
- annotated['dmproadmap_related_identifiers'] << {
89
+ annotated['dmproadmap_related_identifiers'] << JSON.parse({
83
90
  descriptor: 'is_metadata_for', work_type: 'output_management_plan', type: 'url', identifier: url
84
- }
91
+ }.to_json)
85
92
 
86
93
  # Save the changes without creating a new version!
87
- resp = client.put_item(json: annotated, logger: logger)
88
- raise UpdaterError, MSG_DMP_UNABLE_TO_VERSION if resp.nil?
94
+ resp = client.put_item(json: annotated, logger:)
95
+ raise UpdaterError, Helper::MSG_DMP_UNABLE_TO_VERSION if resp.nil?
89
96
 
90
97
  logger.info(message: "Added DMP ID narrative for PK: #{p_key}, Narrative: #{url}") if logger.respond_to?(:debug)
91
98
  true
92
99
  end
100
+ # rubocop:enable Metrics/AbcSize
93
101
 
94
102
  private
95
103
 
96
104
  # Check to make sure the incoming JSON is valid, the DMP ID requested matches the DMP ID in the JSON
105
+ # rubocop:disable Metrics/AbcSize
97
106
  def _updateable?(provenance:, p_key:, latest_version: {}, mods: {})
98
107
  # Validate the incoming JSON first
99
108
  errs = Validator.validate(mode: 'author', json: JSON.parse({ dmp: mods }.to_json))
100
109
  return errs.join(', ') if errs.is_a?(Array) && errs.any? && errs.first != Validator::MSG_VALID_JSON
101
110
  # Fail if the provenance is not defined
102
- return [MSG_DMP_FORBIDDEN] unless provenance.is_a?(Hash) && !provenance['PK'].nil?
111
+ return [Helper::MSG_DMP_FORBIDDEN] unless provenance.is_a?(Hash) && !provenance['PK'].nil?
103
112
  # Verify that the JSON is for the same DMP in the PK
104
- return [MSG_DMP_FORBIDDEN] unless Helper.dmp_id_to_pk(json: mods.fetch('dmp_id', {})) == p_key
113
+ return [Helper::MSG_DMP_FORBIDDEN] unless Helper.dmp_id_to_pk(json: mods.fetch('dmp_id', {})) == p_key
114
+
105
115
  # Bail out if the DMP ID could not be found or the PKs do not match for some reason
106
- return [MSG_DMP_UNKNOWN] if latest_version.nil? || latest_version.fetch['PK'] != p_key
116
+ [Helper::MSG_DMP_UNKNOWN] unless latest_version.is_a?(Hash) && latest_version['PK'] == p_key
107
117
  end
118
+ # rubocop:enable Metrics/AbcSize
108
119
 
120
+ # rubocop:disable Metrics/ParameterLists
109
121
  def _process_modifications(owner:, updater:, version:, mods:, note: nil, logger: nil)
110
122
  return version unless mods.is_a?(Hash) && !updater.nil?
111
123
  return mods unless version.is_a?(Hash) && !owner.nil?
112
124
 
113
- # Splice together any assertions that may have been made while the user was editing the DMP ID
114
- updated = Asserter.splice(latest_version: version, modified_version: mods, logger: logger) if owner == updater
115
-
116
- # Attach the incoming changes as an assertion to the DMP ID since the updater is NOT the owner
117
- updated = Asserter.add(updater: updater, dmp: version, mods: mods, note: note, logger: logger) if owner != updater
125
+ updated = if owner == updater
126
+ # Splice together any assertions that may have been made while the user was editing the DMP ID
127
+ Asserter.splice(latest_version: version, modified_version: mods, logger:)
128
+ else
129
+ # Attach the incoming changes as an assertion to the DMP ID since the updater is NOT the owner
130
+ Asserter.add(updater:, latest_version: version, modified_version: mods, note:,
131
+ logger:)
132
+ end
118
133
 
119
- merge_versions(latest_version: version, mods: updated, logger: logger)
134
+ _merge_versions(latest_version: version, mods: updated, logger:)
120
135
  end
136
+ # rubocop:enable Metrics/ParameterLists
121
137
 
122
138
  # We are replacing the latest version with the modifcations but want to retain the PK, SK and any dmphub_ prefixed
123
139
  # entries in the metadata so that we do not lose creation timestamps, provenance ids, etc.
124
- def merge_versions(latest_version:, mods:, logger: nil)
125
- logger.debug(message: 'Modifications before merge.', details: mods)
140
+ # rubocop:disable Metrics/AbcSize
141
+ def _merge_versions(latest_version:, mods:, logger: nil)
142
+ return mods unless latest_version.is_a?(Hash)
143
+
144
+ logger.debug(message: 'Modifications before merge.', details: mods) if logger.respond_to?(:debug)
126
145
  keys_to_retain = latest_version.keys.select do |key|
127
- (key.start_with?('dmphub_') && !%w[dmphub_assertions].include?(key)) ||
146
+ (key.start_with?('dmphub_') && !%w[dmphub_modifications dmphub_versions].include?(key)) ||
128
147
  key.start_with?('PK') || key.start_with?('SK')
129
148
  end
130
149
  keys_to_retain.each do |key|
131
150
  mods[key] = latest_version[key]
132
151
  end
133
- logger.debug(message: 'Modifications after merge.', details: mods)
152
+ logger.debug(message: 'Modifications after merge.', details: mods) if logger.respond_to?(:debug)
134
153
  mods
135
154
  end
155
+ # rubocop:enable Metrics/AbcSize
136
156
 
137
157
  # Once the DMP has been updated, we need to update it's DOI metadata
138
158
  # -------------------------------------------------------------------------
159
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
160
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
139
161
  def _post_process(provenance:, json:, logger: nil)
140
- return false unless json.is_a?(Hash)
162
+ return false unless json.is_a?(Hash) && provenance.is_a?(Hash) && !provenance['PK'].nil? &&
163
+ !json['dmphub_provenance_id'].nil?
164
+
165
+ publishable = provenance['PK'] == json['dmphub_provenance_id']
166
+ return true unless publishable
167
+
168
+ # TODO: we will want to send and related_identifiers in :dmphub_modifications as well!!!
141
169
 
142
- # Indicate whether or not the updater is the provenance system
143
- json['dmphub_updater_is_provenance'] = provenance['PK'] == json['dmphub_provenance_id']
144
- # Publish the change to the EventBridge
145
170
  publisher = Uc3DmpEventBridge::Publisher.new
146
- publisher.publish(source: 'DmpUpdater', event_type: 'EZID update', dmp: json, logger: logger)
171
+ # Publish the change to the EventBridge if the updater is the owner of the DMP ID
172
+ if publishable && logger.respond_to?(:debug)
173
+ logger.debug(message: 'Sending event for EZID publication',
174
+ details: json)
175
+ end
176
+ publisher.publish(source: 'DmpUpdater', event_type: 'EZID update', dmp: json, logger:) if publishable
147
177
 
148
178
  # Determine if there are any related identifiers that we should try to fetch a citation for
149
179
  citable_identifiers = Helper.citable_related_identifiers(dmp: json)
@@ -155,10 +185,16 @@ module Uc3DmpId
155
185
  SK: json['SK'],
156
186
  dmproadmap_related_identifiers: citable_identifiers
157
187
  }
158
- logger.debug(message: "Fetching citations", details: citable_identifiers)
159
- publisher.publish(source: 'DmpUpdater', dmp: json, event_type: 'Citation Fetch', detail: citer_detail, logger: logger)
188
+ if logger.respond_to?(:debug)
189
+ logger.debug(message: 'Sending event to fetch citations',
190
+ details: citable_identifiers)
191
+ end
192
+ publisher.publish(source: 'DmpUpdater', dmp: json, event_type: 'Citation Fetch', detail: citer_detail,
193
+ logger:)
160
194
  true
161
195
  end
196
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
197
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
162
198
  end
163
199
  end
164
200
  end
@@ -1,8 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'json-schema'
4
+
3
5
  module Uc3DmpId
4
6
  class Uc3DmpIdValidatorError < StandardError; end
5
7
 
8
+ # Method that compares incoming JSON against our JSON Schema and provides detailed errors
6
9
  class Validator
7
10
  # Valid Validation modes are:
8
11
  # - :author --> system of provenance is attempting to create or update
@@ -18,14 +21,13 @@ module Uc3DmpId
18
21
 
19
22
  class << self
20
23
  # Validate the specified DMP's :json against the schema for the specified :mode
21
- #
22
- # ------------------------------------------------------------------------------------
24
+ # rubocop:disable Metrics/AbcSize
23
25
  def validate(mode:, json:)
24
- json = Helper.parse_json(json: json)
26
+ json = Helper.parse_json(json:)
25
27
  return [MSG_EMPTY_JSON] if json.nil? || !VALIDATION_MODES.include?(mode)
26
28
 
27
29
  # Load the appropriate JSON schema for the mode
28
- schema = _load_schema(mode: mode)
30
+ schema = _load_schema(mode:)
29
31
  return [MSG_NO_SCHEMA] if schema.nil?
30
32
 
31
33
  # Validate the JSON
@@ -36,6 +38,7 @@ module Uc3DmpId
36
38
  rescue JSON::Schema::ValidationError => e
37
39
  ["#{MSG_INVALID_JSON} - #{e.message}"]
38
40
  end
41
+ # rubocop:enable Metrics/AbcSize
39
42
 
40
43
  # ------------------------------------------------------------------------------------
41
44
  # METHODS BELOW ARE ONLY MEANT TO BE INVOKED FROM WITHIN THIS MODULE
@@ -45,10 +48,13 @@ module Uc3DmpId
45
48
  # ------------------------------------------------------------------------------------
46
49
  def _load_schema(mode:)
47
50
  # Instatiate the matching schema
48
- schema = "Uc3DmpId::Schemas::#{mode.to_s.downcase.capitalize}".split('::').inject(Object) { |o,c| o.const_get c }
51
+ schema = "Uc3DmpId::Schemas::#{mode.to_s.downcase.capitalize}".split('::').inject(Object) do |o, c|
52
+ o.const_get c
53
+ end
49
54
  schema.respond_to?(:load) ? schema.load : nil
55
+ rescue NameError
56
+ nil
50
57
  end
51
-
52
58
  end
53
59
  end
54
60
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uc3DmpId
4
- VERSION = '0.0.140'
4
+ VERSION = '0.1.1'
5
5
  end
@@ -6,11 +6,11 @@ require 'time'
6
6
  module Uc3DmpId
7
7
  class VersionerError < StandardError; end
8
8
 
9
+ # Logic to handle the versioning of DMP IDs and to retrieve the versions for a PK
9
10
  class Versioner
10
11
  SOURCE = 'Uc3DmpId::Versioner'
11
12
 
12
13
  class << self
13
-
14
14
  # Find the DMP ID's versions
15
15
  # -------------------------------------------------------------------------
16
16
  def get_versions(p_key:, client: nil, logger: nil)
@@ -18,22 +18,23 @@ module Uc3DmpId
18
18
 
19
19
  args = {
20
20
  key_conditions: {
21
- PK: { attribute_value_list: [Helper.append_pk_prefix(p_key: p_key)], comparison_operator: 'EQ' }
21
+ PK: { attribute_value_list: [Helper.append_pk_prefix(p_key:)], comparison_operator: 'EQ' }
22
22
  },
23
23
  projection_expression: 'modified',
24
24
  scan_index_forward: false
25
25
  }
26
- client = client.nil? ? Uc3DmpDynamo::Client.new : client
27
- client.query(args: args, logger: logger)
26
+ client = Uc3DmpDynamo::Client.new if client.nil?
27
+ client.query(args:, logger:)
28
28
  end
29
29
 
30
30
  # Generate a snapshot of the current latest version of the DMP ID using the existing :modified as
31
31
  # the new SK.
32
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
32
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength,
33
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
33
34
  def generate_version(client:, latest_version:, owner:, updater:, logger: nil)
34
35
  # Only create a version if the Updater is not the Owner OR the changes have happened on a different day
35
36
  mod_time = Time.parse(latest_version.fetch('modified', Time.now.utc.iso8601))
36
- now = Time.now
37
+ now = Time.now.utc
37
38
  if mod_time.nil? || !(now - mod_time).is_a?(Float)
38
39
  logger.error(message: "#{SOURCE} unable to determine mod time: #{mod_time}") if logger.respond_to?(:debug)
39
40
  return latest_version
@@ -42,9 +43,11 @@ module Uc3DmpId
42
43
  # Only allow a new version if the owner and updater are the same and it has been at least one hour since
43
44
  # the last version was created
44
45
  same_hour = (now - mod_time).round <= 3600
45
- if owner != updater || (owner == updater && same_hour)
46
+ if owner == updater && same_hour
46
47
  logger.debug(message: "#{SOURCE} same owner and updater? #{owner == updater}") if logger.respond_to?(:debug)
47
- logger.debug(message: "#{SOURCE} already updated within the past hour? #{same_hour}") if logger.respond_to?(:debug)
48
+ if logger.respond_to?(:debug)
49
+ logger.debug(message: "#{SOURCE} already updated within the past hour? #{same_hour}")
50
+ end
48
51
  return latest_version
49
52
  end
50
53
 
@@ -52,16 +55,18 @@ module Uc3DmpId
52
55
  # We essentially make a snapshot of the record before making changes
53
56
  prior = Helper.deep_copy_dmp(obj: latest_version)
54
57
  prior['SK'] = "#{Helper::SK_DMP_PREFIX}#{latest_version['modified'] || Time.now.utc.iso8601}"
58
+
55
59
  # Create the prior version record ()
56
- client = client.nil? ? Uc3DmpDynamo::Client.new : client
57
- resp = client.put_item(json: prior, logger: logger)
60
+ client = Uc3DmpDynamo::Client.new if client.nil?
61
+ resp = client.put_item(json: prior, logger:)
58
62
  return nil if resp.nil?
59
63
 
60
64
  msg = "#{SOURCE} created version PK: #{prior['PK']} SK: #{prior['SK']}"
61
65
  logger.info(message: msg, details: prior) if logger.respond_to?(:debug)
62
66
  latest_version
63
67
  end
64
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
68
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength,
69
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
65
70
 
66
71
  # Build the :dmphub_versions array and attach it to the DMP JSON
67
72
  # rubocop:disable Metrics/AbcSize
@@ -69,14 +74,18 @@ module Uc3DmpId
69
74
  json = Helper.parse_json(json: dmp)
70
75
  return json unless p_key.is_a?(String) && !p_key.strip.empty? && json.is_a?(Hash) && !json['dmp'].nil?
71
76
 
72
- results = get_versions(p_key: p_key, client: client, logger: logger)
77
+ results = get_versions(p_key:, client:, logger:)
73
78
  return json unless results.length > 1
74
79
 
80
+ # TODO: we may want to include milliseconds in the future if we get increased volume so that
81
+ # we don't end up with duplicate URLs if versions are made within the same second
75
82
  versions = results.map do |ver|
76
83
  next if ver['modified'].nil?
84
+
85
+ base_url = "#{Helper.landing_page_url}#{Helper.remove_pk_prefix(p_key:)}"
77
86
  {
78
87
  timestamp: ver['modified'],
79
- url: "#{Helper.landing_page_url}#{Helper.remove_pk_prefix(p_key: p_key)}?version=#{ver['modified']}"
88
+ url: dmp['dmp']['modified'] == ver['modified'] ? base_url : "#{base_url}?version=#{ver['modified']}"
80
89
  }
81
90
  end
82
91
  json['dmp']['dmphub_versions'] = JSON.parse(versions.to_json)
data/lib/uc3-dmp-id.rb CHANGED
@@ -18,17 +18,7 @@ require 'uc3-dmp-id/versioner'
18
18
  require 'uc3-dmp-id/schemas/amend'
19
19
  require 'uc3-dmp-id/schemas/author'
20
20
 
21
+ # Support for working with DMP IDs
21
22
  module Uc3DmpId
22
- MSG_DMP_EXISTS = 'DMP already exists. Try :update instead.'
23
- MSG_DMP_FORBIDDEN = 'You do not have permission.'
24
- MSG_DMP_INVALID_DMP_ID = 'Invalid DMP ID format.'
25
- MSG_DMP_NO_DMP_ID = 'A DMP ID could not be registered at this time.'
26
- MSG_DMP_NO_HISTORICALS = 'You cannot modify a historical version of the DMP.'
27
- MSG_NO_OWNER_ORG = 'Could not determine ownership of the DMP ID.'
28
- MSG_DMP_NO_TOMBSTONE = 'Unable to tombstone the DMP ID at this time.'
29
- MSG_DMP_NO_UPDATE = 'Unable to update the DMP ID at this time.'
30
- MSG_DMP_NOT_FOUND = 'DMP does not exist.'
31
- MSG_DMP_UNABLE_TO_VERSION = 'Unable to version this DMP.'
32
- MSG_DMP_UNKNOWN = 'DMP does not exist. Try :create instead.'
33
23
  end
34
24
  # rubocop:enable Naming/FileName
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uc3-dmp-id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.140
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Riley
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-17 00:00:00.000000000 Z
11
+ date: 2023-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -66,62 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.0'
69
- - !ruby/object:Gem::Dependency
70
- name: byebug
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '='
74
- - !ruby/object:Gem::Version
75
- version: 11.1.3
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '='
81
- - !ruby/object:Gem::Version
82
- version: 11.1.3
83
- - !ruby/object:Gem::Dependency
84
- name: rspec
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '='
88
- - !ruby/object:Gem::Version
89
- version: 3.9.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '='
95
- - !ruby/object:Gem::Version
96
- version: 3.9.0
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - '='
102
- - !ruby/object:Gem::Version
103
- version: 1.50.2
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - '='
109
- - !ruby/object:Gem::Version
110
- version: 1.50.2
111
- - !ruby/object:Gem::Dependency
112
- name: rubocop-rspec
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - '='
116
- - !ruby/object:Gem::Version
117
- version: 2.20.0
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - '='
123
- - !ruby/object:Gem::Version
124
- version: 2.20.0
125
69
  description: Helpers for working with JSON that represents a DMP ID
126
70
  email:
127
71
  - brian.riley@ucop.edu
@@ -147,7 +91,7 @@ licenses:
147
91
  - MIT
148
92
  metadata:
149
93
  rubygems_mfa_required: 'false'
150
- post_install_message:
94
+ post_install_message:
151
95
  rdoc_options: []
152
96
  require_paths:
153
97
  - lib
@@ -156,15 +100,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
156
100
  requirements:
157
101
  - - ">="
158
102
  - !ruby/object:Gem::Version
159
- version: '2.7'
103
+ version: '3.2'
160
104
  required_rubygems_version: !ruby/object:Gem::Requirement
161
105
  requirements:
162
106
  - - ">="
163
107
  - !ruby/object:Gem::Version
164
108
  version: '0'
165
109
  requirements: []
166
- rubygems_version: 3.1.6
167
- signing_key:
110
+ rubygems_version: 3.4.10
111
+ signing_key:
168
112
  specification_version: 4
169
113
  summary: DMPTool gem that provides support for DMP ID records
170
114
  test_files: []