about summary refs log tree commit homepage
path: root/lib/mogilefs/http_file.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mogilefs/http_file.rb')
-rw-r--r--lib/mogilefs/http_file.rb24
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/mogilefs/http_file.rb b/lib/mogilefs/http_file.rb
index b3a664f..b2d5620 100644
--- a/lib/mogilefs/http_file.rb
+++ b/lib/mogilefs/http_file.rb
@@ -101,20 +101,20 @@ class MogileFS::HTTPFile < StringIO
     if @streaming_io
       file_size = put_streaming_io(sock, uri)
     elsif @big_io
-      if String === @big_io || @big_io.respond_to?(:to_path)
-        file = @big_io.respond_to?(:stat) ? @big_io : File.open(@big_io)
+      stat = file = size = nil
+      if @big_io.respond_to?(:stat)
+        stat = @big_io.stat
+      elsif String === @big_io || @big_io.respond_to?(:to_path)
+        file = File.open(@big_io)
         stat = file.stat
-        file_size = request_put(sock, uri, stat.file? ? stat.size : nil, file)
-      else
-        size = nil
-        if @big_io.respond_to?(:stat)
-          stat = @big_io.stat
-          size = stat.size if stat.file?
-        elsif @big_io.respond_to?(:size)
-          size = @big_io.size
-        end
-        file_size = request_put(sock, uri, size, @big_io)
+      elsif @big_io.respond_to?(:size)
+        size = @big_io.size
       end
+      if stat && stat.file?
+        size ||= stat.size
+        file ||= @big_io.to_io if @big_io.respond_to?(:to_io)
+      end
+      file_size = request_put(sock, uri, size, file || @big_io)
     else
       rewind
       request_put(sock, uri, file_size, self)