Class: Valkyrie::Storage::Fedora
- Inherits:
-
Object
- Object
- Valkyrie::Storage::Fedora
- Defined in:
- lib/valkyrie/storage/fedora.rb
Overview
Implements the DataMapper Pattern to store binary data in fedora
Constant Summary collapse
- PROTOCOL =
'fedora://'
Instance Attribute Summary collapse
-
#base_path ⇒ Object
readonly
Returns the value of attribute base_path.
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
Instance Method Summary collapse
-
#delete(id:) ⇒ Object
Delete the file in Fedora associated with the given identifier.
-
#find_by(id:) ⇒ Valkyrie::StorageAdapter::StreamFile
Return the file associated with the given identifier.
-
#handles?(id:) ⇒ Boolean
True if this adapter can handle this type of identifer.
-
#initialize(connection:, base_path: "/") ⇒ Fedora
constructor
A new instance of Fedora.
- #upload(file:, original_filename:, resource:) ⇒ Valkyrie::StorageAdapter::StreamFile
Constructor Details
#initialize(connection:, base_path: "/") ⇒ Fedora
Returns a new instance of Fedora.
9 10 11 12 |
# File 'lib/valkyrie/storage/fedora.rb', line 9 def initialize(connection:, base_path: "/") @connection = connection @base_path = base_path end |
Instance Attribute Details
#base_path ⇒ Object (readonly)
Returns the value of attribute base_path.
5 6 7 |
# File 'lib/valkyrie/storage/fedora.rb', line 5 def base_path @base_path end |
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
5 6 7 |
# File 'lib/valkyrie/storage/fedora.rb', line 5 def connection @connection end |
Instance Method Details
#delete(id:) ⇒ Object
Delete the file in Fedora associated with the given identifier.
46 47 48 |
# File 'lib/valkyrie/storage/fedora.rb', line 46 def delete(id:) connection.http.delete(fedora_identifier(id: id)) end |
#find_by(id:) ⇒ Valkyrie::StorageAdapter::StreamFile
Return the file associated with the given identifier
24 25 26 |
# File 'lib/valkyrie/storage/fedora.rb', line 24 def find_by(id:) Valkyrie::StorageAdapter::StreamFile.new(id: id, io: response(id: id)) end |
#handles?(id:) ⇒ Boolean
Returns true if this adapter can handle this type of identifer.
16 17 18 |
# File 'lib/valkyrie/storage/fedora.rb', line 16 def handles?(id:) id.to_s.start_with?(PROTOCOL) end |
#upload(file:, original_filename:, resource:) ⇒ Valkyrie::StorageAdapter::StreamFile
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/valkyrie/storage/fedora.rb', line 32 def upload(file:, original_filename:, resource:) identifier = id_to_uri(resource.id) + '/original' connection.http.put do |request| request.url identifier request.headers['Content-Type'] = file.content_type request.headers['Content-Disposition'] = "attachment; filename=\"#{original_filename}\"" request.headers['digest'] = "sha1=#{Digest::SHA1.file(file)}" request.body = file.tempfile.read end find_by(id: Valkyrie::ID.new(identifier.to_s.sub(/^.+\/\//, PROTOCOL))) end |