diff options
Diffstat (limited to 'lib/mogilefs/http_file.rb')
-rw-r--r-- | lib/mogilefs/http_file.rb | 24 |
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) |