Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Rack middleware that abstracts format (extension) away from the path (into env)
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
examples
lib/rack
test Don't strip unrecognized extensions
.gitignore
LICENSE
Manifest
README.md Update README
Rakefile
rack-abstract-format.gemspec
specs.watchr

README.md

Summary

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.

Install

gem install rack-abstract-format

Usage

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

Tip

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

Links

Something went wrong with that request. Please try again.