dor-services 4.22.3 → 4.22.4

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 +8 -8
  2. data/bin/dor-indexer +19 -20
  3. data/bin/dor-indexerd +2 -3
  4. data/config/certs/robots-dor-dev.crt +29 -0
  5. data/config/certs/robots-dor-dev.key +27 -0
  6. data/config/dev_console_env.rb +77 -0
  7. data/lib/dor-services.rb +3 -3
  8. data/lib/dor/config.rb +15 -15
  9. data/lib/dor/datastreams/administrative_metadata_ds.rb +5 -5
  10. data/lib/dor/datastreams/content_metadata_ds.rb +181 -225
  11. data/lib/dor/datastreams/datastream_spec_solrizer.rb +1 -1
  12. data/lib/dor/datastreams/default_object_rights_ds.rb +8 -10
  13. data/lib/dor/datastreams/desc_metadata_ds.rb +35 -34
  14. data/lib/dor/datastreams/embargo_metadata_ds.rb +7 -7
  15. data/lib/dor/datastreams/events_ds.rb +11 -11
  16. data/lib/dor/datastreams/geo_metadata_ds.rb +86 -86
  17. data/lib/dor/datastreams/identity_metadata_ds.rb +19 -19
  18. data/lib/dor/datastreams/role_metadata_ds.rb +3 -3
  19. data/lib/dor/datastreams/simple_dublin_core_ds.rb +13 -13
  20. data/lib/dor/datastreams/version_metadata_ds.rb +5 -5
  21. data/lib/dor/datastreams/workflow_definition_ds.rb +21 -21
  22. data/lib/dor/migrations/identifiable/assert_adminPolicy.rb +1 -1
  23. data/lib/dor/migrations/identifiable/fix_model_assertions.rb +1 -1
  24. data/lib/dor/migrations/identifiable/record_remediation.rb +2 -2
  25. data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +1 -1
  26. data/lib/dor/migrations/identifiable/uriify_contentlocation_refs.rb +1 -1
  27. data/lib/dor/migrations/processable/unify_workflows.rb +4 -4
  28. data/lib/dor/migrations/versionable/add_missing_version_md.rb +1 -1
  29. data/lib/dor/models/admin_policy_object.rb +1 -1
  30. data/lib/dor/models/assembleable.rb +5 -5
  31. data/lib/dor/models/contentable.rb +27 -27
  32. data/lib/dor/models/describable.rb +168 -179
  33. data/lib/dor/models/discoverable.rb +13 -13
  34. data/lib/dor/models/editable.rb +55 -55
  35. data/lib/dor/models/embargoable.rb +26 -26
  36. data/lib/dor/models/eventable.rb +3 -3
  37. data/lib/dor/models/geoable.rb +8 -8
  38. data/lib/dor/models/governable.rb +14 -14
  39. data/lib/dor/models/identifiable.rb +117 -143
  40. data/lib/dor/models/item.rb +2 -2
  41. data/lib/dor/models/itemizable.rb +9 -9
  42. data/lib/dor/models/presentable.rb +8 -8
  43. data/lib/dor/models/preservable.rb +4 -4
  44. data/lib/dor/models/processable.rb +22 -23
  45. data/lib/dor/models/releaseable.rb +26 -26
  46. data/lib/dor/models/shelvable.rb +14 -14
  47. data/lib/dor/models/upgradable.rb +13 -13
  48. data/lib/dor/models/versionable.rb +2 -2
  49. data/lib/dor/models/workflow_object.rb +4 -4
  50. data/lib/dor/services/cleanup_reset_service.rb +27 -27
  51. data/lib/dor/services/cleanup_service.rb +4 -7
  52. data/lib/dor/services/digital_stacks_service.rb +10 -10
  53. data/lib/dor/services/merge_service.rb +1 -1
  54. data/lib/dor/services/metadata_handlers/mdtoolkit_handler.rb +2 -2
  55. data/lib/dor/services/metadata_service.rb +20 -20
  56. data/lib/dor/services/registration_service.rb +27 -27
  57. data/lib/dor/services/reset_workspace_service.rb +15 -15
  58. data/lib/dor/services/sdr_ingest_service.rb +6 -6
  59. data/lib/dor/services/search_service.rb +2 -2
  60. data/lib/dor/services/suri_service.rb +5 -5
  61. data/lib/dor/services/technical_metadata_service.rb +2 -3
  62. data/lib/dor/utils/ng_tidy.rb +9 -9
  63. data/lib/dor/utils/predicate_patch.rb +1 -1
  64. data/lib/dor/utils/solr_doc_helper.rb +2 -2
  65. data/lib/dor/version.rb +1 -1
  66. data/lib/dor/workflow/document.rb +19 -19
  67. data/lib/dor/workflow/graph.rb +36 -36
  68. data/lib/dor/workflow/process.rb +12 -12
  69. data/lib/tasks/dor.rake +1 -1
  70. data/lib/tasks/rdoc.rake +3 -3
  71. metadata +6 -3
