about summary refs log tree commit
path: root/lib/metropolis
diff options
context:
space:
mode:
Diffstat (limited to 'lib/metropolis')
-rw-r--r--lib/metropolis/common.rb3
-rw-r--r--lib/metropolis/suffix_mime.rb18
2 files changed, 21 insertions, 0 deletions
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