Class: Hydra::Works::AddExternalFileToFileSet

Inherits:
Object
  • Object
show all
Defined in:
lib/hydra/works/services/add_external_file_to_file_set.rb

Defined Under Namespace

Classes: Updater, VersioningUpdater

Class Method Summary collapse

Class Method Details

.call(file_set, external_file_url, type, opts = {}) ⇒ Object

Adds a file to the file_set

Parameters:

  • file_set (Hydra::PCDM::FileSet)

    the file will be added to

  • external_file_url (String)

    URL representing the externally stored file

  • type (RDF::URI or String)

    URI for the RDF.type that identifies the file’s role within the file_set

  • opts (Hash) (defaults to: {})

    Options

Options Hash (opts):

  • :update_existing (Boolean)

    When set to true, performs a create_or_update. When set to false, always creates a new file within file_set.files.

  • :versioning (Boolean)

    Whether to create new version entries (only applicable if type corresponds to a versionable file)

  • :filename (String)

    A string for the original file name. Defaults to the same value as external_file_url



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/hydra/works/services/add_external_file_to_file_set.rb', line 11

def self.call(file_set, external_file_url, type, opts = {})
  fail ArgumentError, 'supplied object must be a file set' unless file_set.file_set?

  update_existing = opts.fetch(:update_existing, true)
  versioning = opts.fetch(:versioning, true)
  filename = opts.fetch(:filename, external_file_url)

  # TODO: required as a workaround for https://github.com/projecthydra/active_fedora/pull/858
  file_set.save unless file_set.persisted?

  updater_class = versioning ? VersioningUpdater : Updater
  updater = updater_class.new(file_set, type, update_existing)
  status = updater.update(external_file_url, filename)
  status ? file_set : false
end