dor-services 5.2.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. checksums.yaml +5 -13
  2. data/config/certs/robots-dor-dev.crt +29 -0
  3. data/config/certs/robots-dor-dev.key +27 -0
  4. data/config/config_defaults.yml +2 -0
  5. data/config/dev_console_env.rb +77 -0
  6. data/lib/dor-services.rb +31 -27
  7. data/lib/dor/config.rb +25 -19
  8. data/lib/dor/datastreams/administrative_metadata_ds.rb +19 -20
  9. data/lib/dor/datastreams/content_metadata_ds.rb +238 -177
  10. data/lib/dor/datastreams/datastream_spec_solrizer.rb +1 -1
  11. data/lib/dor/datastreams/default_object_rights_ds.rb +99 -16
  12. data/lib/dor/datastreams/desc_metadata_ds.rb +37 -34
  13. data/lib/dor/datastreams/embargo_metadata_ds.rb +16 -16
  14. data/lib/dor/datastreams/events_ds.rb +2 -2
  15. data/lib/dor/datastreams/geo_metadata_ds.rb +5 -10
  16. data/lib/dor/datastreams/identity_metadata_ds.rb +22 -22
  17. data/lib/dor/datastreams/rights_metadata_ds.rb +43 -32
  18. data/lib/dor/datastreams/role_metadata_ds.rb +5 -5
  19. data/lib/dor/datastreams/simple_dublin_core_ds.rb +13 -14
  20. data/lib/dor/datastreams/version_metadata_ds.rb +22 -23
  21. data/lib/dor/datastreams/workflow_definition_ds.rb +15 -15
  22. data/lib/dor/datastreams/workflow_ds.rb +64 -70
  23. data/lib/dor/exceptions.rb +0 -1
  24. data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +4 -4
  25. data/lib/dor/migrations/processable/unify_workflows.rb +1 -1
  26. data/lib/dor/models/admin_policy_object.rb +4 -4
  27. data/lib/dor/models/assembleable.rb +2 -3
  28. data/lib/dor/models/collection.rb +1 -1
  29. data/lib/dor/models/contentable.rb +113 -108
  30. data/lib/dor/models/describable.rb +136 -95
  31. data/lib/dor/models/editable.rb +205 -119
  32. data/lib/dor/models/embargoable.rb +16 -16
  33. data/lib/dor/models/eventable.rb +2 -2
  34. data/lib/dor/models/geoable.rb +3 -3
  35. data/lib/dor/models/governable.rb +25 -26
  36. data/lib/dor/models/identifiable.rb +66 -55
  37. data/lib/dor/models/item.rb +0 -1
  38. data/lib/dor/models/itemizable.rb +7 -8
  39. data/lib/dor/models/preservable.rb +7 -8
  40. data/lib/dor/models/processable.rb +76 -73
  41. data/lib/dor/models/publishable.rb +25 -30
  42. data/lib/dor/models/releaseable.rb +118 -155
  43. data/lib/dor/models/rightsable.rb +2 -3
  44. data/lib/dor/models/set.rb +1 -1
  45. data/lib/dor/models/shelvable.rb +8 -10
  46. data/lib/dor/models/upgradable.rb +5 -6
  47. data/lib/dor/models/versionable.rb +3 -4
  48. data/lib/dor/models/workflow_object.rb +15 -16
  49. data/lib/dor/services/cleanup_reset_service.rb +15 -16
  50. data/lib/dor/services/cleanup_service.rb +2 -4
  51. data/lib/dor/services/digital_stacks_service.rb +10 -13
  52. data/lib/dor/services/merge_service.rb +8 -9
  53. data/lib/dor/services/metadata_handlers/catalog_handler.rb +1 -1
  54. data/lib/dor/services/metadata_handlers/mdtoolkit_handler.rb +3 -3
  55. data/lib/dor/services/metadata_service.rb +19 -20
  56. data/lib/dor/services/registration_service.rb +80 -61
  57. data/lib/dor/services/reset_workspace_service.rb +6 -10
  58. data/lib/dor/services/sdr_ingest_service.rb +15 -16
  59. data/lib/dor/services/search_service.rb +18 -23
  60. data/lib/dor/services/suri_service.rb +6 -6
  61. data/lib/dor/services/technical_metadata_service.rb +27 -44
  62. data/lib/dor/utils/ng_tidy.rb +3 -3
  63. data/lib/dor/utils/sdr_client.rb +2 -3
  64. data/lib/dor/utils/solr_doc_helper.rb +1 -3
  65. data/lib/dor/version.rb +1 -1
  66. data/lib/dor/workflow/document.rb +43 -40
  67. data/lib/dor/workflow/graph.rb +26 -26
  68. data/lib/dor/workflow/process.rb +34 -35
  69. data/lib/tasks/rdoc.rake +5 -5
  70. metadata +129 -111
  71. data/lib/dor/models/presentable.rb +0 -146
