Skip to content

Commit

Permalink
respond_to
Browse files Browse the repository at this point in the history
  • Loading branch information
blake.mizerany@gmail.com committed Sep 14, 2007
1 parent 0cfd1b7 commit 33fea0f
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
3 changes: 3 additions & 0 deletions vendor/responder/init.rb
@@ -0,0 +1,3 @@
require File.dirname(__FILE__) + '/lib/responder'

Sinatra::EventContext.send(:include, Sinatra::Responder)
42 changes: 42 additions & 0 deletions 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

0 comments on commit 33fea0f

Please sign in to comment.