lib/ddr/managers/derivatives_manager.rb in ddr-models-2.3.2 vs lib/ddr/managers/derivatives_manager.rb in ddr-models-2.4.0.rc1
- old
+ new
@@ -49,27 +49,31 @@
generate_derivative! derivative
end
end
def generate_derivative!(derivative)
- tempdir = FileUtils.mkdir(File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname('',nil))).first
- generator_source = create_source_file(tempdir)
- generator_output = File.new(File.join(tempdir, "output.out"), 'wb')
- results = derivative.generator.new(generator_source.path, generator_output.path, derivative.options).generate
- generator_source.close unless generator_source.closed?
- if results.status.success?
- generator_output = File.open(generator_output, 'rb')
- object.reload if object.persisted?
- object.add_file generator_output, derivative.datastream, mime_type: derivative.generator.output_mime_type
- object.save!
- else
- Rails.logger.error results.stderr
- raise Ddr::Models::DerivativeGenerationFailure,
- "Failure generating #{derivative.name} for #{object.pid}: #{results.stderr}"
+ tempdir_path = File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname('',nil))
+ begin
+ tempdir = FileUtils.mkdir(tempdir_path).first
+ generator_source = create_source_file(tempdir)
+ generator_output = File.new(File.join(tempdir, "output.out"), 'wb')
+ results = derivative.generator.new(generator_source.path, generator_output.path, derivative.options).generate
+ generator_source.close unless generator_source.closed?
+ if results.status.success?
+ generator_output = File.open(generator_output, 'rb')
+ object.reload if object.persisted?
+ object.add_file generator_output, derivative.datastream, mime_type: derivative.generator.output_mime_type
+ object.save!
+ else
+ Rails.logger.error results.stderr
+ raise Ddr::Models::DerivativeGenerationFailure,
+ "Failure generating #{derivative.name} for #{object.pid}: #{results.stderr}"
+ end
+ generator_output.close unless generator_output.closed?
+ ensure
+ FileUtils.remove_dir(tempdir_path) if File.exist?(tempdir_path)
end
- generator_output.close unless generator_output.closed?
- FileUtils.remove_dir(tempdir)
end
def delete_derivative(derivative)
ActiveSupport::Notifications.instrument(Ddr::Notifications::UPDATE,
pid: object.pid,
@@ -108,10 +112,10 @@
return false unless object.has_content?
case derivative.name
when :multires_image
object.content_type == "image/tiff"
when :thumbnail
- object.image? || object.pdf?
+ object.image?
else
false
end
end