Class: Valkyrie::Storage::Disk

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

Overview

Implements the DataMapper Pattern to store binary data on disk

Defined Under Namespace

Classes: BucketedStorage, LazyFile

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_path:, path_generator: BucketedStorage, file_mover: FileUtils.method(:mv)) ⇒ Disk



6
7
8
9
10
# File 'lib/valkyrie/storage/disk.rb', line 6

def initialize(base_path:, path_generator: BucketedStorage, file_mover: FileUtils.method(:mv))
  @base_path = Pathname.new(base_path.to_s)
  @path_generator = path_generator.new(base_path: base_path)
  @file_mover = file_mover
end

Instance Attribute Details

#base_pathObject (readonly)

Returns the value of attribute base_path.



5
6
7
# File 'lib/valkyrie/storage/disk.rb', line 5

def base_path
  @base_path
end

#file_moverObject (readonly)

Returns the value of attribute file_mover.



5
6
7
# File 'lib/valkyrie/storage/disk.rb', line 5

def file_mover
  @file_mover
end

#path_generatorObject (readonly)

Returns the value of attribute path_generator.



5
6
7
# File 'lib/valkyrie/storage/disk.rb', line 5

def path_generator
  @path_generator
end

Instance Method Details

#delete(id:) ⇒ Object

Delete the file on disk associated with the given identifier.



75
76
77
78
# File 'lib/valkyrie/storage/disk.rb', line 75

def delete(id:)
  path = file_path(id)
  FileUtils.rm_rf(path) if File.exist?(path)
end

#file_path(id) ⇒ Object



36
37
38
# File 'lib/valkyrie/storage/disk.rb', line 36

def file_path(id)
  id.to_s.gsub(/^disk:\/\//, '')
end

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

Return the file associated with the given identifier

Raises:

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



44
45
46
47
48
# File 'lib/valkyrie/storage/disk.rb', line 44

def find_by(id:)
  Valkyrie::StorageAdapter::File.new(id: Valkyrie::ID.new(id.to_s), io: LazyFile.open(file_path(id), 'rb'))
rescue Errno::ENOENT
  raise Valkyrie::StorageAdapter::FileNotFound
end

#handles?(id:) ⇒ Boolean



26
27
28
# File 'lib/valkyrie/storage/disk.rb', line 26

def handles?(id:)
  id.to_s.start_with?("disk://#{base_path}")
end

#supports?(_feature) ⇒ Boolean



32
33
34
# File 'lib/valkyrie/storage/disk.rb', line 32

def supports?(_feature)
  false
end

#upload(file:, original_filename:, resource: nil, **_extra_arguments) ⇒ Valkyrie::StorageAdapter::File



17
18
19
20
21
22
# File 'lib/valkyrie/storage/disk.rb', line 17

def upload(file:, original_filename:, resource: nil, **_extra_arguments)
  new_path = path_generator.generate(resource: resource, file: file, original_filename: original_filename)
  FileUtils.mkdir_p(new_path.parent)
  file_mover.call(file.path, new_path)
  find_by(id: Valkyrie::ID.new("disk://#{new_path}"))
end