@@ -1,147 +1,240 @@
1
1
  module Dor
2
-
3
2
  ## This is basically used just by APOs. Arguably "editable" is the wrong name.
4
3
  module Editable
5
4
  extend ActiveSupport::Concern
6
5
 
7
6
  included do
8
- belongs_to :agreement_object, :property => :referencesAgreement, :class_name => "Dor::Item"
7
+ belongs_to :agreement_object, :property => :referencesAgreement, :class_name => 'Dor::Item'
9
8
  end
10
9
 
11
- def to_solr(solr_doc=Hash.new, *args)
10
+ # these hashes map short ("machine") license codes to their corresponding URIs and human readable titles. they
11
+ # also allow for deprecated entries (via optional :deprecation_warning). clients that use these maps are advised to
12
+ # only display undeprecated entries, except where a deprecated entry is already in use by an object. e.g., an APO
13
+ # that already specifies "by_sa" for its default license code could continue displaying that in a list of license options
14
+ # for editing, preferably with the deprecation warning. but other deprecated entries would be omitted in such a
15
+ # selectbox.
16
+ # TODO: seems like Editable is not the most semantically appropriate place for these mappings? though they're used
17
+ # by methods that live in Editable.
18
+ # TODO: need some way to do versioning. for instance, what happens when a new version of an existing license comes
19
+ # out, since it will presumably use the same license code, but a different title and URI?
20
+ CREATIVE_COMMONS_USE_LICENSES = {
21
+ 'by' => { :human_readable => 'Attribution 3.0 Unported',
22
+ :uri => 'https://creativecommons.org/licenses/by/3.0/' },
23
+ 'by-sa' => { :human_readable => 'Attribution Share Alike 3.0 Unported',
24
+ :uri => 'https://creativecommons.org/licenses/by-sa/3.0/' },
25
+ 'by_sa' => { :human_readable => 'Attribution Share Alike 3.0 Unported',
26
+ :uri => 'https://creativecommons.org/licenses/by-sa/3.0/',
27
+ :deprecation_warning => 'license code "by_sa" was a typo in argo, prefer "by-sa"' },
28
+ 'by-nd' => { :human_readable => 'Attribution No Derivatives 3.0 Unported',
29
+ :uri => 'https://creativecommons.org/licenses/by-nd/3.0/' },
30
+ 'by-nc' => { :human_readable => 'Attribution Non-Commercial 3.0 Unported',
31
+ :uri => 'https://creativecommons.org/licenses/by-nc/3.0/' },
32
+ 'by-nc-sa' => { :human_readable => 'Attribution Non-Commercial Share Alike 3.0 Unported',
33
+ :uri => 'https://creativecommons.org/licenses/by-nc-sa/3.0/' },
34
+ 'by-nc-nd' => { :human_readable => 'Attribution Non-Commercial, No Derivatives 3.0 Unported',
35
+ :uri => 'https://creativecommons.org/licenses/by-nc-nd/3.0/' },
36
+ 'pdm' => { :human_readable => 'Public Domain Mark 1.0',
37
+ :uri => 'https://creativecommons.org/publicdomain/mark/1.0/'}
38
+ }
39
+ OPEN_DATA_COMMONS_USE_LICENSES = {
40
+ 'pddl' => { :human_readable => 'Open Data Commons Public Domain Dedication and License 1.0',
41
+ :uri => 'http://opendatacommons.org/licenses/pddl/1.0/' },
42
+ 'odc-by' => { :human_readable => 'Open Data Commons Attribution License 1.0',
43
+ :uri => 'http://opendatacommons.org/licenses/by/1.0/' },
44
+ 'odc-odbl' => { :human_readable => 'Open Data Commons Open Database License 1.0',
45
+ :uri => 'http://opendatacommons.org/licenses/odbl/1.0/' }
46
+ }
47
+
48
+ def to_solr(solr_doc = {}, *args)
12
49
  super(solr_doc, *args)
