Rack is a common API between webservers and frameworks for Ruby. It allows all kinds of nice stuff, like chaining filters that each do one small and self-contained part of the processing and are easy to reuse.
Here's a trivial one I wrote to automatically set Content-Type based on the extension of a file:
# Rewrite content types based on file extensions class RewriteContentType def initialize app, opts @app = app @map = opts end def call env res = @app.call(env) ext = env["PATH_INFO"].split(".")[-1] res[1]["Content-Type"] = @map[ext] if @map.has_key?(ext) res end end
All it does is split off anything after the last "." and add a matching Content-Type to the headers if it exists in the map that's passed in. In my Rack config file, I do this:
use RewriteContentType, {"js" => "text/javascript"}