dor-services 5.2.0 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
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