class Api::Fileupload::Store

Public Class Methods

add(key, file) click to toggle source
# File lib/api/fileupload/store.rb, line 7
def add(key, file)
  copy = copy_file(file)
  id = file_id(copy)

  files(key)[id] = copy
  {id: id}
end
clear(key) click to toggle source
# File lib/api/fileupload/store.rb, line 23
def clear(key)
  files(key).keys.each{|id| remove(key, id)}
end
fetch(key, id) click to toggle source
# File lib/api/fileupload/store.rb, line 15
def fetch(key, id)
  if id.is_a?(Hash)
    files(key)[id[:id]]
  else
    files(key)[id]
  end
end
remove(key, id) click to toggle source
# File lib/api/fileupload/store.rb, line 27
def remove(key, id)
  file = fetch(key, id)
  files(key).delete(id)
  file.tempfile.unlink
end

Private Class Methods

copy_file(file) click to toggle source
# File lib/api/fileupload/store.rb, line 43
def copy_file(file)
  unless file.is_a?(ActionDispatch::Http::UploadedFile)
    throw "file #{file} has to be a ActionDispatch::Http::UploadedFile"
  end

  tmpfile = Tempfile.new(file.original_filename)
  tmpfile.set_encoding(Encoding::BINARY) if tmpfile.respond_to?(:set_encoding)
  tmpfile.binmode
  FileUtils.copy(file.path, tmpfile.path)
  ActionDispatch::Http::UploadedFile.new(
    tempfile: tmpfile,
    filename: file.original_filename,
    type: file.content_type,
    head: file.headers
  )
end
file_id(file) click to toggle source
# File lib/api/fileupload/store.rb, line 39
def file_id(file)
  file.hash.to_s
end
files(key) click to toggle source
# File lib/api/fileupload/store.rb, line 34
def files(key)
  @files ||= {}
  @files[key] ||= {}
end