Rack middleware that abstracts format (extension) away from the path (into env)
Latest commit 79164a7 Apr 9, 2010 3 @mynyml Don't strip unrecognized extensions
Thanks to jamesarosen for pointing this out
Failed to load latest commit information.
examples Update example app Jan 6, 2010
lib/rack Don't strip unrecognized extensions Apr 9, 2010
test Don't strip unrecognized extensions Apr 9, 2010
.gitignore v0.9.9 Jan 7, 2010
LICENSE Initial commit. May 21, 2009
Manifest Update README Jan 7, 2010
Rakefile Accept a default format Jan 7, 2010
rack-abstract-format.gemspec v0.9.9 Jan 7, 2010
specs.watchr Add specs.watchr script Jan 7, 2010



Strips the extension from the requested path (env['PATH_INFO']), casts it to media type, and prepends it to env['HTTP_ACCEPT']. This allows dealing with path information separately from format information, which are often different concerns.

This is especially useful when dealing with routes as it allows a resource to always point to the same action independently of the requested format.


gem install rack-abstract-format


require 'rack'
require 'rack/abstract_format'

use Rack::AbstractFormat
run app

The request:

GET /path/resource.xml
Accept: text/html

will become:

GET /path/resource
env['HTTP_ACCEPT'] #=> 'application/xml,text/html'

AbstractFormat also accepts an optional argument, used to set the default format that should be assumed when none is specified on the URL:

use Rack::AbstractFormat, 'text/html'
#=> GET /path/resource      # requested
#=> GET /path/resource.html # assumed


The abstracted media type can then be easily retrieved with the Rack::AcceptMediaTypes convenience middleware, which parses env['HTTP_ACCEPT'].

request.accept_media_types          #=> ['application/xml', 'text/html']
request.accept_media_types.prefered #=>  'application/xml'

See Also