@@ -17,11 +17,11 @@ module Dor
17
17
  ds.label = 'Provenance Metadata'
18
18
  end
19
19
  ds.ng_xml = workflow_provenance
20
- ds.content=ds.ng_xml.to_s
20
+ ds.content=ds.ng_xml.to_s
21
21
  ds.save
22
22
  end
23
23
 
24
- def build_technicalMetadata_datastream(ds=nil)
24
+ def build_technicalMetadata_datastream(ds = nil)
25
25
  TechnicalMetadataService.add_update_technical_metadata(self)
26
26
  end
27
27
 
@@ -33,9 +33,9 @@ module Dor
33
33
  # @return [Nokogiri::Document]
34
34
  def create_workflow_provenance(workflow_id, event_text)
35
35
  builder = Nokogiri::XML::Builder.new do |xml|
36
- xml.provenanceMetadata(:objectId => self.pid) {
36
+ xml.provenanceMetadata(:objectId => pid) {
37
37
  xml.agent(:name => 'DOR') {
38
- xml.what(:object => self.pid) {
38
+ xml.what(:object => pid) {
39
39
  xml.event(:who => "DOR-#{workflow_id}", :when => Time.new.iso8601) {
40
40
  xml.text(event_text)
41
41
  }
@@ -42,11 +42,11 @@ module Dor
42
42
  # This is a work-around for some strange logic in ActiveFedora that
43
43
  # don't allow self.workflows.new? to work if we load the object using
44
44
  # .load_instance_from_solr.
45
- return if self.respond_to? :inner_object and self.inner_object.is_a? ActiveFedora::SolrDigitalObject
45
+ return if self.respond_to?(:inner_object) && inner_object.is_a?(ActiveFedora::SolrDigitalObject)
46
46
 
47
- if self.workflows.new?
47
+ if workflows.new?
48
48
  workflows.mimeType = 'application/xml'
49
- workflows.dsLocation = File.join(Dor::Config.workflow.url,"dor/objects/#{self.pid}/workflows")
49
+ workflows.dsLocation = File.join(Dor::Config.workflow.url,"dor/objects/#{pid}/workflows")
50
50
  end
51
51
  end
52
52
 
@@ -54,7 +54,7 @@ module Dor
54
54
  if datastream.new?
55
55
  true
56
56
  elsif datastream.class.respond_to?(:xml_template)
57
- datastream.content.to_s.empty? or EquivalentXml.equivalent?(datastream.content, datastream.class.xml_template)
57
+ datastream.content.to_s.empty? || EquivalentXml.equivalent?(datastream.content, datastream.class.xml_template)
58
58
  else
59
59
  datastream.content.to_s.empty?
60
60
  end
@@ -65,7 +65,7 @@ module Dor
65
65
  # Returns the path to it or nil.
66
66
  def find_metadata_file(datastream)
67
67
  druid = DruidTools::Druid.new(pid, Dor::Config.stacks.local_workspace_root)
68
- return druid.find_metadata("#{datastream}.xml")
68
+ druid.find_metadata("#{datastream}.xml")
69
69
  end
70
70
 
71
71
  # Takes the name of a datastream, as a string (fooMetadata).
@@ -84,10 +84,10 @@ module Dor
84
84
  ds.content = content
85
85
  ds.ng_xml = Nokogiri::XML(content) if ds.respond_to?(:ng_xml)
86
86
  ds.save unless ds.digital_object.new?
87
- elsif force or empty_datastream?(ds)
87
+ elsif force || empty_datastream?(ds)
88
88
  meth = "build_#{datastream}_datastream".to_sym
89
89
  if respond_to?(meth)
90
- content = self.send(meth, ds)
90
+ content = send(meth, ds)
91
91
  ds.save unless ds.digital_object.new?
92
92
  end
93
93
  end
@@ -95,7 +95,7 @@ module Dor
95
95
  if is_required && empty_datastream?(ds)
96
96
  raise "Required datastream #{datastream} could not be populated!"
97
97
  end
98
- return ds
98
+ ds
99
99
  end
100
100
 
101
101
  def cleanup()
@@ -103,13 +103,13 @@ module Dor
103
103
  end
104
104
 
105
105
  def milestones
106
- Dor::WorkflowService.get_milestones('dor',self.pid)
106
+ Dor::WorkflowService.get_milestones('dor',pid)
107
107
  end
108
108
 
109
109
  def status_info()
110
110
  current_version = '1'
111
111
  begin
112
- current_version = self.versionMetadata.current_version_id
112
+ current_version = versionMetadata.current_version_id
113
113
  rescue
114
114
  end
115
115
 
@@ -117,8 +117,8 @@ module Dor
117
117
  #only get steps that are part of accessioning and part of the current version. That can mean they were archived with the current version
118
118
  #number, or they might be active (no version number).
119
119
  milestones.each do |m|
120
- if STEPS.keys.include?(m[:milestone]) and (m[:version].nil? or m[:version] == current_version)
121
- current_milestones << m unless m[:milestone] == 'registered' and current_version.to_i > 1
120
+ if STEPS.keys.include?(m[:milestone]) && (m[:version].nil? || m[:version] == current_version)
121
+ current_milestones << m unless m[:milestone] == 'registered' && current_version.to_i > 1
122
122
  end
123
123
  end
124
124
 
@@ -136,25 +136,25 @@ module Dor
136
136
  end
137
137
  end
138
138
 
139
- return {:current_version => current_version, :status_code => status_code, :status_time => status_time}
139
+ {:current_version => current_version, :status_code => status_code, :status_time => status_time}
140
140
  end
141
141
 
142
- def status(include_time=false)
142
+ def status(include_time = false)
143
143
  status_info_hash = status_info
144
144
  current_version, status_code, status_time = status_info_hash[:current_version], status_info_hash[:status_code], status_info_hash[:status_time]
145
145
 
146
146
  #use the translation table to get the appropriate verbage for the latest step
147
147
  result = "v#{current_version} #{STATUS_CODE_DISP_TXT[status_code]}"
148
148
  result += " #{format_date(status_time)}" if include_time
149
- return result
149
+ result
150
150
  end
151
151
 
152
- def to_solr(solr_doc=Hash.new, *args)
152
+ def to_solr(solr_doc = Hash.new, *args)
153
153
  super(solr_doc, *args)
154
154
  sortable_milestones = {}
155
155
  current_version='1'
156
156
  begin
157
- current_version = self.versionMetadata.current_version_id
157
+ current_version = versionMetadata.current_version_id
158
158
  rescue
159
159
  end
160
160
  current_version_num=current_version.to_i
@@ -162,12 +162,12 @@ module Dor
162
162
  if self.respond_to?('versionMetadata')
163
163
  #add an entry with version id, tag and description for each version
164
164
  while current_version_num > 0
165
- add_solr_value(solr_doc, 'versions', current_version_num.to_s + ';' + self.versionMetadata.tag_for_version(current_version_num.to_s) + ';' + self.versionMetadata.description_for_version(current_version_num.to_s), :string, [:displayable])
165
+ add_solr_value(solr_doc, 'versions', current_version_num.to_s + ';' + versionMetadata.tag_for_version(current_version_num.to_s) + ';' + versionMetadata.description_for_version(current_version_num.to_s), :string, [:displayable])
166
166
  current_version_num -= 1
167
167
  end
168
168
  end
169
169
 
170
- self.milestones.each do |milestone|
170
+ milestones.each do |milestone|
171
171
  timestamp = milestone[:at].utc.xmlschema
172
172
  sortable_milestones[milestone[:milestone]] ||= []
173
173
  sortable_milestones[milestone[:milestone]] << timestamp
@@ -201,7 +201,7 @@ module Dor
201
201
  add_solr_value(solr_doc, "version_opened", DateTime.parse(opened_date).beginning_of_day.utc.xmlschema.split('T').first, :string, [ :searchable, :facetable])
202
202
  end
203
203
  add_solr_value(solr_doc, "current_version", current_version.to_s, :string, [ :displayable , :facetable])
204
- add_solr_value(solr_doc, "last_modified_day", self.modified_date.to_s.split('T').first, :string, [ :facetable ])
204
+ add_solr_value(solr_doc, "last_modified_day", modified_date.to_s.split('T').first, :string, [ :facetable ])
205
205
  add_solr_value(solr_doc, "rights", rights, :string, [:facetable]) if self.respond_to? :rights
206
206
  solr_doc
207
207
  end
@@ -212,12 +212,12 @@ module Dor
212
212
  # @param [String] name of the workflow to be initialized
213
213
  # @param [Boolean] create_ds create a 'workflows' datastream in Fedora for the object
214
214
  # @param [Integer] priority the workflow's priority level
215
- def initialize_workflow(name, create_ds=true, priority=0)
215
+ def initialize_workflow(name, create_ds = true, priority = 0)
216
216
  priority = workflows.current_priority if priority == 0
217
217
  opts = { :create_ds => create_ds }
218
218
  opts[:priority] = priority if(priority > 0)
219
219
  opts[:lane_id] = default_workflow_lane
220
- Dor::WorkflowService.create_workflow(Dor::WorkflowObject.initial_repo(name), self.pid, name, Dor::WorkflowObject.initial_workflow(name), opts)
220
+ Dor::WorkflowService.create_workflow(Dor::WorkflowObject.initial_repo(name), pid, name, Dor::WorkflowObject.initial_workflow(name), opts)
221
221
  end
222
222
 
223
223
 
@@ -237,4 +237,3 @@ module Dor
237
237
 
238
238
 
239
239
  end
240
-
@@ -18,7 +18,7 @@ module Dor
18
18
 
19
19
  # Add in each tag
20
20
  release_tags.each do |r_tag|
21
- self.add_release_node(r_tag[:release],r_tag)
21
+ add_release_node(r_tag[:release],r_tag)
22
22
  end
23
23
 
24
24
  # Save item to dor so the robots work with the latest data
@@ -54,7 +54,7 @@ module Dor
54
54
  # Get the most recent self tag for all targets and save their result since most recent self always trumps any other non self tags
55
55
  latest_self_tags = get_newest_release_tag(self_release_tags)
56
56
  latest_self_tags.keys.each do |target|
57
- released_hash[target] = self.clean_release_tag_for_purl(latest_self_tags[target])
57
+ released_hash[target] = clean_release_tag_for_purl(latest_self_tags[target])
58
58
  end
59
59
 
60
60
  # With Self Tags Resolved We Now need to deal with tags on all sets this object is part of
@@ -83,7 +83,7 @@ module Dor
83
83
  #
84
84
  #@return [Hash] a hash of self tags for each to value
85
85
  def get_self_release_tags(tags)
86
- return get_tags_for_what_value(tags, 'self')
86
+ get_tags_for_what_value(tags, 'self')
87
87
  end
88
88
 
89
89
  #Take an item and get all of its release tags and all tags on collections it is a member of it
@@ -95,7 +95,7 @@ module Dor
95
95
  collections.each do |collection|
96
96
  return_tags = combine_two_release_tag_hashes(return_tags, Dor::Item.find(collection.id).get_release_tags_for_item_and_all_governing_sets) # recurvise so parents of parents are found
97
97
  end
98
- return return_tags
98
+ return_tags
99
99
  end
100
100
 
101
101
  #Take two hashes of tags and combine them, will not overwrite but will enforce uniqueness of the tags
@@ -106,10 +106,10 @@ module Dor
106
106
  #@return [Hash] the combined hash with uniquiness enforced
107
107
  def combine_two_release_tag_hashes(hash_one, hash_two)
108
108
  hash_two.keys.each do |key|
109
- hash_one[key] = hash_two[key] if hash_one[key] == nil
110
- hash_one[key] = (hash_one[key] + hash_two[key]).uniq if hash_one[key] != nil
109
+ hash_one[key] = hash_two[key] if hash_one[key].nil?
110
+ hash_one[key] = (hash_one[key] + hash_two[key]).uniq unless hash_one[key].nil?
111
111
  end
112
- return hash_one
112
+ hash_one
113
113
  end
114
114
 
115
115
  #Take a hash of tags and return all tags with the matching what target
@@ -124,7 +124,7 @@ module Dor
124
124
  self_tags = tags[key].select {|tag| tag['what'] == what_target.downcase}
125
125
  return_hash[key] = self_tags if self_tags.size > 0
126
126
  end
127
- return return_hash
127
+ return_hash
128
128
  end
129
129
 
130
130
  #Take a hash of tags as obtained via Dor::Item.release_tags and returns the newest tag for each namespace
@@ -153,7 +153,7 @@ module Dor
153
153
  array_of_tags.each do |tag|
154
154
  latest_tag_in_array = tag if tag['when'] > latest_tag_in_array['when']
155
155
  end
156
- return latest_tag_in_array
156
+ latest_tag_in_array
157
157
  end
158
158
 
159
159
  # Takes a tag and returns true or false if it applies to the specific item
@@ -189,17 +189,17 @@ module Dor
189
189
  #
190
190
  #@return [Nokogiri::XML::NodeSet] of all release tags and their attributes
191
191
  def release_tags
192
- release_tags = self.identityMetadata.ng_xml.xpath('//release')
192
+ release_tags = identityMetadata.ng_xml.xpath('//release')
193
193
  return_hash = {}
194
194
  release_tags.each do |release_tag|
195
- hashed_node = self.release_tag_node_to_hash(release_tag)
196
- if return_hash[hashed_node[:to]] != nil
195
+ hashed_node = release_tag_node_to_hash(release_tag)
196
+ if !return_hash[hashed_node[:to]].nil?
197
197
  return_hash[hashed_node[:to]] << hashed_node[:attrs]
198
198
  else
199
199
  return_hash[hashed_node[:to]] = [hashed_node[:attrs]]
200
200
  end
201
201
  end
202
- return return_hash
202
+ return_hash
203
203
  end
204
204
 
205
205
  #method to convert one release element into an array
@@ -239,8 +239,8 @@ module Dor
239
239
  #
240
240
  #@example
241
241
  # item.add_tag(true,:release,{:tag=>'Fitch : Batch2',:what=>'self',:to=>'Searchworks',:who=>'petucket', :displayType='filmstrip'})
242
- def add_release_node(release, attrs={})
243
- identity_metadata_ds = self.identityMetadata
242
+ def add_release_node(release, attrs = {})
243
+ identity_metadata_ds = identityMetadata
244
244
  attrs[:when] = Time.now.utc.iso8601 if attrs[:when].nil? #add the timestamp
245
245
  attrs[:displayType] = 'file' if attrs[:displayType].nil? #default to file is no display type is passed
246
246
  valid_release_attributes(release, attrs)
@@ -258,8 +258,8 @@ module Dor
258
258
  #@return [Boolean] Returns true if no errors found
259
259
  #
260
260
  #@params attrs [hash] A hash of attributes for the tag, must contain :when, a ISO 8601 timestamp and :who to identify who or what added the tag, :to,
261
- def valid_release_attributes(tag, attrs={})
262
- raise ArgumentError, ":when is not iso8601" if attrs[:when].match('\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z') == nil
261
+ def valid_release_attributes(tag, attrs = {})
262
+ raise ArgumentError, ":when is not iso8601" if attrs[:when].match('\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z').nil?
263
263
  [:who, :to, :what].each do |check_attr|
264
264
  raise ArgumentError, "#{check_attr} not supplied as a String" if attrs[check_attr].class != String
265
265
  end
@@ -280,17 +280,17 @@ module Dor
280
280
  #
281
281
  #@return [Nokogiri::XML::NodeSet] of all release tags and their attributes
282
282
  def release_nodes
283
- release_tags = self.identityMetadata.ng_xml.xpath('//release')
283
+ release_tags = identityMetadata.ng_xml.xpath('//release')
284
284
  return_hash = {}
285
285
  release_tags.each do |release_tag|
286
- hashed_node = self.release_tag_node_to_hash(release_tag)
287
- if return_hash[hashed_node[:to]] != nil
286
+ hashed_node = release_tag_node_to_hash(release_tag)
287
+ if !return_hash[hashed_node[:to]].nil?
288
288
  return_hash[hashed_node[:to]] << hashed_node[:attrs]
289
289
  else
290
290
  return_hash[hashed_node[:to]] = [hashed_node[:attrs]]
291
291
  end
292
292
  end
293
- return return_hash
293
+ return_hash
294
294
  end
295
295
 
296
296
  #Get a list of all release nodes found in a purl document
@@ -323,8 +323,8 @@ module Dor
323
323
  #@return [String] the druid sans the druid: or if there was no druid: prefix, the entire string you passed
324
324
  def remove_druid_prefix
325
325
  druid_prefix = "druid:"
326
- return self.id.split(druid_prefix)[1] if self.id.split(druid_prefix).size > 1
327
- return druid
326
+ return id.split(druid_prefix)[1] if id.split(druid_prefix).size > 1
327
+ druid
328
328
  end
329
329
 
330
330
  # Take the and create the entire purl url that will usable for the open method in open-uri, returns https
@@ -348,8 +348,8 @@ module Dor
348
348
  #
349
349
  #@return [Array] An array containing all the release tags
350
350
  def get_release_tags_from_purl
351
- xml = self.get_xml_from_purl
352
- return self.get_release_tags_from_purl_xml(xml)
351
+ xml = get_xml_from_purl
352
+ get_release_tags_from_purl_xml(xml)
353
353
  end
354
354
 
355
355
  # This function calls purl and gets a list of all release tags currently in purl. It then compares to the list you have generated.
@@ -362,7 +362,7 @@ module Dor
362
362
  missing_tags.each do |missing_tag|
363
363
  new_tags[missing_tag.capitalize] = {"release"=>false}
364
364
  end
365
- return new_tags
365
+ new_tags
366
366
  end
367
367
 
368
368
  def to_solr(solr_doc = {}, *args)
@@ -25,7 +25,7 @@ module Dor
25
25
  # retrieve the differences between the current contentMetadata and the previously ingested version
26
26
  # (filtering to select only the files that should be shelved to stacks)
27
27
  def get_shelve_diff
28
- inventory_diff_xml = self.get_content_diff(:shelve)
28
+ inventory_diff_xml = get_content_diff(:shelve)
29
29
  inventory_diff = Moab::FileInventoryDifference.parse(inventory_diff_xml)
30
30
  shelve_diff = inventory_diff.group_difference("content")
31
31
  shelve_diff
@@ -35,30 +35,30 @@ module Dor
35
35
  # @param [Moab::FileGroupDifference] content_diff The differences between the current contentMetadata and the previously ingested version
36
36
  # @param [DruidTools::Druid] workspace_druid the location of the object's files in the workspace area
37
37
  # @return [Pathname] The location of the object's content files in the workspace area
38
- def workspace_content_dir (content_diff, workspace_druid)
38
+ def workspace_content_dir(content_diff, workspace_druid)
39
39
  deltas = content_diff.file_deltas
40
40
  filelist = deltas[:modified] + deltas[:added] + deltas[:copyadded].collect{|old,new| new}
41
41
  return nil if filelist.empty?
42
42
  content_pathname = Pathname(workspace_druid.find_filelist_parent('content', filelist))
43
43
  content_pathname
44
44
  end
45
-
46
-
47
- # get the stack location based on the contentMetadata stacks attribute
45
+
46
+
47
+ # get the stack location based on the contentMetadata stacks attribute
48
48
  # or using the default value from the config file if it doesn't exist
49
49
  def get_stacks_location
50
-
51
- contentMetadataDS = self.datastreams['contentMetadata']
52
- unless contentMetadataDS.nil? or contentMetadataDS.stacks.length == 0
53
- stacks_location = contentMetadataDS.stacks[0]
50
+
51
+ contentMetadataDS = datastreams['contentMetadata']
52
+ unless contentMetadataDS.nil? || contentMetadataDS.stacks.length == 0
53
+ stacks_location = contentMetadataDS.stacks[0]
54
54
  if stacks_location.start_with?"/" #Absolute stacks path
55
55
  return stacks_location
56
- else
57
- raise "stacks attribute for item: "+self.id+ " contentMetadata should start with /. The current value is "+stacks_location
56
+ else
57
+ raise "stacks attribute for item: "+id+ " contentMetadata should start with /. The current value is "+stacks_location
58
58
  end
59
- end
60
- return Config.stacks.local_stacks_root #Default stacks
61
-
59
+ end
60
+ Config.stacks.local_stacks_root #Default stacks
61
+
62
62
  end
63
63
  end
64
64
  end
@@ -1,16 +1,16 @@
1
1
  module Dor
2
2
  module Upgradable
3
3
 
4
- # The Upgradable mixin is responsible for making sure all DOR objects,
5
- # concerns, and datastreams know how to upgrade themselves to the latest
4
+ # The Upgradable mixin is responsible for making sure all DOR objects,
5
+ # concerns, and datastreams know how to upgrade themselves to the latest
6
6
  # Chimera/DOR content standards.
7
7
  #
8
8
  # To add a new upgrade:
9
9
  # 1) include Dor::Upgradable within whatever model, datastream, or mixin
10
10
  # you want to make upgradable.
11
11
  # 2) Add a block to the model, datastream, or mixin as follows:
12
- #
13
- # on_upgrade(v) do |obj|
12
+ #
13
+ # on_upgrade(v) do |obj|
14
14
  # # Do whatever needs to be done to obj
15
15
  # end
16
16
  #
@@ -20,7 +20,7 @@ module Dor
20
20
  # The block can either be defined on the model itself, or in a file
21
21
  # in the dor/migrations/[model] directory. See Dor::Identifiable and
22
22
  # dor/migrations/identifiable/* for an example.
23
-
23
+
24
24
  Callback = Struct.new :module, :version, :description, :block
25
25
 
26
26
  mattr_accessor :__upgrade_callbacks
@@ -28,12 +28,12 @@ module Dor
28
28
  def self.add_upgrade_callback c, v, d, &b
29
29
  @@__upgrade_callbacks << Callback.new(c, Gem::Version.new(v), d, b)
30
30
  end
31
-
31
+
32
32
  def self.run_upgrade_callbacks(obj, event_handler)
33
33
  relevant = @@__upgrade_callbacks.select { |c| obj.is_a?(c.module) }.sort_by(&:version)
34
- results = relevant.collect do |c|
34
+ results = relevant.collect do |c|
35
35
  result = c.block.call(obj)
36
- if result and event_handler.respond_to?(:add_event)
36
+ if result && event_handler.respond_to?(:add_event)
37
37
  event_handler.add_event 'remediation', "#{c.module.name} #{c.version}", c.description
38
38
  end
39
39
  if result
@@ -43,29 +43,29 @@ module Dor
43
43
  end
44
44
  results.any?
45
45
  end
46
-
46
+
47
47
  def self.included(base)
48
48
  base.instance_eval do
49
49
  def self.on_upgrade version, desc, &block
50
50
  Dor::Upgradable.add_upgrade_callback self, version, desc, &block
51
51
  end
52
-
52
+
53
53
  Dir[File.join(Dor.root,'dor','migrations',base.name.split(/::/).last.underscore,'*.rb')].each do |migration|
54
54
  require migration
55
55
  end
56
56
  end
57
57
  end
58
-
58
+
59
59
  def upgrade!
60
60
  results = [Dor::Upgradable.run_upgrade_callbacks(self, self)]
61
61
  if self.respond_to?(:datastreams)
62
- self.datastreams.each_pair do |dsid, ds|
62
+ datastreams.each_pair do |dsid, ds|
63
63
  results << Dor::Upgradable.run_upgrade_callbacks(ds, self) unless ds.new?
64
64
  end
65
65
  end
66
66
 
67
67
  if results.any?
68
- self.save
68
+ save
69
69
  else
70
70
  false
71
71
  end