From f839a0fe96ad9c80cb60dfe4eb2ee4a27d0cadda Mon Sep 17 00:00:00 2001 From: Blake Mizerany Date: Tue, 15 Jan 2008 14:30:41 -0800 Subject: [PATCH] agent testing! --- lib/sinatra.rb | 3 ++- lib/sinatra/test/methods.rb | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/sinatra.rb b/lib/sinatra.rb index 00f5f8e..f17ff70 100644 --- a/lib/sinatra.rb +++ b/lib/sinatra.rb @@ -1,4 +1,5 @@ require 'rubygems' +require 'metaid' if ENV['SWIFT'] require 'swiftcore/swiftiplied_mongrel' @@ -89,10 +90,10 @@ module Sinatra end def invoke(env) - return unless pattern =~ env['PATH_INFO'].squeeze('/') if options[:agent] return unless env['HTTP_USER_AGENT'] =~ options[:agent] end + return unless pattern =~ env['PATH_INFO'].squeeze('/') params = param_keys.zip($~.captures.map(&:from_param)).to_hash Result.new(block, params, 200) end diff --git a/lib/sinatra/test/methods.rb b/lib/sinatra/test/methods.rb index 159cad1..11fea42 100644 --- a/lib/sinatra/test/methods.rb +++ b/lib/sinatra/test/methods.rb @@ -1,3 +1,13 @@ +class Rack::MockRequest + class << self + alias :env_for_without_env :env_for + def env_for(uri = "", opts = {}) + env = { 'HTTP_USER_AGENT' => opts.delete(:agent) } + env_for_without_env(uri, opts).merge(env) + end + end +end + module Sinatra module Test @@ -5,23 +15,27 @@ module Sinatra module Methods def get_it(path, params = {}) + agent = params.delete(:agent) @request = Rack::MockRequest.new(Sinatra.application) - @response = @request.get(path, :input => params.to_params) + @response = @request.get(path, :input => params.to_params, :agent => agent) end def post_it(path, params = {}) + agent = params.delete(:agent) @request = Rack::MockRequest.new(Sinatra.application) - @response = @request.post(path, :input => params.to_params) + @response = @request.post(path, :input => params.to_params, :agent => agent) end def put_it(path, params = {}) + agent = params.delete(:agent) @request = Rack::MockRequest.new(Sinatra.application) - @response = @request.put(path, :input => params.to_params) + @response = @request.put(path, :input => params.to_params, :agent => agent) end def delete_it(path, params = {}) + agent = params.delete(:agent) @request = Rack::MockRequest.new(Sinatra.application) - @response = @request.delete(path, :input => params.to_params) + @response = @request.delete(path, :input => params.to_params, :agent => agent) end def follow! -- 2.11.4.GIT