diff options
author | Eric Wong <normalperson@yhbt.net> | 2010-07-04 22:16:52 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-07-04 22:34:09 +0000 |
commit | 39b178cdebe275cbc8ce19cf269bea7cd15ff4ca (patch) | |
tree | b7628ed278895fcf70ea3206956be586ac9e1ac5 /lib/rainbows/sendfile.rb | |
parent | 75f5aa9a0d6b37a94afbea3121fc2c16e70a2b1d (diff) | |
download | rainbows-39b178cdebe275cbc8ce19cf269bea7cd15ff4ca.tar.gz |
This hopefully allows the "sendfile" gem to be required anywhere in the Rainbows!/Unicorn config file, and not have to be required via RUBYOPT or the '-r' command-line switch. We also modularize HttpResponse and avoids singleton methods in the response path. This (hopefully) makes it easier for individual concurrency models to share code and override individual methods.
Diffstat (limited to 'lib/rainbows/sendfile.rb')
-rw-r--r-- | lib/rainbows/sendfile.rb | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/lib/rainbows/sendfile.rb b/lib/rainbows/sendfile.rb index 146c4c5..3f82047 100644 --- a/lib/rainbows/sendfile.rb +++ b/lib/rainbows/sendfile.rb @@ -57,34 +57,23 @@ class Sendfile < Struct.new(:app) # Body wrapper, this allows us to fall back gracefully to # +each+ in case a given concurrency model does not optimize # +to_path+ calls. - class Body < Struct.new(:to_io) - - def initialize(path, headers) - # Rainbows! will try #to_io if #to_path exists to avoid unnecessary - # open() calls. - self.to_io = File.open(path, 'rb') + class Body < Struct.new(:to_path) + def self.new(path, headers) unless headers['Content-Length'] - stat = to_io.stat + stat = File.stat(path) headers['Content-Length'] = stat.size.to_s if stat.file? end - end - - def to_path - to_io.path + super(path) end # fallback in case our +to_path+ doesn't get handled for whatever reason def each(&block) - buf = '' - while to_io.read(0x4000, buf) - yield buf + File.open(to_path, 'rb') do |fp| + buf = '' + yield buf while fp.read(0x4000, buf) end end - - def close - to_io.close - end end def call(env) |