13
- add_solr_value(solr_doc, "default_rights", default_rights, :string, [:symbol])
14
- add_solr_value(solr_doc, "agreement", agreement, :string, [:symbol]) if agreement_object
50
+ add_solr_value(solr_doc, 'default_rights', default_rights, :string, [:symbol])
51
+ add_solr_value(solr_doc, 'agreement', agreement, :string, [:symbol]) if agreement_object
52
+ add_solr_value(solr_doc, 'default_use_license_machine', use_license, :string, [:stored_sortable])
15
53
  solr_doc
16
54
  end
17
55
 
18
- #Adds a person or group to a role in the APO role metadata datastream
56
+ # Adds a person or group to a role in the APO role metadata datastream
19
57
  #
20
- #@param role [String] the role the group or person will be filed under, ex. dor-apo-manager
21
- #@param entity [String] the name of the person or group, ex dlss:developers or sunetid:someone
22
- #@param type [Symbol] :workgroup for a group or :person for a person
23
- def add_roleplayer role, entity, type=:workgroup
24
- xml=self.roleMetadata.ng_xml
58
+ # @param role [String] the role the group or person will be filed under, ex. dor-apo-manager
59
+ # @param entity [String] the name of the person or group, ex dlss:developers or sunetid:someone
60
+ # @param type [Symbol] :workgroup for a group or :person for a person
61
+ def add_roleplayer(role, entity, type = :workgroup)
62
+ xml = roleMetadata.ng_xml
25
63
  group = type == :workgroup ? 'group' : 'person'
26
- nodes = xml.search('/roleMetadata/role[@type=\''+role+'\']')
64
+ nodes = xml.search('/roleMetadata/role[@type=\'' + role + '\']')
27
65
  if nodes.length > 0
28
- group_node=Nokogiri::XML::Node.new(group, xml)
29
- id_node=Nokogiri::XML::Node.new('identifier', xml)
66
+ group_node = Nokogiri::XML::Node.new(group, xml)
67
+ id_node = Nokogiri::XML::Node.new('identifier', xml)
30
68
  group_node.add_child(id_node)
31
- id_node.content=entity
32
- id_node['type']=type.to_s
69
+ id_node.content = entity
70
+ id_node['type'] = type.to_s
33
71
  nodes.first.add_child(group_node)
34
72
  else
35
- node=Nokogiri::XML::Node.new('role', xml)
36
- node['type']=role
37
- group_node=Nokogiri::XML::Node.new(group, xml)
73
+ node = Nokogiri::XML::Node.new('role', xml)
74
+ node['type'] = role
75
+ group_node = Nokogiri::XML::Node.new(group, xml)
38
76
  node.add_child group_node
39
- id_node=Nokogiri::XML::Node.new('identifier', xml)
77
+ id_node = Nokogiri::XML::Node.new('identifier', xml)
40
78
  group_node.add_child(id_node)
41
- id_node.content=entity
42
- id_node['type']=type.to_s
79
+ id_node.content = entity
80
+ id_node['type'] = type.to_s
43
81
  xml.search('/roleMetadata').first.add_child(node)
44
82
  end
45
- self.roleMetadata.content=xml.to_s
83
+ roleMetadata.content = xml.to_s
46
84
  end
47
85
 
48
- #remove all people groups and roles from the APO role metadata datastream
86
+ # remove all people groups and roles from the APO role metadata datastream
49
87
  def purge_roles
50
- self.roleMetadata.ng_xml.search('/roleMetadata/role').each do |node|
88
+ roleMetadata.ng_xml.search('/roleMetadata/role').each do |node|
51
89
  node.remove
52
90
  end
53
91
  end
54
92
 
55
93
  def mods_title
56
- return self.descMetadata.term_values(:title_info, :main_title).first
94
+ descMetadata.term_values(:title_info, :main_title).first
57
95
  end
58
96
  def mods_title=(val)
59
- self.descMetadata.update_values({[:title_info, :main_title] => val})
97
+ descMetadata.update_values({[:title_info, :main_title] => val})
60
98
  end
