Temporary shim to support Merb's require statement for Webrat

This commit is contained in:
Bryan Helmkamp 2009-01-18 16:20:58 -05:00
parent fdb94f399c
commit 00d0d7b438
4 changed files with 86 additions and 64 deletions

View File

@ -71,7 +71,15 @@ module Webrat
# :rails, :selenium, :rack, :sinatra, :mechanize, :merb # :rails, :selenium, :rack, :sinatra, :mechanize, :merb
def mode=(mode) def mode=(mode)
@mode = mode @mode = mode
require("webrat/#{mode}")
# This is a temporary hack to support backwards compatibility
# with Merb 1.0.8 until it's updated to use the new Webrat.configure
# syntax
if @mode.to_s == "merb"
require("webrat/merb_session")
else
require("webrat/#{mode}")
end
end end
end end

View File

@ -1,65 +1,9 @@
require "webrat" require "webrat"
require "cgi" # This is a temporary hack to support backwards compatibility
gem "extlib" # with Merb 1.0.8 until it's updated to use the new Webrat.configure
require "extlib" # syntax
require "merb-core"
HashWithIndifferentAccess = Mash Webrat.configure do |config|
config.mode = :merb
module Webrat
class MerbSession < Session #:nodoc:
include Merb::Test::MakeRequest
attr_accessor :response
def get(url, data, headers = nil)
do_request(url, data, headers, "GET")
end
def post(url, data, headers = nil)
do_request(url, data, headers, "POST")
end
def put(url, data, headers = nil)
do_request(url, data, headers, "PUT")
end
def delete(url, data, headers = nil)
do_request(url, data, headers, "DELETE")
end
def response_body
@response.body.to_s
end
def response_code
@response.status
end
def do_request(url, data, headers, method)
@response = request(url,
:params => (data && data.any?) ? data : nil,
:headers => headers,
:method => method)
end
end
end
module Merb #:nodoc:
module Test #:nodoc:
module RequestHelper #:nodoc:
def request(uri, env = {})
@_webrat_session ||= Webrat::MerbSession.new
@_webrat_session.response = @_webrat_session.request(uri, env)
end
end
end
end
class Merb::Test::RspecStory #:nodoc:
def browser
@browser ||= Webrat::MerbSession.new
end
end end

View File

@ -0,0 +1,65 @@
require "webrat"
require "cgi"
gem "extlib"
require "extlib"
require "merb-core"
HashWithIndifferentAccess = Mash
module Webrat
class MerbSession < Session #:nodoc:
include Merb::Test::MakeRequest
attr_accessor :response
def get(url, data, headers = nil)
do_request(url, data, headers, "GET")
end
def post(url, data, headers = nil)
do_request(url, data, headers, "POST")
end
def put(url, data, headers = nil)
do_request(url, data, headers, "PUT")
end
def delete(url, data, headers = nil)
do_request(url, data, headers, "DELETE")
end
def response_body
@response.body.to_s
end
def response_code
@response.status
end
def do_request(url, data, headers, method)
@response = request(url,
:params => (data && data.any?) ? data : nil,
:headers => headers,
:method => method)
end
end
end
module Merb #:nodoc:
module Test #:nodoc:
module RequestHelper #:nodoc:
def request(uri, env = {})
@_webrat_session ||= Webrat::MerbSession.new
@_webrat_session.response = @_webrat_session.request(uri, env)
end
end
end
end
class Merb::Test::RspecStory #:nodoc:
def browser
@browser ||= Webrat::MerbSession.new
end
end

View File

@ -52,7 +52,6 @@ describe Webrat::Configuration do
:selenium, :selenium,
:rack, :rack,
:sinatra, :sinatra,
:merb,
:mechanize].each do |mode| :mechanize].each do |mode|
it "should require correct lib when in #{mode} mode" do it "should require correct lib when in #{mode} mode" do
config = Webrat::Configuration.new config = Webrat::Configuration.new
@ -61,6 +60,12 @@ describe Webrat::Configuration do
end end
end end
it "should require merb_session when in merb mode" do
config = Webrat::Configuration.new
config.should_receive(:require).with("webrat/merb_session")
config.mode = :merb
end
describe "Selenium" do describe "Selenium" do
before :each do before :each do
@config = Webrat::Configuration.new @config = Webrat::Configuration.new