Class: Ddr::Managers::DerivativesManager
- Extended by:
- Deprecation
- Defined in:
- lib/ddr/managers/derivatives_manager.rb
Defined Under Namespace
Classes: DerivativeJob
Constant Summary collapse
- SCHEDULE_LATER =
:later
- SCHEDULE_NOW =
:now
- SCHEDULES =
[ SCHEDULE_LATER, SCHEDULE_NOW ]
- ACTION_DELETE =
"delete"
- ACTION_GENERATE =
"generate"
Instance Attribute Summary
Attributes inherited from Manager
Instance Method Summary collapse
- #delete_derivative!(derivative) ⇒ Object (also: #delete_derivative)
- #generate_derivative!(derivative) ⇒ Object (also: #generate_derivative)
- #source_datastream ⇒ Object
- #update_derivative(derivative) ⇒ Object
- #update_derivatives(schedule = SCHEDULE_LATER) ⇒ Object
Methods inherited from Manager
Constructor Details
This class inherits a constructor from Ddr::Managers::Manager
Instance Method Details
#delete_derivative!(derivative) ⇒ Object Also known as: delete_derivative
69 70 71 72 73 74 |
# File 'lib/ddr/managers/derivatives_manager.rb', line 69 def delete_derivative!(derivative) File.unlink *object.datastreams[derivative.datastream].file_paths if object.datastreams[derivative.datastream].external? object.datastreams[derivative.datastream].delete object.save! end |
#generate_derivative!(derivative) ⇒ Object Also known as: generate_derivative
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/ddr/managers/derivatives_manager.rb', line 44 def generate_derivative!(derivative) tempdir_path = File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname('',nil)) begin tempdir = FileUtils.mkdir(tempdir_path).first generator_source_path = source_datastream.external? ? source_datastream.file_path : create_source_file(source_datastream,tempdir) generator_output_path = File.new(File.join(tempdir, "output.out"), 'wb').path exitstatus = derivative.generator.new(generator_source_path, generator_output_path, derivative.).generate if exitstatus == 0 generator_output = File.open(generator_output_path, 'rb') object.reload if object.persisted? object.add_file generator_output, derivative.datastream, mime_type: derivative.generator.output_mime_type object.save! else raise Ddr::Models::DerivativeGenerationFailure, "Failure generating #{derivative.name} for #{object.pid}" end generator_output.close unless generator_output.closed? ensure FileUtils.remove_dir(tempdir_path) if File.exist?(tempdir_path) end end |
#source_datastream ⇒ Object
78 79 80 81 |
# File 'lib/ddr/managers/derivatives_manager.rb', line 78 def source_datastream @source_datastream ||= object.has_intermediate_file? ? object.datastreams[Ddr::Datastreams::INTERMEDIATE_FILE] : object.datastreams[Ddr::Datastreams::CONTENT] end |
#update_derivative(derivative) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/ddr/managers/derivatives_manager.rb', line 30 def update_derivative(derivative) raise ArgumentError, "This object does not have a datastream for #{derivative.name} derivatives" unless object.datastreams.include?(derivative.datastream) if generatable? derivative generate_derivative derivative else # Delete existing derivative (if there is one) if that type of derivative is no longer # applicable to the object if object.datastreams[derivative.datastream].has_content? delete_derivative derivative end end end |
#update_derivatives(schedule = SCHEDULE_LATER) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/ddr/managers/derivatives_manager.rb', line 14 def update_derivatives(schedule=SCHEDULE_LATER) raise ArgumentError, "Must be one of #{SCHEDULES}" unless SCHEDULES.include?(schedule) Ddr::Derivatives::DERIVATIVES.values.each do |derivative| if Ddr::Derivatives.update_derivatives.include?(derivative.name) # Need to update derivative if object has a datastream for this type of derivative and # either (or both) of the following conditions are true: # - object already has content in the derivative's datastream (need to delete or replace it) # - the derivative can be generated for this object if object.datastreams.include?(derivative.datastream) && (object.datastreams[derivative.datastream].has_content? || generatable?(derivative)) schedule == SCHEDULE_NOW ? update_derivative(derivative) : Resque.enqueue(DerivativeJob, object.pid, derivative.name) end end end end |