Rack middleware port of Rails's respond_to feature
Ruby
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib/rack
test
.gitignore Added temporary unix files and vim swap files to the git ignore list. Mar 26, 2010
LICENSE
Manifest Add catch-all format example app Mar 26, 2010
README.md Update README Mar 26, 2010
Rakefile
TODO Update docs Jun 9, 2009
docs.watchr
rack-respond_to.gemspec
specs.watchr Added specs.watchr script Jan 29, 2010

README.md

Summary

Rack convenience middleware that allows triggering different actions based on requested media type. Standalone version of the equivalent Rails functionality.

Features

  • Based on familiar API (Rails)
  • Cascades down priority list of accepted media types
  • Handles wildcard media types
  • Simple to use
  • Simple code (~50 LOCs)
  • Flexible (standalone use)
  • Decently documented (examples/ dir, source docs/rdocs)
  • Compatible with other media type handling middleware (uses Rack::AcceptMediaTypes)

Install

gem install rack-respond_to

Example

require 'rack'
require 'rack/respond_to'

class App
  include Rack::RespondTo #mixes in #respond_to

  def call(env)
    # Pass in the env, and RespondTo will retrieve the requested media types
    Rack::RespondTo.env = env

    # Alternatively, to use standalone you can also assign the media types
    # directly (this will take precedence over the env)
    #Rack::RespondTo.media_types = ['text/html']

    body = respond_to do |format|
      format.html { '<em>html</em>' }
      format.xml  { '<body>xml</body>' }
    end

    [200, {'Content-Type' => Rack::RespondTo.selected_media_type}, [body]]
  end
end

run App.new

See examples/simple_app.ru for an executable example.

Tips

Use together with Rack::AbstractFormat to respond to routes based on url extensions. For example, if you want example.com/foo.xml to trigger the format.xml block (Rack::AbstractFormat moves the extension's media type into HTTP_ACCEPT and makes it the highest ranked).

gem install rack-abstract-format

See examples/recommended_use.ru for a complete example.

Acknowledgement

  • thanks to daicoden for format.any idea and initial patch

Links