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