Class: CurationConcerns::PersistDerivatives

Inherits:
Hydra::Derivatives::PersistOutputFileService
  • Object
show all
Defined in:
app/services/curation_concerns/persist_derivatives.rb

Class Method Summary collapse

Class Method Details

.call(stream, directives) ⇒ Object

Persists a derivative to the local file system. This Service conforms to the signature of ‘Hydra::Derivatives::PersistOutputFileService`. This service is an alternative to the default Hydra::Derivatives::PersistOutputFileService. This service will always update existing and does not do versioning of persisted files.

Parameters:

  • stream (#read)

    the derivative filestream

  • directives (Hash)

Options Hash (directives):

  • :url (String)

    a url to the file destination



11
12
13
14
15
# File 'app/services/curation_concerns/persist_derivatives.rb', line 11

def self.call(stream, directives)
  output_file(directives) do |output|
    IO.copy_stream(stream, output)
  end
end

.derivative_path_factoryObject



29
30
31
# File 'app/services/curation_concerns/persist_derivatives.rb', line 29

def self.derivative_path_factory
  DerivativePath
end

.output_file(directives, &blk) ⇒ Object

Open the output file to write and yield the block to the file. It makes the directories in the path if necessary.

Raises:

  • (ArgumentError)


19
20
21
22
23
24
25
26
27
# File 'app/services/curation_concerns/persist_derivatives.rb', line 19

def self.output_file(directives, &blk)
  # name = derivative_path_factory.derivative_path_for_reference(object, destination_name)
  raise ArgumentError, "No :url was provided in the transcoding directives" unless directives.key?(:url)
  uri = URI(directives.fetch(:url))
  raise ArgumentError, "Must provide a file uri" unless uri.scheme == 'file'
  output_file_dir = File.dirname(uri.path)
  FileUtils.mkdir_p(output_file_dir) unless File.directory?(output_file_dir)
  File.open(uri.path, 'wb', &blk)
end