From 65ce3d12971afd15de6ea22a2fc5af3ba1faf124 Mon Sep 17 00:00:00 2001
From: Andrew White <andyw@pixeltrix.co.uk>
Date: Sat, 19 Jun 2010 20:52:55 +0100
Subject: Accept an object for :constraints option [#4904 state:resolved]
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: José Valim <jose.valim@gmail.com>
---
 actionpack/lib/action_dispatch/routing/mapper.rb | 2 +-
 actionpack/test/dispatch/routing_test.rb         | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

(limited to 'actionpack')

diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index 0018b6485b..5d6147c48a 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -102,7 +102,7 @@ module ActionDispatch
           end
 
           def requirements
-            @requirements ||= (@options[:constraints] || {}).tap do |requirements|
+            @requirements ||= (@options[:constraints].is_a?(Hash) ? @options[:constraints] : {}).tap do |requirements|
               requirements.reverse_merge!(@scope[:constraints]) if @scope[:constraints]
               @options.each { |k, v| requirements[k] = v if v.is_a?(Regexp) }
             end
diff --git a/actionpack/test/dispatch/routing_test.rb b/actionpack/test/dispatch/routing_test.rb
index 899990c69d..c4cdc4b2a8 100644
--- a/actionpack/test/dispatch/routing_test.rb
+++ b/actionpack/test/dispatch/routing_test.rb
@@ -68,6 +68,8 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
         get 'admin/accounts' => "queenbee#accounts"
       end
 
+      get 'admin/passwords' => "queenbee#passwords", :constraints => ::TestRoutingMapper::IpRestrictor
+
       scope 'pt', :name_prefix => 'pt' do
         resources :projects, :path_names => { :edit => 'editar', :new => 'novo' }, :path => 'projetos' do
           post :preview, :on => :new
@@ -501,6 +503,12 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
 
       get '/admin/accounts', {}, {'REMOTE_ADDR' => '10.0.0.100'}
       assert_equal 'pass', @response.headers['X-Cascade']
+
+      get '/admin/passwords', {}, {'REMOTE_ADDR' => '192.168.1.100'}
+      assert_equal 'queenbee#passwords', @response.body
+
+      get '/admin/passwords', {}, {'REMOTE_ADDR' => '10.0.0.100'}
+      assert_equal 'pass', @response.headers['X-Cascade']
     end
   end
 
-- 
cgit v1.2.3