about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-01-14 13:59:15 -0800
committerEric Wong <normalperson@yhbt.net>2011-01-14 14:08:47 -0800
commite4f738709482d95e49552f7ddfda800e1b4a6baf (patch)
tree5fabcfbbf639b854a1ac03d03894261af08bf3e9 /lib
parent63521b4c70a1aff89049abf2ba224114e97f62ac (diff)
downloadclogger-e4f738709482d95e49552f7ddfda800e1b4a6baf.tar.gz
We can just make Clogger#respond_to? smarter and forward
everything except :close to the body we're proxying.
Diffstat (limited to 'lib')
-rw-r--r--lib/clogger.rb9
-rw-r--r--lib/clogger/pure.rb27
2 files changed, 13 insertions, 23 deletions
diff --git a/lib/clogger.rb b/lib/clogger.rb
index d0f6fb4..a64ca09 100644
--- a/lib/clogger.rb
+++ b/lib/clogger.rb
@@ -40,15 +40,6 @@ class Clogger
     :request_uri => 7
   }
 
-  # proxy class to avoid clobbering the +to_path+ optimization when
-  # using static files
-  class ToPath < Struct.new(:clogger)
-    def each(&block); clogger.each(&block); end
-    def close; clogger.close; end
-
-    # to_path is defined in Clogger::Pure or the C extension
-  end
-
 private
 
   CGI_ENV = Regexp.new('\A\$(' <<
diff --git a/lib/clogger/pure.rb b/lib/clogger/pure.rb
index 4146cce..6613686 100644
--- a/lib/clogger/pure.rb
+++ b/lib/clogger/pure.rb
@@ -43,7 +43,6 @@ class Clogger
       wbody.status = status
       wbody.headers = headers
       wbody.body = body
-      wbody = Clogger::ToPath.new(wbody) if body.respond_to?(:to_path)
       return [ status, headers, wbody ]
     end
     log(env, status, headers)
@@ -77,6 +76,19 @@ class Clogger
     @logger.respond_to?(:fileno) ? @logger.fileno : nil
   end
 
+  def respond_to?(m)
+    :close == m.to_sym || @body.respond_to?(m)
+  end
+
+  def to_path
+    rv = @body.to_path
+    # try to avoid unnecessary path lookups with to_io.stat instead of
+    # File.size
+    @body_bytes_sent =
+           @body.respond_to?(:to_io) ? @body.to_io.stat.size : File.size(rv)
+    rv
+  end
+
 private
 
   def byte_xs(s)
@@ -151,17 +163,4 @@ private
       end
     }.join('')
   end
-
-  class ToPath
-    def to_path
-      rv = (body = clogger.body).to_path
-
-      # try to avoid unnecessary path lookups with to_io.stat instead of
-      # File.stat
-      clogger.body_bytes_sent =
-        (body.respond_to?(:to_io) ? body.to_io.stat : File.stat(rv)).size
-      rv
-    end
-  end
-
 end