61
- #get all collections listed for this APO, used during registration
62
- #@return [Array] array of pids
99
+
100
+ # get all collections listed for this APO, used during registration
101
+ # @return [Array] array of pids
63
102
  def default_collections
64
- return administrativeMetadata.term_values(:registration, :default_collection)
103
+ administrativeMetadata.term_values(:registration, :default_collection)
65
104
  end
66
- #Add a collection to the listing of collections for items governed by this apo.
67
- #@param val [String] pid of the collection, ex. druid:ab123cd4567
68
- def add_default_collection val
69
- xml = self.administrativeMetadata.ng_xml
70
- reg=xml.search('//administrativeMetadata/registration').first
105
+ # Add a collection to the listing of collections for items governed by this apo.
106
+ # @param val [String] pid of the collection, ex. druid:ab123cd4567
107
+ def add_default_collection(val)
108
+ xml = administrativeMetadata.ng_xml
109
+ reg = xml.search('//administrativeMetadata/registration').first
71
110
  unless reg
72
- reg=Nokogiri::XML::Node.new('registration',xml)
111
+ reg = Nokogiri::XML::Node.new('registration', xml)
73
112
  xml.search('/administrativeMetadata').first.add_child(reg)
74
113
  end
75
- node=Nokogiri::XML::Node.new('collection',xml)
76
- node['id']=val
114
+ node = Nokogiri::XML::Node.new('collection', xml)
115
+ node['id'] = val
77
116
  reg.add_child(node)
78
- self.administrativeMetadata.content=xml.to_s
117
+ administrativeMetadata.content = xml.to_s
79
118
  end
80
-
81
- def remove_default_collection val
82
- xml = self.administrativeMetadata.ng_xml
83
- xml.search('//administrativeMetadata/registration/collection[@id=\''+val+'\']').remove
84
- self.administrativeMetadata.content=xml.to_s
119
+ def remove_default_collection(val)
120
+ xml = administrativeMetadata.ng_xml
121
+ xml.search('//administrativeMetadata/registration/collection[@id=\'' + val + '\']').remove
122
+ administrativeMetadata.content = xml.to_s
85
123
  end
86
- #Get all roles defined in the role metadata, and the people or groups in those roles. Groups are prefixed with 'workgroup:'
87
- #@return [Hash] role => ['person','group'] ex. {"dor-apo-manager" => ["workgroup:dlss:developers", "sunetid:lmcrae"]
124
+
125
+ # Get all roles defined in the role metadata, and the people or groups in those roles. Groups are prefixed with 'workgroup:'
126
+ # @return [Hash] role => ['person','group'] ex. {"dor-apo-manager" => ["workgroup:dlss:developers", "sunetid:lmcrae"]
88
127
  def roles
89
- roles={}
90
- self.roleMetadata.ng_xml.search('/roleMetadata/role').each do |role|
91
- roles[role['type']]=[]
128
+ roles = {}
129
+ roleMetadata.ng_xml.search('/roleMetadata/role').each do |role|
130
+ roles[role['type']] = []
92
131
  role.search('identifier').each do |entity|
93
- roles[role['type']] << entity['type'] + ':' + entity.text()
132
+ roles[role['type']] << entity['type'] + ':' + entity.text
94
133
  end
95
134
  end
96
135
  roles
97
136
  end
137
+
98
138
  def metadata_source
99
- self.administrativeMetadata.metadata_source.first
139
+ administrativeMetadata.metadata_source.first
100
140
  end
101
141
  def metadata_source=(val)
102
- if self.administrativeMetadata.descMetadata.nil?
103
- self.administrativeMetadata.add_child_node(self.administrativeMetadata, :descMetadata)
142
+ if administrativeMetadata.descMetadata.nil?
143
+ administrativeMetadata.add_child_node(administrativeMetadata, :descMetadata)
104
144
  end
105
- self.administrativeMetadata.update_values({[:descMetadata, :source] => val})
145
+ administrativeMetadata.update_values({[:descMetadata, :source] => val})
106
146
  end
147
+
107
148
  def use_statement
108
- self.defaultObjectRights.use_statement.first
149
+ defaultObjectRights.use_statement.first
109
150
  end
110
151
  def use_statement=(val)
