Parent

Methods

Rack::AcceptFormat

A Rack middleware for automatically adding a format token at the end of the request path when there is none. It can detect formats passed in the HTTP_ACCEPT header to populate this token.

e.g.:

GET /some/resource HTTP/1.1
Accept: application/json

->

GET /some/resource.json HTTP/1.1
Accept: application/json

You can add custom types with this kind of function (taken from sinatra):

def mime(ext, type)
  ext = ".#{ext}" unless ext.to_s[0] == ?.
  Rack::Mime::MIME_TYPES[ext.to_s] = type
end

and then:

mime :json, 'application/json'

Note: it does not take into account multiple media types in the Accept header. The first media type takes precedence over all the others.

MIT-License - Cyril Rohr

Public Class Methods

new(app, default_extention = '.html') click to toggle source
# File lib/rack/contrib/accept_format.rb, line 28
def initialize(app, default_extention = '.html')
  @ext = default_extention.to_s.strip
  @ext = ".#{@ext}" unless @ext[0] == ..
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/contrib/accept_format.rb, line 34
def call(env)
  req = Rack::Request.new(env)

  if ::File.extname(req.path_info).empty?
    accept = env['HTTP_ACCEPT'].to_s.scan(/[^;,\s]*\/[^;,\s]*/)[0].to_s
    extension =  Rack::Mime::MIME_TYPES.invert[accept] || @ext
    req.path_info = req.path_info+"#{extension}"
  end

  @app.call(env)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.