Class: Hyrax::ValkyriePersistDerivatives
- Inherits:
-
Hydra::Derivatives::PersistOutputFileService
- Object
- Hydra::Derivatives::PersistOutputFileService
- Hyrax::ValkyriePersistDerivatives
- Defined in:
- app/services/hyrax/valkyrie_persist_derivatives.rb
Class Method Summary collapse
-
.call(stream, directives, uploader: Hyrax::ValkyrieUpload.new(storage_adapter: Hyrax.config.derivatives_storage_adapter)) ⇒ Object
Persists a derivative using the defined Valkyrie storage adapter.
- .filename(directives) ⇒ Object
-
.fileset_for_directives(directives) ⇒ Hyrax::FileSet
The filepath will look something like /app/samvera/hyrax-webapp/derivatives/95/93/tv/12/3-thumbnail.jpeg and we want to extract the FileSet id, which in this case would be 9593tv123.
Class Method Details
.call(stream, directives, uploader: Hyrax::ValkyrieUpload.new(storage_adapter: Hyrax.config.derivatives_storage_adapter)) ⇒ Object
Persists a derivative using the defined Valkyrie storage adapter
This Service conforms to the signature of ‘Hydra::Derivatives::PersistOutputFileService`. This service is a Valkyrized alternative to the default Hydra::Derivatives::PersistOutputFileService. This service will always update existing and does not do versioning of persisted files.
to replace the default AF derivative pipeline, set
```
Hydra::Derivatives.config.output_file_service = Hyrax::ValkyriePersistDerivatives
Hydra::Derivatives.config.source_file_service = Hyrax::LocalFileService
```
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'app/services/hyrax/valkyrie_persist_derivatives.rb', line 19 def self.call(stream, directives, uploader: Hyrax::ValkyrieUpload.new(storage_adapter: Hyrax.config.derivatives_storage_adapter)) file_set = fileset_for_directives(directives) # Valkyrie storage adapters will typically expect an IO-like object that # responds to #path -- here we only have a StringIO, so some # transformation is in order tmpfile = Tempfile.new(file_set.id, encoding: 'ascii-8bit') tmpfile.write stream.read filename = filename(directives) Hyrax.logger.debug "Uploading thumbnail for FileSet #{file_set.id} as #{filename}" uploader.upload( io: tmpfile, filename: filename, file_set: file_set, use: Hyrax::FileMetadata::Use::THUMBNAIL ) end |
.filename(directives) ⇒ Object
57 58 59 |
# File 'app/services/hyrax/valkyrie_persist_derivatives.rb', line 57 def self.filename(directives) URI(directives.fetch(:url)).path.split('/').last end |
.fileset_for_directives(directives) ⇒ Hyrax::FileSet
The filepath will look something like /app/samvera/hyrax-webapp/derivatives/95/93/tv/12/3-thumbnail.jpeg and we want to extract the FileSet id, which in this case would be 9593tv123
47 48 49 50 51 52 53 54 55 |
# File 'app/services/hyrax/valkyrie_persist_derivatives.rb', line 47 def self.fileset_for_directives(directives) path = URI(directives.fetch(:url)).path id = path.sub(Hyrax.config.derivatives_path.to_s, "") .delete('/') .match(/^(.*)-\w*(\.\w+)*$/) { |m| m[1] } raise "Could not extract fileset id from path #{path}" unless id Hyrax..query_service.find_by(id: id) end |