111
- self.defaultObjectRights.update_values({[:use_statement] => val})
152
+ defaultObjectRights.update_term!(:use_statement, val.nil? ? '' : val)
112
153
  end
154
+
113
155
  def copyright_statement
114
- self.defaultObjectRights.copyright.first
156
+ defaultObjectRights.copyright.first
115
157
  end
116
158
  def copyright_statement=(val)
117
- self.defaultObjectRights.update_values({[:copyright] => val})
159
+ defaultObjectRights.update_term!(:copyright, val.nil? ? '' : val)
118
160
  end
161
+
119
162
  def creative_commons_license
120
- self.defaultObjectRights.creative_commons.first
163
+ defaultObjectRights.creative_commons.first
121
164
  end
122
165
  def creative_commons_license_human
123
- self.defaultObjectRights.creative_commons_human.first
166
+ defaultObjectRights.creative_commons_human.first
124
167
  end
125
- def creative_commons_license=(val)
126
- (machine, human)=val
127
- if creative_commons_license.nil?
128
- self.defaultObjectRights.add_child_node(self.defaultObjectRights.ng_xml.root, :creative_commons)
129
- end
130
- self.defaultObjectRights.update_values({[:creative_commons] => val})
168
+
169
+ def open_data_commons_license
170
+ defaultObjectRights.open_data_commons.first
171
+ end
172
+ def open_data_commons_license_human
173
+ defaultObjectRights.open_data_commons_human.first
174
+ end
175
+
176
+ def use_license
177
+ return creative_commons_license unless ['', nil].include?(creative_commons_license)
178
+ return open_data_commons_license unless ['', nil].include?(open_data_commons_license)
179
+ ''
180
+ end
181
+ def use_license_uri
182
+ return defaultObjectRights.creative_commons.uri.first unless ['', nil].include?(defaultObjectRights.creative_commons.uri)
183
+ return defaultObjectRights.open_data_commons.uri.first unless ['', nil].include?(defaultObjectRights.open_data_commons.uri)
184
+ ''
131
185
  end
132
- def creative_commons_license_human=(val)
133
- if creative_commons_license_human.nil?
134
- #add the nodes
135
- self.defaultObjectRights.add_child_node(self.defaultObjectRights.ng_xml.root, :creative_commons)
186
+ def use_license_human
187
+ return creative_commons_license_human unless ['', nil].include?(creative_commons_license_human)
188
+ return open_data_commons_license_human unless ['', nil].include?(open_data_commons_license_human)
189
+ ''
190
+ end
191
+
192
+ def creative_commons_license=(use_license_machine)
193
+ defaultObjectRights.initialize_term!(:creative_commons)
194
+ defaultObjectRights.creative_commons = use_license_machine
195
+ defaultObjectRights.creative_commons.uri = CREATIVE_COMMONS_USE_LICENSES[use_license_machine][:uri]
196
+ end
197
+ def creative_commons_license_human=(use_license_human)
198
+ defaultObjectRights.initialize_term!(:creative_commons_human)
199
+ defaultObjectRights.creative_commons_human = use_license_human
200
+ end
201
+
202
+ def open_data_commons_license=(use_license_machine)
203
+ defaultObjectRights.initialize_term!(:open_data_commons)
204
+ defaultObjectRights.open_data_commons = use_license_machine
205
+ defaultObjectRights.open_data_commons.uri = OPEN_DATA_COMMONS_USE_LICENSES[use_license_machine][:uri]
206
+ end
207
+ def open_data_commons_license_human=(use_license_human)
208
+ defaultObjectRights.initialize_term!(:open_data_commons_human)
209
+ defaultObjectRights.open_data_commons_human = use_license_human
210
+ end
211
+
212
+ # @param [String|Symbol] use_license_machine The machine code for the desired Use License
213
+ # If set to `:none` then Use License is removed
214
+ def use_license=(use_license_machine)
215
+ if use_license_machine.blank? || use_license_machine == :none
216
+ # delete use license by directly removing the XML used to define the use license
217
+ defaultObjectRights.update_term!(:creative_commons, ' ')
218
+ defaultObjectRights.update_term!(:creative_commons_human, ' ')
219
+ defaultObjectRights.update_term!(:open_data_commons, ' ')
220
+ defaultObjectRights.update_term!(:open_data_commons_human, ' ')
221
+ elsif CREATIVE_COMMONS_USE_LICENSES.include? use_license_machine
222
+ self.creative_commons_license = use_license_machine
223
+ self.creative_commons_license_human = CREATIVE_COMMONS_USE_LICENSES[use_license_machine][:human_readable]
224
+ elsif OPEN_DATA_COMMONS_USE_LICENSES.include? use_license_machine
225
+ self.open_data_commons_license = use_license_machine
226
+ self.open_data_commons_license_human = OPEN_DATA_COMMONS_USE_LICENSES[use_license_machine][:human_readable]
227
+ else
228
+ fail ArgumentError, "'#{use_license_machine}' is not a valid license code"
136
229
  end
