about summary refs log tree commit homepage
path: root/lib/mogilefs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mogilefs')
-rw-r--r--lib/mogilefs/mogilefs.rb13
-rw-r--r--lib/mogilefs/put.rb29
-rw-r--r--lib/mogilefs/put/content_range.rb (renamed from lib/mogilefs/http_range_put.rb)2
-rw-r--r--lib/mogilefs/put/stream.rb (renamed from lib/mogilefs/http_stream.rb)2
-rw-r--r--lib/mogilefs/put/tempfile.rb (renamed from lib/mogilefs/http_tempfile.rb)2
5 files changed, 33 insertions, 15 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index 50484d8..c93d1a3 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -161,18 +161,7 @@ class MogileFS::MogileFS < MogileFS::Client
 
     case (dests[0][1] rescue nil)
     when %r{\Ahttp://}
-      http_file = case opts[:largefile]
-                  when :chunked,:stream
-                    MogileFS::HTTPStream
-                  when :tempfile
-                    require 'mogilefs/http_tempfile'
-                    MogileFS::HTTPTempfile
-                  when :content_range
-                    require 'mogilefs/http_range_put'
-                    MogileFS::HTTPRangePut
-                  when nil, false
-                    MogileFS::HTTPFile
-                  end.new(dests, opts)
+      http_file = MogileFS::Put[opts[:largefile]].new(dests, opts)
       if block_given?
         yield http_file
         return http_file.commit # calls create_close
diff --git a/lib/mogilefs/put.rb b/lib/mogilefs/put.rb
new file mode 100644
index 0000000..3f13df2
--- /dev/null
+++ b/lib/mogilefs/put.rb
@@ -0,0 +1,29 @@
+# -*- encoding: binary -*-
+module MogileFS::Put
+
+  def self.[](largefile)
+    case largefile
+    when nil, false
+      MogileFS::HTTPFile
+    when :stream
+      Stream
+    when :content_range
+      ContentRange
+    when :tempfile
+      Tempfile
+    else
+      raise ArgumentError, "largefile: #{largefile.inspect} not understood"
+    end
+  end
+
+  def self.const_missing(name)
+    case name
+    when :Stream, :ContentRange, :Tempfile
+      file = name.to_s.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
+      require "mogilefs/put/#{file}"
+      const_get(name)
+    else
+      super(name)
+    end
+  end
+end
diff --git a/lib/mogilefs/http_range_put.rb b/lib/mogilefs/put/content_range.rb
index e191c23..e44a8e2 100644
--- a/lib/mogilefs/http_range_put.rb
+++ b/lib/mogilefs/put/content_range.rb
@@ -11,7 +11,7 @@ require 'mogilefs/new_file_common'
 require 'mogilefs/new_file_writer'
 
 # an IO-like object
-class MogileFS::HTTPRangePut
+class MogileFS::Put::ContentRange
   include MogileFS::NewFileWriter
   include MogileFS::NewFileCommon
 
diff --git a/lib/mogilefs/http_stream.rb b/lib/mogilefs/put/stream.rb
index 3f84b9b..590a24f 100644
--- a/lib/mogilefs/http_stream.rb
+++ b/lib/mogilefs/put/stream.rb
@@ -4,7 +4,7 @@
 require 'mogilefs/new_file_common'
 require 'mogilefs/new_file_writer'
 
-class MogileFS::HTTPStream
+class MogileFS::Put::Stream
   attr_reader :to_io
   attr_reader :md5
 
diff --git a/lib/mogilefs/http_tempfile.rb b/lib/mogilefs/put/tempfile.rb
index 5019522..8082f95 100644
--- a/lib/mogilefs/http_tempfile.rb
+++ b/lib/mogilefs/put/tempfile.rb
@@ -3,7 +3,7 @@
 require 'tempfile'
 require 'mogilefs/http_file'
 
-class MogileFS::HTTPTempfile < Tempfile
+class MogileFS::Put::Tempfile < Tempfile
   def initialize(*args)
     @mogilefs_httpfile_args = args
     super("mogilefs-client")