From 33fea0f5ac5f727ef9cbe7b4e7621c55a18ab600 Mon Sep 17 00:00:00 2001 From: "blake.mizerany@gmail.com" Date: Fri, 14 Sep 2007 04:07:56 +0000 Subject: [PATCH] respond_to --- vendor/responder/init.rb | 3 +++ vendor/responder/lib/responder.rb | 42 +++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 vendor/responder/init.rb create mode 100644 vendor/responder/lib/responder.rb diff --git a/vendor/responder/init.rb b/vendor/responder/init.rb new file mode 100644 index 0000000000..db0b93becd --- /dev/null +++ b/vendor/responder/init.rb @@ -0,0 +1,3 @@ +require File.dirname(__FILE__) + '/lib/responder' + +Sinatra::EventContext.send(:include, Sinatra::Responder) diff --git a/vendor/responder/lib/responder.rb b/vendor/responder/lib/responder.rb new file mode 100644 index 0000000000..0eef8278ad --- /dev/null +++ b/vendor/responder/lib/responder.rb @@ -0,0 +1,42 @@ +# taken from Cheat + +# get '/foo/(\w+)' +# ... important code ... +# +# respond_to do |wants| +# wants.html { render :something } +# wants.text { "Just some text." } +# wants.yaml { "Something neat!".to_yaml } +# wants.xml { "Also, XML.".to_xml } +# end +# end + +module Sinatra + module Responder + def respond_to + yield response = Response.new(request.env["HTTP_ACCEPT"]) + headers 'Content-Type' => response.content_type + body response.body + end + + class Response + attr_reader :body, :content_type + def initialize(accept) @accept = accept end + + TYPES = { + :yaml => %w[application/yaml text/yaml], + :text => %w[text/plain], + :html => %w[text/html */* application/html], + :xml => %w[application/xml], + :json => %w[application/json] + } + + def method_missing(method, *args) + if TYPES[method] && @accept =~ Regexp.union(*TYPES[method]) + @content_type = TYPES[method].first + @body = yield if block_given? + end + end + end + end +end