137
- self.defaultObjectRights.update_values({[:creative_commons_human] => val})
138
230
  end
139
- #@return [String] A description of the rights defined in the default object rights datastream. Can be 'Stanford', 'World', 'Dark' or 'None'
231
+
232
+ # @return [String] A description of the rights defined in the default object rights datastream. Can be 'Stanford', 'World', 'Dark' or 'None'
140
233
  def default_rights
141
- xml=self.defaultObjectRights.ng_xml
234
+ xml = defaultObjectRights.ng_xml
142
235
  if xml.search('//rightsMetadata/access[@type=\'read\']/machine/group').length == 1
143
236
  'Stanford'
144
- elsif xml.search('//rightsMetadata/access[@type=\'read\']/machine/world').length ==1
237
+ elsif xml.search('//rightsMetadata/access[@type=\'read\']/machine/world').length == 1
145
238
  'World'
146
239
  elsif xml.search('//rightsMetadata/access[@type=\'discover\']/machine/none').length == 1
147
240
  'Dark'
@@ -149,32 +242,31 @@ module Dor
149
242
  'None'
150
243
  end
151
244
  end
152
- #Set the rights in default object rights
153
- #@param rights [String] Stanford, World, Dark, or None
245
+ # Set the rights in default object rights
246
+ # @param rights [String] Stanford, World, Dark, or None
154
247
  def default_rights=(rights)
155
- rights=rights.downcase
156
- rights_xml = self.defaultObjectRights.ng_xml
248
+ rights = rights.downcase
249
+ rights_xml = defaultObjectRights.ng_xml
157
250
  rights_xml.search('//rightsMetadata/access[@type=\'discover\']/machine').each do |node|
158
251
  node.children.remove
159
- world_node=Nokogiri::XML::Node.new((rights=='dark' ? 'none' : 'world'),rights_xml)
252
+ world_node = Nokogiri::XML::Node.new((rights == 'dark' ? 'none' : 'world'), rights_xml)
160
253
  node.add_child(world_node)
161
254
  end
162
255
  rights_xml.search('//rightsMetadata/access[@type=\'read\']').each do |node|
163
256
  node.children.remove
164
- machine_node=Nokogiri::XML::Node.new('machine',rights_xml)
257
+ machine_node = Nokogiri::XML::Node.new('machine', rights_xml)
165
258
  if rights == 'world'
166
- world_node=Nokogiri::XML::Node.new(rights,rights_xml)
259
+ world_node = Nokogiri::XML::Node.new(rights, rights_xml)
167
260
  node.add_child(machine_node)
168
261
  machine_node.add_child(world_node)
169
262
  elsif rights == 'stanford'
170
- world_node=Nokogiri::XML::Node.new(rights,rights_xml)
171
263
  node.add_child(machine_node)
172
- group_node=Nokogiri::XML::Node.new('group',rights_xml)
173
- group_node.content="Stanford"
264
+ group_node = Nokogiri::XML::Node.new('group', rights_xml)
265
+ group_node.content = 'Stanford'
174
266
  node.add_child(machine_node)
175
267
  machine_node.add_child(group_node)
176
268
  elsif rights == 'none' || rights == 'dark'
177
- none_node=Nokogiri::XML::Node.new('none',rights_xml)
269
+ none_node = Nokogiri::XML::Node.new('none', rights_xml)
178
270
  node.add_child(machine_node)
179
271
  machine_node.add_child(none_node)
180
272
  else
@@ -184,65 +276,59 @@ module Dor
184
276
  end
185
277
 
