Module: Dor::Versionable
- Extended by:
- ActiveSupport::Concern
- Included in:
- Abstract
- Defined in:
- lib/dor/models/concerns/versionable.rb
Instance Method Summary collapse
-
#allows_modification? ⇒ Boolean
True if the object is in a state that allows it to be modified.
-
#close_version(opts = {}) ⇒ Object
(also: #submit_version)
Sets versioningWF:submit-version to completed and initiates accessionWF for the object.
- #current_version ⇒ Object
-
#new_version_open? ⇒ Boolean
True if ‘opened’ lifecycle is active, false otherwise.
-
#open_new_version(opts = {}) ⇒ Object
(also: #start_version)
Increments the version number and initializes versioningWF for the object.
Instance Method Details
#allows_modification? ⇒ Boolean
Returns true if the object is in a state that allows it to be modified. States that will allow modification are: has not been submitted for accessioning, has an open version or has sdr-ingest set to hold.
77 78 79 80 81 82 83 84 85 |
# File 'lib/dor/models/concerns/versionable.rb', line 77 def allows_modification? if Dor::Config.workflow.client.get_lifecycle('dor', pid, 'submitted') && !new_version_open? && Dor::Config.workflow.client.get_workflow_status('dor', pid, 'accessionWF', 'sdr-ingest-transfer') != 'hold' false else true end end |
#close_version(opts = {}) ⇒ Object Also known as: submit_version
Sets versioningWF:submit-version to completed and initiates accessionWF for the object
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/dor/models/concerns/versionable.rb', line 56 def close_version(opts = {}) unless opts.empty? datastreams['versionMetadata'].update_current_version opts datastreams['versionMetadata'].save end raise Dor::Exception, 'latest version in versionMetadata requires tag and description before it can be closed' unless datastreams['versionMetadata'].current_version_closeable? raise Dor::Exception, 'Trying to close version on an object not opened for versioning' unless new_version_open? raise Dor::Exception, 'accessionWF already created for versioned object' if Dor::Config.workflow.client.get_active_lifecycle('dor', pid, 'submitted') Dor::Config.workflow.client.close_version 'dor', pid, opts.fetch(:start_accession, true) # Default to creating accessionWF when calling close_version end |
#current_version ⇒ Object
43 44 45 |
# File 'lib/dor/models/concerns/versionable.rb', line 43 def current_version datastreams['versionMetadata'].current_version_id end |
#new_version_open? ⇒ Boolean
Returns true if ‘opened’ lifecycle is active, false otherwise.
70 71 72 73 |
# File 'lib/dor/models/concerns/versionable.rb', line 70 def new_version_open? return true if Dor::Config.workflow.client.get_active_lifecycle('dor', pid, 'opened') false end |
#open_new_version(opts = {}) ⇒ Object Also known as: start_version
Increments the version number and initializes versioningWF for the object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/dor/models/concerns/versionable.rb', line 15 def open_new_version(opts = {}) # During local development, we need a way to open a new version even if the object has not been accessioned. raise(Dor::Exception, 'Object net yet accessioned') unless opts[:assume_accessioned] || Dor::Config.workflow.client.get_lifecycle('dor', pid, 'accessioned') raise Dor::Exception, 'Object already opened for versioning' if new_version_open? raise Dor::Exception, 'Object currently being accessioned' if Dor::Config.workflow.client.get_active_lifecycle('dor', pid, 'submitted') sdr_version = Sdr::Client.current_version pid vmd_ds = datastreams['versionMetadata'] vmd_ds.sync_then_increment_version sdr_version vmd_ds.save unless self.new_record? k = :create_workflows_ds if opts.key?(k) # During local development, Hydrus (or another app w/ local Fedora) does not want to initialize workflows datastream. create_workflow('versioningWF', opts[k]) else create_workflow('versioningWF') end vmd_upd_info = opts[:vers_md_upd_info] return unless vmd_upd_info add_event('open', vmd_upd_info[:opening_user_name], "Version #{vmd_ds.current_version_id} opened") vmd_ds.update_current_version({:description => vmd_upd_info[:description], :significance => vmd_upd_info[:significance].to_sym}) save end |