Module: Dor::Versionable
- Extended by:
- ActiveSupport::Concern
- Includes:
- Processable
- Included in:
- AdminPolicyObject, Collection, Item, Set
- Defined in:
- lib/dor/models/versionable.rb
Constant Summary
Constants included from Processable
Processable::STATUS_CODE_DISP_TXT, Processable::STEPS
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.
Methods included from Processable
#build_datastream, #cleanup, #create_workflow, #empty_datastream?, #find_metadata_file, #initialize_workflow, #milestones, #set_workflows_datastream_location, #simplified_status_code_disp_txt, #status, #status_info, #to_solr
Methods included from SolrDocHelper
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.
78 79 80 81 82 83 84 85 86 |
# File 'lib/dor/models/versionable.rb', line 78 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
57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/dor/models/versionable.rb', line 57 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
44 45 46 |
# File 'lib/dor/models/versionable.rb', line 44 def current_version datastreams['versionMetadata'].current_version_id end |
#new_version_open? ⇒ Boolean
Returns true if ‘opened’ lifecycle is active, false otherwise.
71 72 73 74 |
# File 'lib/dor/models/versionable.rb', line 71 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
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 42 |
# File 'lib/dor/models/versionable.rb', line 16 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 datastreams['events'].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 |