186
278
  def desc_metadata_format
187
- self.administrativeMetadata.metadata_format.first
279
+ administrativeMetadata.metadata_format.first
188
280
  end
189
281
  def desc_metadata_format=(format)
190
- #create the node if it isnt there already
191
- unless self.administrativeMetadata.metadata_format.first
192
- self.administrativeMetadata.add_child_node(self.administrativeMetadata.ng_xml.root, :metadata_format)
282
+ # create the node if it isnt there already
283
+ unless administrativeMetadata.metadata_format.first
284
+ administrativeMetadata.add_child_node(administrativeMetadata.ng_xml.root, :metadata_format)
193
285
  end
194
- self.administrativeMetadata.update_values({[:metadata_format] => format})
286
+ administrativeMetadata.update_values({[:metadata_format] => format})
195
287
  end
288
+
196
289
  def desc_metadata_source
197
- self.administrativeMetadata.metadata_source.first
290
+ administrativeMetadata.metadata_source.first
198
291
  end
199
292
  def desc_metadata_source=(source)
200
- #create the node if it isnt there already
201
- unless self.administrativeMetadata.metadata_source.first
202
- self.administrativeMetadata.add_child_node(self.administrativeMetadata.ng_xml.root, :metadata_source)
293
+ # create the node if it isnt there already
294
+ unless administrativeMetadata.metadata_source.first
295
+ administrativeMetadata.add_child_node(administrativeMetadata.ng_xml.root, :metadata_source)
203
296
  end
204
- self.administrativeMetadata.update_values({[:metadata_source] => format})
297
+ administrativeMetadata.update_values({[:metadata_source] => format})
205
298
  end
206
- #List of default workflows, used to provide choices at registration
207
- #@return [Array] and array of pids, ex ['druid:ab123cd4567']
299
+
300
+ # List of default workflows, used to provide choices at registration
301
+ # @return [Array] and array of pids, ex ['druid:ab123cd4567']
208
302
  def default_workflows
209
- xml=self.administrativeMetadata.ng_xml
210
- nodes=self.administrativeMetadata.term_values(:registration, :workflow_id)
211
- if nodes.length > 0
212
- wfs=[]
213
- nodes.each do |node|
214
- wfs << node
215
- end
216
- wfs
217
- else
218
- []
219
- end
303
+ administrativeMetadata.term_values(:registration, :workflow_id)
220
304
  end
221
- #set a single default workflow
222
- #@param wf [String] the name of the workflow, ex. 'digitizationWF'
305
+ # set a single default workflow
306
+ # @param wf [String] the name of the workflow, ex. 'digitizationWF'
223
307
  def default_workflow=(wf)
224
- xml = self.administrativeMetadata.ng_xml
225
- nodes=xml.search('//registration/workflow')
308
+ fail ArgumentError, 'Must have a valid workflow for default' if wf.blank?
309
+ xml = administrativeMetadata.ng_xml
310
+ nodes = xml.search('//registration/workflow')
226
311
  if nodes.first
227
- nodes.first['id']=wf
312
+ nodes.first['id'] = wf
228
313
  else
229
- nodes=xml.search('//registration')
314
+ nodes = xml.search('//registration')
230
315
  unless nodes.first
231
- reg_node=Nokogiri::XML::Node.new('registration',xml)
316
+ reg_node = Nokogiri::XML::Node.new('registration', xml)
232
317
  xml.root.add_child(reg_node)
233
318
  end
234
- nodes=xml.search('//registration')
235
- wf_node=Nokogiri::XML::Node.new('workflow',xml)
236
- wf_node['id']=wf
319
+ nodes = xml.search('//registration')
320
+ wf_node = Nokogiri::XML::Node.new('workflow', xml)
321
+ wf_node['id'] = wf
237
322
  nodes.first.add_child(wf_node)
238
323
  end
239
324
  end
325
+
240
326
  def agreement
241
327
  agreement_object ? agreement_object.pid : ''
242
328
  end
243
329
  def agreement=(val)
330
+ fail ArgumentError, 'agreement must have a valid druid' if val.blank?
244
331
  self.agreement_object = Dor::Item.find val.to_s, :cast => true
245
332
  end
246
333
  end
247
-
248
334
  end
