dor-services 4.22.3 → 4.22.4

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 +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