diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-01-13 17:27:00 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-01-13 17:27:00 -0800 |
commit | 3f821a4cb7b50e542dd7828d1e507b76e18ecfb5 (patch) | |
tree | b86584668b1d5a30e1f560756b0387dcab2e0a29 /lib | |
parent | d4c2bb35f17e00c528f0cea722b4695af9076a09 (diff) | |
download | metropolis-3f821a4cb7b50e542dd7828d1e507b76e18ecfb5.tar.gz |
add suffix_mime output filter
It's faster than doing it via real Rack middleware.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/metropolis.rb | 1 | ||||
-rw-r--r-- | lib/metropolis/common.rb | 3 | ||||
-rw-r--r-- | lib/metropolis/suffix_mime.rb | 18 |
3 files changed, 22 insertions, 0 deletions
diff --git a/lib/metropolis.rb b/lib/metropolis.rb index 51758b5..284cd30 100644 --- a/lib/metropolis.rb +++ b/lib/metropolis.rb @@ -14,6 +14,7 @@ module Metropolis autoload :Hash, 'metropolis/hash' autoload :TDB, 'metropolis/tdb' autoload :MultiHash, 'metropolis/multi_hash' + autoload :SuffixMime, 'metropolis/suffix_mime' def self.new(opts = {}) opts = opts.dup diff --git a/lib/metropolis/common.rb b/lib/metropolis/common.rb index d9cadba..a6688f3 100644 --- a/lib/metropolis/common.rb +++ b/lib/metropolis/common.rb @@ -33,6 +33,9 @@ module Metropolis::Common else raise ArgumentError, "unsupported encoding" end + if filters = opts[:use] + Array(filters).each { |filter| extend filter } + end end def r(code, body = nil) diff --git a/lib/metropolis/suffix_mime.rb b/lib/metropolis/suffix_mime.rb new file mode 100644 index 0000000..76a3f96 --- /dev/null +++ b/lib/metropolis/suffix_mime.rb @@ -0,0 +1,18 @@ +module Metropolis::SuffixMime + MIME_TYPES = Rack::Mime::MIME_TYPES + + def get(key, env) + set_mime(key, super) + end + + def head(key, env) + set_mime(key, super) + end + + def set_mime(key, response) + status, headers, _ = response + 200 == status && /(\.[^\.]+)\z/ =~ key and + type = MIME_TYPES[$1] and headers["Content-Type"] = type + response + end +end |