lib/spontaneous/field/file.rb in spontaneous-0.2.0.beta4 vs lib/spontaneous/field/file.rb in spontaneous-0.2.0.beta5
- old
+ new
@@ -4,27 +4,32 @@
module Spontaneous::Field
class File < Base
has_editor
+ # In the case of clearing the field we will have been given a pending_value of ""
+ # we don't want that to run asynchronously
def asynchronous?
+ return false if (pending_value && pending_value[:value].blank?)
true
end
def outputs
[:html, :path, :filesize, :filename]
end
- def pending_value=(value)
- file = process_upload(value)
+ def set_pending_value(value, site)
+ file = process_upload(value, site)
pending = case file
+ when nil
+ ""
when String
{ :tempfile => file }
else
serialize_pending_file(file)
end
- super(pending)
+ super(pending, site)
end
def page_lock_description
"Processing file '#{pending_value[:value][:filename]}'"
end
@@ -33,34 +38,35 @@
{ :tempfile => file.path, :type => file.mimetype, :filename => file.filename, :filesize => file.filesize, :src => file.url }
end
def storage_headers(content_type, filename)
headers = { content_type: content_type }
- if prototype.options[:attachment]
+ if prototype && prototype.options[:attachment]
headers.update(content_disposition: %(attachment; filename=#{Rack::Utils.escape(filename)}))
end
headers
end
- def preprocess(image)
+ def process_upload(value, site)
+ return nil if value.blank?
+ file, filename, mimetype = fileinfo(value)
+ media_file = site.tempfile(self, filename, storage_headers(mimetype, filename))
+ media_file.copy(file)
+ media_file
+ end
+
+ def preprocess(image, site)
file, filename, mimetype = fileinfo(image)
return "" if file.nil?
return file unless ::File.exist?(file)
- media_file = Spontaneous::Media::File.new(owner, filename, storage_headers(mimetype, filename))
+ media_file = site.file(owner, filename, storage_headers(mimetype, filename))
media_file.copy(file)
set_unprocessed_value(media_file.path)
media_file
end
- def process_upload(value)
- file, filename, mimetype = fileinfo(value)
- media_file = Spontaneous::Media::TempFile.new(self, filename, storage_headers(mimetype, filename))
- media_file.copy(file)
- media_file
- end
-
def fileinfo(fileinfo)
file = filename = mimetype = nil
case fileinfo
when Hash
file, filename, mimetype = fileinfo.values_at(:tempfile, :filename, :type)
@@ -69,32 +75,32 @@
file = fileinfo
end
[file, filename, mimetype]
end
- def generate_filesize(input)
+ def generate_filesize(input, site)
if input.respond_to?(:filesize)
input.filesize
else
::File.exist?(input) ? ::File.size(input) : 0
end
end
- def generate_filename(input)
+ def generate_filename(input, site)
if input.respond_to?(:filename)
input.filename
else
::File.basename(input.to_s)
end
end
- def generate_path(input)
+ def generate_path(input, site)
return input if input.is_a?(::String)
input.url
end
- def generate_html(input)
- generate_path(input)
+ def generate_html(input, site)
+ generate_path(input, site)
end
def export(user = nil)
super(user).merge({
:processed_value => processed_values