# frozen_string_literal: true require 'capybara/poltergeist' require 'proxy_rb' require 'proxy_rb/resource' require 'proxy_rb/http_downloader' require 'proxy_rb/http_proxy' require 'proxy_rb/request' require 'proxy_rb/response' # Main Module module ProxyRb # Main Module module Rspec # Helpers module Helpers # Non includable internal helper methods # # Not for use by normal users module NonIncludes class << self def clear_environment %w( http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ).each { |v| ENV.delete v } end def register_capybara_driver_for_proxy(proxy) options = { phantomjs_options: proxy.to_phantom_js, js_errors: false, phantomjs_logger: $stderr } ::Capybara.register_driver proxy.to_sym do |app| ::Capybara::Poltergeist::Driver.new(app, options) end ::Capybara.run_server = false ::Capybara.current_driver = proxy.to_sym end end end # For http proxy module HttpProxy include ::Capybara::DSL # The proxy based on subject def proxy ProxyRb::HttpProxy.new(ProxyUrlParser.new(subject)) end # Visit an URL # # @param [String] url def visit(url) resource = Resource.new(url) NonIncludes.clear_environment NonIncludes.register_capybara_driver_for_proxy(proxy) begin super(resource.to_url) rescue ::Capybara::Poltergeist::TimeoutError raise ProxyRb::UrlTimeoutError, "Failed to fetch #{resource.to_url}: Timeout occured." end end # !@method download # # @see #visit alias download visit # Get access to the request made def request Request.new(page) end # Get access to the response get def response Response.new(page) end end end end end