@@ -15,7 +15,7 @@ module Dor
15
15
  # Modifies rightsMetadata to remove embargoReleaseDate and updates/adds access from embargoMetadata/releaseAccess
16
16
  # @param [String] release_agent name of the person, application or thing that released embargo
17
17
  # @note The caller should save the object to fedora to commit the changes
18
- def release_embargo(release_agent="unknown")
18
+ def release_embargo(release_agent = 'unknown')
19
19
  # Set status to released
20
20
  embargo_md = datastreams['embargoMetadata']
21
21
  embargo_md.status = 'released'
@@ -27,7 +27,7 @@ module Dor
27
27
  # Replace rights <access> nodes with those from embargoMetadta
28
28
  release_access = embargo_md.release_access_node
29
29
  release_access.xpath('//releaseAccess/access').each do |new_access|
30
- access_sibling = rights_xml.at_xpath("//rightsMetadata/access[last()]")
30
+ access_sibling = rights_xml.at_xpath('//rightsMetadata/access[last()]')
31
31
  if access_sibling
32
32
  access_sibling.add_next_sibling(new_access.clone)
33
33
  else
@@ -36,10 +36,10 @@ module Dor
36
36
  end
37
37
 
38
38
  datastreams['rightsMetadata'].content_will_change!
39
- datastreams['events'].add_event("embargo", release_agent, "Embargo released")
39
+ datastreams['events'].add_event('embargo', release_agent, 'Embargo released')
40
40
  end
41
41
 
42
- def release_20_pct_vis_embargo(release_agent="unknown")
42
+ def release_20_pct_vis_embargo(release_agent = 'unknown')
43
43
  # Set status to released
44
44
  embargo_md = datastreams['embargoMetadata']
45
45
  embargo_md.twenty_pct_status = 'released'
@@ -49,7 +49,7 @@ module Dor
49
49
  rights_xml.xpath("//rightsMetadata/access[@type='read']").each { |n| n.remove }
50
50
 
51
51
  # Replace rights <access> nodes with 1 machine/world node
52
- access_sibling = rights_xml.at_xpath("//rightsMetadata/access[last()]")
52
+ access_sibling = rights_xml.at_xpath('//rightsMetadata/access[last()]')
53
53
  if access_sibling
54
54
  access_sibling.add_next_sibling(world_doc.root.clone)
55
55
  else
@@ -57,7 +57,7 @@ module Dor
57
57
  end
58
58
 
59
59
  datastreams['rightsMetadata'].content_will_change!
60
- datastreams['events'].add_event("embargo", release_agent, "20% Visibility Embargo released")
60
+ datastreams['events'].add_event('embargo', release_agent, '20% Visibility Embargo released')
61
61
  end
62
62
 
63
63
  def update_embargo(new_date)
@@ -67,19 +67,19 @@ module Dor
67
67
  if new_date.past?
68
68
  raise ArgumentError, 'You cannot set the embargo date to a past date.'
69
69
  end
70
- updated=false
71
- self.rightsMetadata.ng_xml.search('//embargoReleaseDate').each do |node|
72
- node.content=new_date.beginning_of_day.utc.xmlschema
73
- updated=true
70
+ updated = false
71
+ rightsMetadata.ng_xml.search('//embargoReleaseDate').each do |node|
72
+ node.content = new_date.beginning_of_day.utc.xmlschema
73
+ updated = true
74
74
  end
75
- self.rightsMetadata.content=self.rightsMetadata.ng_xml.to_s
76
- self.rightsMetadata.save
75
+ rightsMetadata.content = rightsMetadata.ng_xml.to_s
76
+ rightsMetadata.save
77
77
  raise 'No release date in rights metadata, cannot proceed!' unless updated
78
- self.embargoMetadata.ng_xml.xpath('//releaseDate').each do |node|
79
- node.content=new_date.beginning_of_day.utc.xmlschema
78
+ embargoMetadata.ng_xml.xpath('//releaseDate').each do |node|
79
+ node.content = new_date.beginning_of_day.utc.xmlschema
80
80
  end
81
- self.embargoMetadata.content=self.embargoMetadata.ng_xml.to_s
82
- self.embargoMetadata.save
81
+ embargoMetadata.content = embargoMetadata.ng_xml.to_s
82
+ embargoMetadata.save
83
83
  end
84
84
  end
85
85
  end