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 12
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 24
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 36
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 62
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 49
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 66
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 16
def session_options
  @session_options || Capybara.session_options
end
wait() click to toggle source
# File lib/capybara/queries/base_query.rb, line 20
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 96
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 option(s) #{invalid_names}, should be one of #{valid_names}"
end
count_message() click to toggle source
# File lib/capybara/queries/base_query.rb, line 76
def count_message
  message = +''
  count, between, maximum, minimum = options.values_at(:count, :between, :maximum, :minimum)
  if count
    message << " #{occurrences count}"
  elsif between
    message << " between #{between.begin ? between.first : 1} and " \
               "#{between.end ? between.last : 'infinite'} times"
  elsif maximum
    message << " at most #{occurrences maximum}"
  elsif minimum
    message << " at least #{occurrences minimum}"
  end
  message
end
count_specified?() click to toggle source
# File lib/capybara/queries/base_query.rb, line 72
def count_specified?
  COUNT_KEYS.any? { |key| options.key? key }
end
occurrences(count) click to toggle source
# File lib/capybara/queries/base_query.rb, line 92
def occurrences(count)
  "#{count} #{Capybara::Helpers.declension('time', 'times', count)}"
end