public
Description: Rack middleware port of Rails's respond_to feature
Homepage:
Clone URL: git://github.com/mynyml/rack-respond_to.git
name age message
file .gitignore Fri May 22 09:50:41 -0700 2009 Add documentation. [mynyml]
file LICENSE Thu May 21 18:42:15 -0700 2009 Initial commit [mynyml]
file README Tue Jun 09 12:52:56 -0700 2009 Update docs [mynyml]
file Rakefile Tue Jun 09 12:54:11 -0700 2009 v0.9.7 [mynyml]
file TODO Tue Jun 09 12:52:56 -0700 2009 Update docs [mynyml]
directory examples/ Tue Jun 09 08:20:37 -0700 2009 Update example files. [mynyml]
directory lib/ Tue Jun 09 12:52:56 -0700 2009 Update docs [mynyml]
file rack-respond_to.gemspec Tue Jun 09 12:54:11 -0700 2009 v0.9.7 [mynyml]
directory test/ Tue Jun 09 12:33:50 -0700 2009 Hanled wildcard media types. e.g. */*, text/* [mynyml]
README
===== Summary

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

RespondTo gets the requested media type from the Accept header, which contains
a list of media types accepted/requested by the client, ordered by level of
preference (see http://github.com/mynyml/rack-accept-media-types).

===== 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)

===== Installation

  sudo gem install mynyml-rack-respond_to --source=http://gems.github.com/

===== Example

  require 'rubygems'
  require 'rack'
  require 'rack/respond_to'

  class App
    include Rack::RespondTo

    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 <tt>example.com/foo.xml</tt> to trigger
the <tt>format.xml</tt> block (Rack::AbstractFormat moves the extension's media
type into HTTP_ACCEPT and makes it the highest ranked).

  sudo gem install mynyml-rack-abstract-format --source=http://gems.github.com/

See examples/recommended_use.ru for a complete example.

===== Links

source:: http://github.com/mynyml/rack-respond_to
rdocs::  http://docs.github.com/mynyml/rack-respond_to