From 14ea5349b0a0e828d85623d790ca03790198aa45 Mon Sep 17 00:00:00 2001 From: anupom syam Date: Wed, 15 Jul 2009 00:11:41 +0700 Subject: [PATCH] method any in route condition --- .../lib/action_controller/routing/builder.rb | 1 + actionpack/test/controller/routing_test.rb | 43 ++++++++++++++++++++ 2 files changed, 44 insertions(+), 0 deletions(-) diff --git a/actionpack/lib/action_controller/routing/builder.rb b/actionpack/lib/action_controller/routing/builder.rb index 42ad12e..45201c2 100644 --- a/actionpack/lib/action_controller/routing/builder.rb +++ b/actionpack/lib/action_controller/routing/builder.rb @@ -66,6 +66,7 @@ module ActionController requirements = (options.delete(:requirements) || {}).dup defaults = (options.delete(:defaults) || {}).dup conditions = (options.delete(:conditions) || {}).dup + conditions.delete(:method) if [conditions[:method]].flatten.include?(:any) validate_route_conditions(conditions) diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb index fb83dba..6d18875 100644 --- a/actionpack/test/controller/routing_test.rb +++ b/actionpack/test/controller/routing_test.rb @@ -1896,6 +1896,14 @@ class RouteSetTest < Test::Unit::TestCase end end + def test_route_requirements_with_any_method_condition_is_valid + assert_nothing_raised do + set.draw do |map| + map.connect 'valid/route', :controller => 'pages', :action => 'show', :conditions => {:method => :any} + end + end + end + def test_route_requirements_with_head_method_condition_is_invalid assert_raise ArgumentError do set.draw do |map| @@ -2081,6 +2089,41 @@ class RouteSetTest < Test::Unit::TestCase assert_equal("show", request.path_parameters[:action]) assert_equal("5", request.path_parameters[:id]) assert_equal("png", request.path_parameters[:_format]) + + ensure + Object.send(:remove_const, :PeopleController) + end + + def test_recognize_with_conditions_with_method_any + Object.const_set(:PeopleController, Class.new) + + set.draw do |map| + map.with_options(:controller => "people") do |people| + people.people "/people", :action => "index", :conditions => { :method => :any } + end + end + + request.request_uri = "/people" + request.env["REQUEST_METHOD"] = "GET" + assert_nothing_raised { set.recognize(request) } + assert_equal("index", request.path_parameters[:action]) + request.recycle! + + request.env["REQUEST_METHOD"] = "POST" + assert_nothing_raised { set.recognize(request) } + assert_equal("index", request.path_parameters[:action]) + request.recycle! + + request.env["REQUEST_METHOD"] = "PUT" + assert_nothing_raised { set.recognize(request) } + assert_equal("index", request.path_parameters[:action]) + request.recycle! + + request.env["REQUEST_METHOD"] = "DELETE" + assert_nothing_raised { set.recognize(request) } + assert_equal("index", request.path_parameters[:action]) + request.recycle! + ensure Object.send(:remove_const, :PeopleController) end -- 1.5.6.3