Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Rack middleware port of Rails's respond_to feature
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

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.