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