Module: Dor::Upgradable
- Included in:
- ContentMetadataDS, Identifiable, Processable
- 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
27 28 29 |
# File 'lib/dor/models/upgradable.rb', line 27 def self.add_upgrade_callback(c, v, d, &b) @@__upgrade_callbacks << Callback.new(c, Gem::Version.new(v), d, b) end |
.included(base) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/dor/models/upgradable.rb', line 46 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
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/dor/models/upgradable.rb', line 31 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 && 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
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/dor/models/upgradable.rb', line 58 def upgrade! results = [Dor::Upgradable.run_upgrade_callbacks(self, self)] if self.respond_to?(:datastreams) datastreams.each_pair do |dsid, ds| results << Dor::Upgradable.run_upgrade_callbacks(ds, self) unless ds.new? end end if results.any? save else false end end |