Class: Valkyrie::Storage::Fedora

Inherits:
Object
  • Object
show all
Defined in:
lib/valkyrie/storage/fedora.rb

Constant Summary collapse

PROTOCOL =
'fedora://'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection:) ⇒ Fedora


6
7
8
# File 'lib/valkyrie/storage/fedora.rb', line 6

def initialize(connection:)
  @connection = connection
end

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection


4
5
6
# File 'lib/valkyrie/storage/fedora.rb', line 4

def connection
  @connection
end

Instance Method Details

#delete(id:) ⇒ Object

Delete the file in Fedora associated with the given identifier.


45
46
47
# File 'lib/valkyrie/storage/fedora.rb', line 45

def delete(id:)
  ActiveFedora::File.new(active_fedora_identifier(id: id)).ldp_source.delete
end

#find_by(id:) ⇒ Valkyrie::StorageAdapter::StreamFile

Return the file associated with the given identifier

Raises:

  • Valkyrie::StorageAdapter::FileNotFound if nothing is found


20
21
22
23
24
# File 'lib/valkyrie/storage/fedora.rb', line 20

def find_by(id:)
  Valkyrie::StorageAdapter::StreamFile.new(id: id, io: response(id: id))
rescue ::Ldp::Gone
  raise Valkyrie::StorageAdapter::FileNotFound
end

#handles?(id:) ⇒ Boolean


12
13
14
# File 'lib/valkyrie/storage/fedora.rb', line 12

def handles?(id:)
  id.to_s.start_with?(PROTOCOL)
end

#upload(file:, original_filename:, resource:) ⇒ Valkyrie::StorageAdapter::StreamFile


30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/valkyrie/storage/fedora.rb', line 30

def upload(file:, original_filename:, resource:)
  # TODO: this is a very naive aproach. Change to PCDM
  identifier = resource.id.to_uri + '/original'
  ActiveFedora::File.new(identifier) do |af|
    af.content = file
    af.original_name = original_filename
    af.save!
    af..set_value(:type, af..type + [::RDF::URI('http://pcdm.org/use#OriginalFile')])
    af..save
  end
  find_by(id: Valkyrie::ID.new(identifier.to_s.sub(/^.+\/\//, PROTOCOL)))
end