From b2ede64a89a5837a047e75f21a1522324a614514 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Thu, 28 Sep 2006 19:13:55 +0000 Subject: Add ActionController::Base#head for rendering empty responses. Add support for symbolic status codes, as well as for having raw integer statuses expand with their default messages. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5199 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/base.rb | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'actionpack/lib/action_controller/base.rb') diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index e9d415085a..bd2256f44d 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -4,6 +4,7 @@ require 'action_controller/response' require 'action_controller/routing' require 'action_controller/resources' require 'action_controller/url_rewriter' +require 'action_controller/status_codes' require 'drb' require 'set' @@ -209,6 +210,7 @@ module ActionController #:nodoc: DEFAULT_RENDER_STATUS_CODE = "200 OK" include Reloadable::Deprecated + include StatusCodes # Determines whether the view has access to controller internals @request, @response, @session, and @template. # By default, it does. @@ -793,7 +795,7 @@ module ActionController #:nodoc: def render_text(text = nil, status = nil) #:nodoc: @performed_render = true - response.headers['Status'] = (status || DEFAULT_RENDER_STATUS_CODE).to_s + response.headers['Status'] = interpret_status(status || DEFAULT_RENDER_STATUS_CODE) response.body = text end @@ -830,6 +832,29 @@ module ActionController #:nodoc: end + # Return a response that has no content (merely headers). The options + # argument is interpreted to be a hash of header names and values. + # This allows you to easily return a response that consists only of + # significant headers: + # + # head :status => :created, :location => person_path(@person) + # + # It can also be used to return exceptional conditions: + # + # return head(:status => :method_not_allowed) unless request.post? + # return head(:status => :bad_request) unless valid_request? + # render + def head(options = {}) + status = interpret_status(options.delete(:status) || :ok) + + options.each do |key, value| + headers[key.to_s.dasherize.split(/-/).map { |v| v.capitalize }.join("-")] = value.to_s + end + + render :nothing => true, :status => status + end + + # Clears the rendered results, allowing for another render to be performed. def erase_render_results #:nodoc: response.body = nil -- cgit v1.2.3