# File lib/capybara/rack_test/browser.rb, line 7 def initialize(driver) @driver = driver end
# File lib/capybara/rack_test/browser.rb, line 11 def app driver.app end
# File lib/capybara/rack_test/browser.rb, line 79 def body dom.to_xml end
# File lib/capybara/rack_test/browser.rb, line 65 def current_url last_request.url rescue Rack::Test::Error "" end
# File lib/capybara/rack_test/browser.rb, line 83 def dom @dom ||= Nokogiri::HTML(source) end
# File lib/capybara/rack_test/browser.rb, line 87 def find(selector) dom.xpath(selector).map { |node| Capybara::RackTest::Node.new(self, node) } end
# File lib/capybara/rack_test/browser.rb, line 31 def follow(method, path, attributes = {}) return if path.gsub(%r^#{request_path}/, '').start_with?('#') process(method, path, attributes) follow_redirects! end
# File lib/capybara/rack_test/browser.rb, line 37 def follow_redirects! 5.times do process(:get, last_response["Location"]) if last_response.redirect? end raise Capybara::InfiniteRedirectError, "redirected more than 5 times, check for infinite redirects." if last_response.redirect? end
# File lib/capybara/rack_test/browser.rb, line 15 def options driver.options end
# File lib/capybara/rack_test/browser.rb, line 44 def process(method, path, attributes = {}) new_uri = URI.parse(path) current_uri = URI.parse(current_url) if new_uri.host @current_host = new_uri.scheme + '://' + new_uri.host end if new_uri.relative? if path.start_with?('?') path = request_path + path elsif not path.start_with?('/') path = request_path.sub(%r(/[^/]*$), '/') + path end path = current_host + path end reset_cache! send(method, path, attributes, env) end
# File lib/capybara/rack_test/browser.rb, line 75 def reset_cache! @dom = nil end
# File lib/capybara/rack_test/browser.rb, line 71 def reset_host! @current_host = (Capybara.app_host || Capybara.default_host) end
# File lib/capybara/rack_test/browser.rb, line 91 def source last_response.body rescue Rack::Test::Error nil end
# File lib/capybara/rack_test/browser.rb, line 25 def submit(method, path, attributes) path = request_path if not path or path.empty? process(method, path, attributes) follow_redirects! end
# File lib/capybara/rack_test/browser.rb, line 19 def visit(path, attributes = {}) reset_host! process(:get, path, attributes) follow_redirects! end
# File lib/capybara/rack_test/browser.rb, line 99 def build_rack_mock_session reset_host! unless current_host Rack::MockSession.new(app, URI.parse(current_host).host) end
# File lib/capybara/rack_test/browser.rb, line 110 def env env = {} begin env["HTTP_REFERER"] = last_request.url rescue Rack::Test::Error # no request yet end env.merge!(options[:headers]) if options[:headers] env end
# File lib/capybara/rack_test/browser.rb, line 104 def request_path last_request.path rescue Rack::Test::Error "" end