You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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