middleman/vendor/rack-test/lib/rack/test/methods.rb
2009-08-12 13:04:58 -07:00

74 lines
1.5 KiB
Ruby

require "forwardable"
module Rack
module Test
module Methods
extend Forwardable
def rack_mock_session(name = :default)
return build_rack_mock_session unless name
@_rack_mock_sessions ||= {}
@_rack_mock_sessions[name] ||= build_rack_mock_session
end
def build_rack_mock_session
Rack::MockSession.new(app)
end
def rack_test_session(name = :default)
return build_rack_test_session(name) unless name
@_rack_test_sessions ||= {}
@_rack_test_sessions[name] ||= build_rack_test_session(name)
end
def build_rack_test_session(name)
Rack::Test::Session.new(rack_mock_session(name))
end
def current_session
rack_test_session(_current_session_names.last)
end
def with_session(name)
_current_session_names.push(name)
yield rack_test_session(name)
_current_session_names.pop
end
def _current_session_names
@_current_session_names ||= [:default]
end
METHODS = [
:request,
# HTTP verbs
:get,
:post,
:put,
:delete,
:head,
# Redirects
:follow_redirect!,
# Header-related features
:header,
:set_cookie,
:clear_cookies,
:authorize,
:basic_authorize,
:digest_authorize,
# Expose the last request and response
:last_response,
:last_request
]
def_delegators :current_session, *METHODS
end
end
end