teamcapybara--capybara/lib/capybara/config.rb

111 lines
3.1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require 'forwardable'
require 'capybara/session/config'
module Capybara
class Config
extend Forwardable
OPTIONS = [:app, :reuse_server, :threadsafe, :default_wait_time, :server, :default_driver, :javascript_driver]
attr_accessor :app
attr_reader :reuse_server, :threadsafe
attr_reader :session_options
attr_writer :default_driver, :javascript_driver
SessionConfig::OPTIONS.each do |method|
def_delegators :session_options, method, "#{method}="
end
def initialize
@session_options = Capybara::SessionConfig.new
end
def reuse_server=(bool)
@reuse_server = bool
end
def threadsafe=(bool)
warn "Capybara.threadsafe == true is a BETA feature and may change in future minor versions" if bool
raise "Threadsafe setting cannot be changed once a session is created" if (bool != threadsafe) && Session.instance_created?
@threadsafe = bool
end
##
#
# Return the proc that Capybara will call to run the Rack application.
# The block returned receives a rack app, port, and host/ip and should run a Rack handler
# By default, Capybara will try to run webrick.
#
def server(&block)
@server
end
##
#
# Set the server to use.
#
# Capybara.server = :webrick
# Capybara.server = :puma, { Silent: true }
#
# @overload server=(name)
# @param [Symbol] name Name of the server type to use
# @overload server=([name, options])
# @param [Symbol] name Name of the server type to use
# @param [Hash] options Options to pass to the server block
# @see register_server
#
def server=(name)
name, options = *name if name.is_a? Array
@server = if options
Proc.new { |app, port, host| Capybara.servers[name.to_sym].call(app,port,host,options) }
else
Capybara.servers[name.to_sym]
end
end
##
#
# @return [Symbol] The name of the driver to use by default
#
def default_driver
@default_driver || :rack_test
end
##
#
# @return [Symbol] The name of the driver used when JavaScript is needed
#
def javascript_driver
@javascript_driver || :selenium
end
def deprecate(method, alternate_method, once=false)
@deprecation_notified ||= {}
warn "DEPRECATED: ##{method} is deprecated, please use ##{alternate_method} instead" unless once and @deprecation_notified[method]
@deprecation_notified[method]=true
end
end
# @api private
class ConfigureDeprecator
def initialize(config)
@config = config
end
def method_missing(m, *args, &block)
if @config.respond_to?(m)
@config.public_send(m, *args, &block)
elsif Capybara.respond_to?(m)
warn "Calling #{m} from Capybara.configure is deprecated - please call it on Capybara directly ( Capybara.#{m}(...) )"
Capybara.public_send(m, *args, &block)
else
super
end
end
def respond_to_missing?(m, include_private = false)
@config.respond_to?(m) || Capybara.respond_to?(m) || super
end
end
end