Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Rack middleware port of Rails's respond_to feature

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 examples
Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 LICENSE
Octocat-spinner-32 Manifest
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile Simplify gem handling and Rakefile January 29, 2010
Octocat-spinner-32 TODO
Octocat-spinner-32 docs.watchr
Octocat-spinner-32 rack-respond_to.gemspec
Octocat-spinner-32 specs.watchr
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

Something went wrong with that request. Please try again.