about summary refs log tree commit
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-11-30 15:04:57 -0800
committerEric Wong <normalperson@yhbt.net>2010-11-30 15:04:57 -0800
commit000726f5302f18ff095c68dfedf1547d0946209c (patch)
tree2798c9b097bffe8a85ead6da2c391363b7b80d6a
parent61120b1268679bb8ffa157736e91e6846fd2a372 (diff)
downloadmetropolis-000726f5302f18ff095c68dfedf1547d0946209c.tar.gz
internal API: get and head methods require env
We'll need it for implementing the deflater/inflater
-rw-r--r--lib/metropolis/common.rb8
-rw-r--r--lib/metropolis/common/ro.rb4
-rw-r--r--lib/metropolis/hash.rb2
-rw-r--r--lib/metropolis/tc/hdb.rb4
-rw-r--r--test/test_tc_hdb.rb22
5 files changed, 20 insertions, 20 deletions
diff --git a/lib/metropolis/common.rb b/lib/metropolis/common.rb
index 2a3b841..273a1b3 100644
--- a/lib/metropolis/common.rb
+++ b/lib/metropolis/common.rb
@@ -27,9 +27,9 @@ module Metropolis::Common
       key = unescape($1)
       case env["REQUEST_METHOD"]
       when "GET"
-        get(key)
+        get(key, env)
       when "HEAD"
-        head(key)
+        head(key, env)
       when "DELETE"
         delete(key)
       when "PUT"
@@ -44,8 +44,8 @@ module Metropolis::Common
 
   # generic HEAD implementation, some databases can optimize this by
   # not retrieving the value
-  def head(key)
-    r = get(key)
+  def head(key, env)
+    r = get(key, env)
     r[2].clear
     r
   end
diff --git a/lib/metropolis/common/ro.rb b/lib/metropolis/common/ro.rb
index 10b5439..390e2c6 100644
--- a/lib/metropolis/common/ro.rb
+++ b/lib/metropolis/common/ro.rb
@@ -5,9 +5,9 @@ module Metropolis::Common::RO
       key = unescape($1)
       case env["REQUEST_METHOD"]
       when "GET"
-        get(key)
+        get(key, env)
       when "HEAD"
-        head(key)
+        head(key, env)
       else
         r(403)
       end
diff --git a/lib/metropolis/hash.rb b/lib/metropolis/hash.rb
index 698aef0..61b7199 100644
--- a/lib/metropolis/hash.rb
+++ b/lib/metropolis/hash.rb
@@ -35,7 +35,7 @@ module Metropolis::Hash
     @db = @path = nil
   end
 
-  def get(key)
+  def get(key, env)
     value = @db[key] or return r(404)
     [ 200, { 'Content-Length' => value.size.to_s }.merge!(@headers), [ value ] ]
   end
diff --git a/lib/metropolis/tc/hdb.rb b/lib/metropolis/tc/hdb.rb
index ce6d13a..09d6439 100644
--- a/lib/metropolis/tc/hdb.rb
+++ b/lib/metropolis/tc/hdb.rb
@@ -124,13 +124,13 @@ module Metropolis::TC::HDB
     r(200)
   end
 
-  def head(key)
+  def head(key, env)
     size = reader(key) { |hdb| hdb.vsiz(key) or ex!(:vsiz, hdb) }
     0 > size and return r(404, "")
     [ 200, { 'Content-Length' => size.to_s }.merge!(@headers), [] ]
   end
 
-  def get(key)
+  def get(key, env)
     value = nil
     reader(key) do |hdb|
       unless value = hdb.get(key)
diff --git a/test/test_tc_hdb.rb b/test/test_tc_hdb.rb
index e2229e8..f9ccabd 100644
--- a/test/test_tc_hdb.rb
+++ b/test/test_tc_hdb.rb
@@ -42,19 +42,19 @@ class Test_TC_HDB < Test::Unit::TestCase
     assert_equal '8', r[1]['Content-Length']
     assert_equal "Created\n", r[2].join('')
 
-    r = o.get('hello')
+    r = o.get('hello', {})
     assert_equal 200, r[0].to_i
     assert_equal 'application/octet-stream', r[1]['Content-Type']
     assert_equal '5', r[1]['Content-Length']
     assert_equal %w(world), r[2]
 
-    r = o.head('hello')
+    r = o.head('hello', {})
     assert_equal 200, r[0].to_i
     assert_equal 'application/octet-stream', r[1]['Content-Type']
     assert_equal '5', r[1]['Content-Length']
     assert_equal [], r[2]
 
-    r = o.get('hellox')
+    r = o.get('hellox', {})
     assert_equal 200, r[0].to_i
     assert_equal 'application/octet-stream', r[1]['Content-Type']
     assert_equal '6', r[1]['Content-Length']
@@ -72,13 +72,13 @@ class Test_TC_HDB < Test::Unit::TestCase
     assert_equal '10', r[1]['Content-Length']
     assert_equal "Not Found\n", r[2].join('')
 
-    r = o.get('hellox')
+    r = o.get('hellox', {})
     assert_equal 404, r[0].to_i
     assert_equal 'text/plain', r[1]['Content-Type']
     assert_equal '10', r[1]['Content-Length']
     assert_equal "Not Found\n", r[2].join('')
 
-    r = o.head('hellox')
+    r = o.head('hellox', {})
     assert_equal 404, r[0].to_i
     assert_equal 'text/plain', r[1]['Content-Type']
     assert_equal '0', r[1]['Content-Length']
@@ -94,7 +94,7 @@ class Test_TC_HDB < Test::Unit::TestCase
     assert_equal 201, o.put("x", env)[0]
     env["rack.input"] = StringIO.new("wrong")
     assert_equal 409, o.put("x", env)[0]
-    assert_equal "hello", o.get("x")[2].join('')
+    assert_equal "hello", o.get("x", {})[2].join('')
   end
 
   def test_putcat
@@ -106,7 +106,7 @@ class Test_TC_HDB < Test::Unit::TestCase
     assert_equal 201, o.put("x", env)[0]
     env["rack.input"] = StringIO.new("MOAR")
     assert_equal 201, o.put("x", env)[0]
-    assert_equal "helloMOAR", o.get("x")[2].join('')
+    assert_equal "helloMOAR", o.get("x", {})[2].join('')
   end
 
   def test_multiproc
@@ -121,7 +121,7 @@ class Test_TC_HDB < Test::Unit::TestCase
         100.times {
           o.put(key, env)
           sio.rewind
-          o.get(key)
+          o.get(key, {})
         }
       }
     }
@@ -180,15 +180,15 @@ class Test_TC_HDB < Test::Unit::TestCase
     assert_equal 65536, optimize_args[0]
     assert_nil optimize_args[2]
     assert_equal 3, optimize_args[1]
-    assert_nothing_raised { obj.get(k) }
+    assert_nothing_raised { obj.get(k, {}) }
     assert_nothing_raised { obj.put(k,{'rack.input' => StringIO.new(data)}) }
 
     obj = Metropolis.new(:uri => "#{uri}?#{query}", :readonly => true)
-    assert_equal data, obj.get(k)[2].join('')
+    assert_equal data, obj.get(k, {})[2].join('')
     obj.close!
 
     obj = Metropolis.new(:uri => uri, :readonly => true)
-    assert_equal data, obj.get(k)[2].join('')
+    assert_equal data, obj.get(k, {})[2].join('')
     obj.close!
     sum = obj.instance_eval {
       @dbv.inject(0) { |size, (hdb,path)| size += File.stat(path).size }