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.
81 82 83 84 85 86 87 88 89 |
# File 'lib/dor/models/concerns/versionable.rb', line 81 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
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/dor/models/concerns/versionable.rb', line 59 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
46 47 48 |
# File 'lib/dor/models/concerns/versionable.rb', line 46 def current_version datastreams['versionMetadata'].current_version_id end |
#new_version_open? ⇒ Boolean
Returns true if ‘opened’ lifecycle is active, false otherwise.
73 74 75 76 77 |
# File 'lib/dor/models/concerns/versionable.rb', line 73 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
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 42 43 44 |
# File 'lib/dor/models/concerns/versionable.rb', line 17 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 |