class Ddr::Derivatives::Derivative
Attributes
generator[R]
workdir[RW]
Public Class Methods
generatable?(object)
click to toggle source
Whether a derivative can be generated for the object. Implemented in each subclass.
# File lib/ddr/derivatives/derivative.rb, line 27 def self.generatable?(object) raise NotImplementedError end
has_derivative?(object)
click to toggle source
Whether the object has this derivative. Implemented in each subclass.
# File lib/ddr/derivatives/derivative.rb, line 33 def self.has_derivative?(object) raise NotImplementedError end
new(generator)
click to toggle source
# File lib/ddr/derivatives/derivative.rb, line 7 def initialize(generator) @generator = generator end
Public Instance Methods
delete!(object)
click to toggle source
Delete the existing derivative Implemented in each subclass.
# File lib/ddr/derivatives/derivative.rb, line 39 def delete!(object) raise NotImplementedError end
generate!(object)
click to toggle source
# File lib/ddr/derivatives/derivative.rb, line 11 def generate!(object) self.workdir = FileUtils.mkdir(File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname('',nil))).first source_path = create_source_file(object) results = generator.generate(source_path, output_path(object)) if results.status.success? store(object, results.output_path) else Rails.logger.error results.stderr raise Ddr::Models::DerivativeGenerationFailure, "Failure generating #{self.class.name} for #{object.id}: #{results.stderr}" end FileUtils.remove_dir(workdir) end
Protected Instance Methods
output_path(object)
click to toggle source
The path to which the generated output is written. Implemented in each subclass.
# File lib/ddr/derivatives/derivative.rb, line 47 def output_path(object) raise NotImplementedError end
store(object, output_path)
click to toggle source
The mechanism by which the generated derivative is registered with the ActiveFedora object. Implemented in each subclass.
# File lib/ddr/derivatives/derivative.rb, line 53 def store(object, output_path) raise NotImplementedError end
Private Instance Methods
create_source_file(object)
click to toggle source
# File lib/ddr/derivatives/derivative.rb, line 59 def create_source_file(object) file_path = File.join(workdir, "source") file = File.new(file_path, "wb") file.write(object.content.content) file.close file_path end