class Capybara::Queries::BaseQuery

Constants

COUNT_KEYS

Attributes

options[R]
session_options[W]

Public Class Methods

new(options) click to toggle source
# File lib/capybara/queries/base_query.rb, line 11
def initialize(options)
  @session_options = options.delete(:session_options)
end
wait(options, default = Capybara.default_max_wait_time) click to toggle source
# File lib/capybara/queries/base_query.rb, line 23
def self.wait(options, default = Capybara.default_max_wait_time)
  # if no value or nil for the :wait option is passed it should default to the default
  wait = options.fetch(:wait, nil)
  wait = default if wait.nil?
  wait || 0
end

Public Instance Methods

expects_none?() click to toggle source

Checks if a count of 0 is valid for the query Returns false if query does not have any count options specified.

# File lib/capybara/queries/base_query.rb, line 35
def expects_none?
  count_specified? ? matches_count?(0) : false
end
failure_message() click to toggle source

Generates a failure message from the query description and count options.

# File lib/capybara/queries/base_query.rb, line 60
def failure_message
  +"expected to find #{description}" << count_message
end
matches_count?(count) click to toggle source

Checks if the given count matches the query count options. Defaults to true if no count options are specified. If multiple count options exist, it tests that all conditions are met; however, if :count is specified, all other options are ignored.

@param [Integer] count The actual number. Should be coercible via Integer()

# File lib/capybara/queries/base_query.rb, line 48
def matches_count?(count)
  return (Integer(options[:count]) == count) if options[:count]
  return false if options[:maximum] && (Integer(options[:maximum]) < count)
  return false if options[:minimum] && (Integer(options[:minimum]) > count)
  return false if options[:between] && !options[:between].include?(count)
  true
end
negative_failure_message() click to toggle source
# File lib/capybara/queries/base_query.rb, line 64
def negative_failure_message
  +"expected not to find #{description}" << count_message
end
session_options() click to toggle source
# File lib/capybara/queries/base_query.rb, line 15
def session_options
  @session_options || Capybara.session_options
end
wait() click to toggle source
# File lib/capybara/queries/base_query.rb, line 19
def wait
  self.class.wait(options, session_options.default_max_wait_time)
end

Private Instance Methods

assert_valid_keys() click to toggle source
# File lib/capybara/queries/base_query.rb, line 89
def assert_valid_keys
  invalid_keys = @options.keys - valid_keys
  return if invalid_keys.empty?

  invalid_names = invalid_keys.map(&:inspect).join(', ')
  valid_names = valid_keys.map(&:inspect).join(', ')
  raise ArgumentError, "invalid keys #{invalid_names}, should be one of #{valid_names}"
end
count_message() click to toggle source
# File lib/capybara/queries/base_query.rb, line 74
def count_message
  message = +''
  count, between, maximum, minimum = options.values_at(:count, :between, :maximum, :minimum)
  if count
    message << " #{count} #{Capybara::Helpers.declension('time', 'times', count)}"
  elsif between
    message << " between #{between.first} and #{between.last} times"
  elsif maximum
    message << " at most #{maximum} #{Capybara::Helpers.declension('time', 'times', maximum)}"
  elsif minimum
    message << " at least #{minimum} #{Capybara::Helpers.declension('time', 'times', minimum)}"
  end
  message
end
count_specified?() click to toggle source
# File lib/capybara/queries/base_query.rb, line 70
def count_specified?
  COUNT_KEYS.any? { |key| options.key? key }
end