From 67906d391dae0336f6bcfff3550d67934986e59b Mon Sep 17 00:00:00 2001 From: Blake Mizerany Date: Thu, 8 Jan 2009 18:35:00 -0800 Subject: [PATCH] A route can be redfined This may need some clean-up --- lib/sinatra/base.rb | 2 ++ test/base_test.rb | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 4a2da6db..5cea68cd 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -554,6 +554,8 @@ module Sinatra pattern, keys = compile(path) conditions, @conditions = @conditions, [] method_name = "route { #{method} #{path} }" + nmethods = instance_methods.grep(rx = /#{Regexp.escape(method_name)}/).size + method_name += " [#{nmethods}]" define_method(method_name, &block) diff --git a/test/base_test.rb b/test/base_test.rb index 89b195fa..18bd410a 100644 --- a/test/base_test.rb +++ b/test/base_test.rb @@ -46,4 +46,27 @@ describe 'Sinatra::Base' do response.should.be.ok response.body.should.equal 'Goodbye World' end + + it 'can take multiple definitions of a route' do + app = mock_app { + user_agent /Foo/ + get '/foo' do + 'foo' + end + + get '/foo' do + 'not foo' + end + } + + request = Rack::MockRequest.new(app) + response = request.get('/foo', 'HTTP_USER_AGENT' => 'Foo') + response.should.be.ok + response.body.should.equal 'foo' + + request = Rack::MockRequest.new(app) + response = request.get('/foo') + response.should.be.ok + response.body.should.equal 'not foo' + end end