Module: Dor::Upgradable
- Included in:
- ContentMetadataDS, Identifiable, Processable, Versionable
- Defined in:
- lib/dor/models/upgradable.rb
Defined Under Namespace
Classes: Callback
Constant Summary collapse
- @@__upgrade_callbacks =
[]
Class Method Summary collapse
- .add_upgrade_callback(c, v, d, &b) ⇒ Object
- .included(base) ⇒ Object
- .run_upgrade_callbacks(obj, event_handler) ⇒ Object
Instance Method Summary collapse
Class Method Details
.add_upgrade_callback(c, v, d, &b) ⇒ Object
28 29 30 |
# File 'lib/dor/models/upgradable.rb', line 28 def self.add_upgrade_callback c, v, d, &b @@__upgrade_callbacks << Callback.new(c, Gem::Version.new(v), d, b) end |
.included(base) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/dor/models/upgradable.rb', line 47 def self.included(base) base.instance_eval do def self.on_upgrade version, desc, &block Dor::Upgradable.add_upgrade_callback self, version, desc, &block end Dir[File.join(Dor.root,'dor','migrations',base.name.split(/::/).last.underscore,'*.rb')].each do |migration| require migration end end end |
.run_upgrade_callbacks(obj, event_handler) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/dor/models/upgradable.rb', line 32 def self.run_upgrade_callbacks(obj, event_handler) relevant = @@__upgrade_callbacks.select { |c| obj.is_a?(c.module) }.sort_by(&:version) results = relevant.collect do |c| result = c.block.call(obj) if result and event_handler.respond_to?(:add_event) event_handler.add_event 'remediation', "#{c.module.name} #{c.version}", c.description end if result Dor.logger.info "Applied remediation '#{c.description}' to '#{obj.pid}'" end result end results.any? end |
Instance Method Details
#upgrade! ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/dor/models/upgradable.rb', line 59 def upgrade! results = [Dor::Upgradable.run_upgrade_callbacks(self, self)] if self.respond_to?(:datastreams) self.datastreams.each_pair do |dsid, ds| results << Dor::Upgradable.run_upgrade_callbacks(ds, self) unless ds.new? end end if results.any? self.save else false end end |