¶ ↑
DescriptionContent negotiation for Rack applications, including a Rails-style respond_to block.
¶ ↑
Features-
Allows both file-extension-based and Accept: header-based content negotiation
-
Allows certain routes to pass through without negotiation (useful for static files, etc.)
-
Falls back to a pre-set type if negotiation fails
-
Injects a respond_to method with default handler into the application’s namespace
-
Injects negotiated_type, negotiated_ext, and negotiated? methods both into the application and into Rack::Request
¶ ↑
Sinatra Examplerequire 'sinatra' require 'rack/conneg' use(Rack::Conneg) { |conneg| conneg.set :accept_all_extensions, false conneg.set :fallback, :html conneg.ignore('/stylesheets/') conneg.ignore_contents_of(File.join(File.dirname(__FILE__),'public')) conneg.provide([:json, :xml]) } before do if negotiated? content_type negotiated_type end end get '/hello' do response = { :message => 'Hello, World!' } respond_to do |wants| wants.json { response.to_json } wants.xml { response.to_xml } wants.other { content_type 'text/plain' error 406, "Not Acceptable" } end end
¶ ↑
Release History-
0.1.2 - Initial release
-
0.1.3 - Added proper RegExp escaping to match content types with + in them
-
0.1.4 - Added ignore_contents_of() to recursively ignore directory contents and negotiated? method to determine if negotiation took place
-
0.1.5 - Allow negotiation to fall back if no Accept: header supplied
-
0.1.6 - Add license