Module: Dor::Versionable
- Extended by:
- ActiveSupport::Concern
- Includes:
- Processable, Upgradable
- Included in:
- AdminPolicyObject, BasicItem, Collection
- 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 Upgradable
add_upgrade_callback, included, run_upgrade_callbacks, #upgrade!
Methods included from Processable
#build_datastream, #cleanup, #empty_datastream?, #find_metadata_file, #initialize_workflow, #milestones, #set_workflows_datastream_location, #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.
76 77 78 79 80 81 82 |
# File 'lib/dor/models/versionable.rb', line 76 def allows_modification? if Dor::WorkflowService.get_lifecycle('dor', pid, 'submitted' ) and not new_version_open? and not Dor::WorkflowService.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
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/dor/models/versionable.rb', line 55 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::WorkflowService.get_active_lifecycle('dor', pid, 'submitted')) Dor::WorkflowService.close_version 'dor', pid, opts.fetch(:start_accession, true) # Default to creating accessionWF when calling close_version Dor::WorkflowService.archive_workflow 'dor', pid, 'versioningWF', opts[:version_num] end |
#current_version ⇒ Object
42 43 44 |
# File 'lib/dor/models/versionable.rb', line 42 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/versionable.rb', line 70 def new_version_open? return true if(Dor::WorkflowService.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 |
# 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::WorkflowService.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::WorkflowService.get_active_lifecycle('dor', pid, 'submitted')) ds = datastreams['versionMetadata'] ds.increment_version ds.content = ds.ng_xml.to_s ds.save unless self.new_object? k = :create_workflows_ds if opts.has_key?(k) # During local development, Hydrus (or some other app running Fedora locally) # does not want this call to initialize the workflows datastream. initialize_workflow('versioningWF', 'dor', opts[k]) else initialize_workflow('versioningWF') end end |