class Shrine::Storage::Tus

Attributes

tus_storage[R]

Public Class Methods

new(tus_storage: nil, **options) click to toggle source
Calls superclass method
# File lib/shrine/storage/tus.rb, line 10
def initialize(tus_storage: nil, **options)
  @tus_storage = tus_storage

  super(delete: true, **options)
end

Public Instance Methods

open(id, **options) click to toggle source
Calls superclass method
# File lib/shrine/storage/tus.rb, line 16
def open(id, **options)
  return super unless tus_storage

  open_from_tus_storage(tus_uid(id), **options)
rescue ::Tus::NotFound
  raise Shrine::FileNotFound, "file #{id.inspect} not found on storage"
end

Private Instance Methods

get_tus_file(uid) click to toggle source
# File lib/shrine/storage/tus.rb, line 38
def get_tus_file(uid)
  tus_storage.get_file(uid)
end
get_tus_info(uid) click to toggle source
# File lib/shrine/storage/tus.rb, line 42
def get_tus_info(uid)
  tus_storage.read_info(uid)
end
open_from_tus_storage(uid, rewindable: true, **) click to toggle source
# File lib/shrine/storage/tus.rb, line 26
def open_from_tus_storage(uid, rewindable: true, **)
  info     = get_tus_info(uid)
  response = get_tus_file(uid)

  Down::ChunkedIO.new(
    size:       Integer(info["Upload-Length"]),
    chunks:     response.each,
    on_close:   response.method(:close),
    rewindable: rewindable,
  )
end
request(verb, url, **options) click to toggle source

Add “Tus-Resumable” header to HEAD and DELETE requests.

Calls superclass method
# File lib/shrine/storage/tus.rb, line 51
def request(verb, url, **options)
  super(verb, url, headers: { "Tus-Resumable" => "1.0.0" }, **options)
end
tus_uid(url) click to toggle source
# File lib/shrine/storage/tus.rb, line 46
def tus_uid(url)
  url.split("/").last
end