123456789_123456789_123456789_123456789_123456789_

Class: Capybara::Queries::BaseQuery Private

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Inherits: Object
Defined in: lib/capybara/queries/base_query.rb

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(options) ⇒ BaseQuery

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 12

def initialize(options)
  @session_options = options.delete(:session_options)
end

Class Method Details

.wait(options, default = Capybara.default_max_wait_time)

[ GitHub ]

  
# 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

Instance Attribute Details

#count_specified?Boolean (readonly, private)

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 72

def count_specified?
  COUNT_KEYS.any? { |key| options.key? key }
end

#expects_none?Boolean (readonly)

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

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 36

def expects_none?
  count_specified? ? matches_count?(0) : false
end

#options (readonly)

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 9

attr_reader :options

#session_options (rw)

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 16

def session_options
  @session_options || Capybara.session_options
end

#session_options=(value) (rw)

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 10

attr_writer :session_options

Instance Method Details

#assert_valid_keys (private)

Raises:

  • (ArgumentError)
[ GitHub ]

  
# 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 (private)

[ GitHub ]

  
# 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

#failure_message

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

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 62

def failure_message
  +"expected to find #{description}" << count_message
end

#matches_count?(count) ⇒ Boolean

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.

Parameters:

  • count (Integer)

    The actual number. Should be coercible via Integer()

[ GitHub ]

  
# 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

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 66

def negative_failure_message
  +"expected not to find #{description}" << count_message
end

#occurrences(count) (private)

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 92

def occurrences(count)
  "#{count} #{Capybara::Helpers.declension('time', 'times', count)}"
end

#wait

[ GitHub ]

  
# File 'lib/capybara/queries/base_query.rb', line 20

def wait
  self.class.wait(options, session_options.default_max_wait_time)
end