Commit 1fef4c30 by Jon Yurek

Only use Tempfile subclass in 1.8.6 and below. Fixes #278.

parent 05498d27
...@@ -5,7 +5,7 @@ module IOStream ...@@ -5,7 +5,7 @@ module IOStream
# Returns a Tempfile containing the contents of the readable object. # Returns a Tempfile containing the contents of the readable object.
def to_tempfile def to_tempfile
name = respond_to?(:original_filename) ? original_filename : (respond_to?(:path) ? path : "stream") name = respond_to?(:original_filename) ? original_filename : (respond_to?(:path) ? path : "stream")
tempfile = Paperclip::Tempfile.new("stream" + File.extname(name)) tempfile = Paperclip::Tempfile.new(["stream", File.extname(name)])
tempfile.binmode tempfile.binmode
self.stream_to(tempfile) self.stream_to(tempfile)
end end
......
...@@ -40,10 +40,19 @@ module Paperclip ...@@ -40,10 +40,19 @@ module Paperclip
# on this blog post: # on this blog post:
# http://marsorange.com/archives/of-mogrify-ruby-tempfile-dynamic-class-definitions # http://marsorange.com/archives/of-mogrify-ruby-tempfile-dynamic-class-definitions
class Tempfile < ::Tempfile class Tempfile < ::Tempfile
# Replaces Tempfile's +make_tmpname+ with one that honors file extensions. # This is Ruby 1.8.7's implementation.
def make_tmpname(basename, n) if RUBY_VERSION <= "1.8.6"
extension = File.extname(basename) def make_tmpname(basename, n)
sprintf("%s,%d,%d%s", File.basename(basename, extension), $$, n.to_i, extension) case basename
when Array
prefix, suffix = *basename
else
prefix, suffix = basename, ''
end
t = time.now.strftime("%y%m%d")
path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}-#{n}#{suffix}"
end
end end
end end
end end
...@@ -127,7 +127,10 @@ module Paperclip ...@@ -127,7 +127,10 @@ module Paperclip
# style, in the format most representative of the current storage. # style, in the format most representative of the current storage.
def to_file style = default_style def to_file style = default_style
return @queued_for_write[style] if @queued_for_write[style] return @queued_for_write[style] if @queued_for_write[style]
file = Tempfile.new(path(style)) filename = path(style).split(".")
extname = File.extname(filename)
basename = File.basename(filename, extname)
file = Tempfile.new(basename, extname)
file.write(AWS::S3::S3Object.value(path(style), bucket_name)) file.write(AWS::S3::S3Object.value(path(style), bucket_name))
file.rewind file.rewind
return file return file
......
...@@ -45,7 +45,7 @@ module Paperclip ...@@ -45,7 +45,7 @@ module Paperclip
# that contains the new image. # that contains the new image.
def make def make
src = @file src = @file
dst = Tempfile.new([@basename, @format].compact.join(".")) dst = Tempfile.new([@basename, @format ? ".#{@format}" : ''])
dst.binmode dst.binmode
begin begin
......
...@@ -4,10 +4,11 @@ class ThumbnailTest < Test::Unit::TestCase ...@@ -4,10 +4,11 @@ class ThumbnailTest < Test::Unit::TestCase
context "A Paperclip Tempfile" do context "A Paperclip Tempfile" do
setup do setup do
@tempfile = Paperclip::Tempfile.new("file.jpg") @tempfile = Paperclip::Tempfile.new(["file", ".jpg"])
end end
should "have its path contain a real extension" do should "have its path contain a real extension" do
p @tempfile.path
assert_equal ".jpg", File.extname(@tempfile.path) assert_equal ".jpg", File.extname(@tempfile.path)
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment