From 7a8883eee99a48737a46cd3049f7642946414a41 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Thu, 13 Apr 2006 05:44:23 +0000 Subject: Modify routing so that you can say :require => { :method => :post } for a route, and the route will never be selected unless the request method is POST. Only works for route recognition, not for route generation. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4209 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_controller/routing.rb | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) (limited to 'actionpack') diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 09053fc5d8..2ed9681459 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Modify routing so that you can say :require => { :method => :post } for a route, and the route will never be selected unless the request method is POST. Only works for route recognition, not for route generation. [Jamis Buck] + * Added :add_headers option to verify which merges a hash of name/value pairs into the response's headers hash if the prerequisites cannot be satisfied. [Sam Stephenson] ex. verify :only => :speak, :method => :post, :render => { :status => 405, :text => "Must be post" }, diff --git a/actionpack/lib/action_controller/routing.rb b/actionpack/lib/action_controller/routing.rb index d6e287e0ba..b25f99c37f 100644 --- a/actionpack/lib/action_controller/routing.rb +++ b/actionpack/lib/action_controller/routing.rb @@ -306,6 +306,7 @@ module ActionController initialize_components path defaults, conditions = initialize_hashes options.dup @defaults = defaults.dup + @request_method = conditions.delete(:method) configure_components(defaults, conditions) add_default_requirements initialize_keys @@ -342,8 +343,12 @@ module ActionController else g.constant_result(key, value) end end - - g.go + + if @request_method + g.if("@request.method == :#{@request_method}") { |gp| gp.go } + else + g.go + end generator end @@ -469,17 +474,19 @@ module ActionController end def recognize(request) - string_path = request.path + @request = request + + string_path = @request.path string_path.chomp! if string_path[0] == ?/ path = string_path.split '/' path.shift hash = recognize_path(path) - return recognition_failed(request) unless hash && hash['controller'] + return recognition_failed(@request) unless hash && hash['controller'] controller = hash['controller'] hash['controller'] = controller.controller_path - request.path_parameters = hash + @request.path_parameters = hash controller.new end alias :recognize! :recognize -- cgit v1.2.3