From: Blake Mizerany Date: Tue, 15 Jan 2008 22:30:41 +0000 (-0800) Subject: agent testing! X-Git-Url: https://repo.or.cz/w/sinatra.git/commitdiff_plain/f839a0fe96ad9c80cb60dfe4eb2ee4a27d0cadda agent testing! --- 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!