about summary refs log tree commit homepage
path: root/lib/mogilefs/mogilefs.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mogilefs/mogilefs.rb')
-rw-r--r--lib/mogilefs/mogilefs.rb16
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index 2b02fb7..625e26f 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -52,12 +52,22 @@ class MogileFS::MogileFS < MogileFS::Client
   end
 
   ##
-  # Retrieves the contents of +key+.
+  # Retrieves the contents of +key+.  If +dest+ is specified, +dest+
+  # should be an IO-like object capable of receiving the +write+ method
+  # or a path name.
 
-  def get_file_data(key)
+  def get_file_data(key, dest = nil)
     paths = get_paths(key)
     sock = MogileFS::HTTPReader.first(paths, "GET", @get_file_data_timeout)
-    block_given? ? yield(sock) : sock.to_s
+    if dest
+      MogileFS::X.copy_stream(sock, dest)
+    elsif block_given?
+      yield(sock)
+    else
+      sock.to_s
+    end
+    ensure
+      sock.close unless sock.closed?
   end
 
   ##