diff options
-rw-r--r-- | lib/mogilefs/copy_stream.rb | 18 | ||||
-rw-r--r-- | lib/mogilefs/mogilefs.rb | 4 |
2 files changed, 14 insertions, 8 deletions
diff --git a/lib/mogilefs/copy_stream.rb b/lib/mogilefs/copy_stream.rb index 922eb71..01735cd 100644 --- a/lib/mogilefs/copy_stream.rb +++ b/lib/mogilefs/copy_stream.rb @@ -6,12 +6,18 @@ module MogileFS::CopyStream # :nodoc: src_io = String === src ? File.open(src) : src buf = "" written = 0 - begin - src_io.readpartial(0x4000, buf) - written += dst.write(buf) - rescue EOFError - break - end while true + if src_io.respond_to?(:readpartial) + begin + src_io.readpartial(0x4000, buf) + written += dst.write(buf) + rescue EOFError + break + end while true + else + while src_io.read(0x4000, buf) + written += dst.write(buf) + end + end written ensure src_io.close if String === src diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index e62e19b..8663f51 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -129,8 +129,8 @@ class MogileFS::MogileFS < MogileFS::Client ## # Copies the contents of +file+ into +key+ in class +klass+. +file+ can be - # either a path name (String or Pathname object) or an object that - # responds to #readpartial. Returns size of +file+ stored + # either a path name (String or Pathname object) or an IO-like object that + # responds to #read or #readpartial. Returns size of +file+ stored. def store_file(key, klass, file) raise MogileFS::ReadOnlyError if readonly? |