Class: Ddr::Derivatives::Derivative

Inherits:
Object
  • Object
show all
Defined in:
lib/ddr/derivatives/derivative.rb

Direct Known Subclasses

MultiresImage, Thumbnail

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(generator) ⇒ Derivative

Returns a new instance of Derivative.



7
8
9
# File 'lib/ddr/derivatives/derivative.rb', line 7

def initialize(generator)
  @generator = generator
end

Instance Attribute Details

#generatorObject (readonly)

Returns the value of attribute generator.



4
5
6
# File 'lib/ddr/derivatives/derivative.rb', line 4

def generator
  @generator
end

#workdirObject

Returns the value of attribute workdir.



5
6
7
# File 'lib/ddr/derivatives/derivative.rb', line 5

def workdir
  @workdir
end

Class Method Details

.generatable?(object) ⇒ Boolean

Whether a derivative can be generated for the object. Implemented in each subclass.

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


27
28
29
# File 'lib/ddr/derivatives/derivative.rb', line 27

def self.generatable?(object)
  raise NotImplementedError
end

.has_derivative?(object) ⇒ Boolean

Whether the object has this derivative. Implemented in each subclass.

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


33
34
35
# File 'lib/ddr/derivatives/derivative.rb', line 33

def self.has_derivative?(object)
  raise NotImplementedError
end

Instance Method Details

#delete!(object) ⇒ Object

Delete the existing derivative Implemented in each subclass.

Raises:

  • (NotImplementedError)


39
40
41
# File 'lib/ddr/derivatives/derivative.rb', line 39

def delete!(object)
  raise NotImplementedError
end

#generate!(object) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# 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