module Capybara::Pagemap::Select

Select build methods for selectable DOM elements

Public Instance Methods

select_getter_build_and_send(method_name, _args, _block) click to toggle source
# File lib/capybara/pagemap/select.rb, line 43
def select_getter_build_and_send(method_name, _args, _block)
  return unless self.class.node_definitions[method_name.to_sym]
  build_select_getter(method_name)
  send(method_name)
end
select_input_build_and_send(method_name, _args, _block) click to toggle source
# File lib/capybara/pagemap/select.rb, line 25
def select_input_build_and_send(method_name, _args, _block)
  return unless /(?<key>.*)_input$/ =~ method_name && self.class.node_definitions[key.to_sym]
  build_select_input(key)
  send(method_name)
end
select_method_missing(method_name, args, block) click to toggle source
# File lib/capybara/pagemap/select.rb, line 18
def select_method_missing(method_name, args, block)
  select_input_build_and_send(method_name, args, block) ||
    select_opt_build_and_send(method_name, args, block) ||
    select_value_build_and_send(method_name, args, block) ||
    select_getter_build_and_send(method_name, args, block)
end
select_opt_build_and_send(method_name, args, _block) click to toggle source
# File lib/capybara/pagemap/select.rb, line 31
def select_opt_build_and_send(method_name, args, _block)
  return unless /(?<key>.*)_select$/ =~ method_name && self.class.node_definitions[key.to_sym] && self.class.node_definitions[key.to_sym][:type] == :select
  build_select_opt(key)
  send(method_name, args.first)
end
select_respond_to_missing?(method_name, _include_private = false) click to toggle source
# File lib/capybara/pagemap/select.rb, line 49
def select_respond_to_missing?(method_name, _include_private = false)
  /(.*)_input$/ =~ method_name ||
    /(.*)_select$/ =~ method_name ||
    /(.*)_select_by$/ =~ method_name ||
    self.class.node_definitions[(Regexp.last_match(1) || method_name).to_sym]
end
select_validator_for(node) click to toggle source
# File lib/capybara/pagemap/select.rb, line 14
def select_validator_for(node)
  !send("#{node}_input").nil?
end
select_value_build_and_send(method_name, args, _block) click to toggle source
# File lib/capybara/pagemap/select.rb, line 37
def select_value_build_and_send(method_name, args, _block)
  return unless /(?<key>.*)_select_by$/ =~ method_name && self.class.node_definitions[key.to_sym] && self.class.node_definitions[key.to_sym][:type] == :select
  build_select_by(key)
  send(method_name, args.first)
end

Private Instance Methods

build_select_by(key_name) click to toggle source
# File lib/capybara/pagemap/select.rb, line 74
      def build_select_by(key_name)
        instance_eval <<-RUBY
          def #{key_name}_select_by(value)
            self.#{key_name}_input.find("option[value='"+value+"']").select_option if self.#{key_name}_input.respond_to?(:find)
          end
        RUBY
      end
build_select_getter(key_name) click to toggle source
# File lib/capybara/pagemap/select.rb, line 82
      def build_select_getter(key_name)
        instance_eval <<-RUBY
          def #{key_name}
            self.#{key_name}_input.value
          end
        RUBY
      end
build_select_input(key_name) click to toggle source
# File lib/capybara/pagemap/select.rb, line 58
      def build_select_input(key_name)
        instance_eval <<-RUBY
          def #{key_name}_input
            @#{key_name}_input ||= page.find(:xpath, self.class.node_definitions[:#{key_name}][:value])
          end
        RUBY
      end
build_select_opt(key_name) click to toggle source
# File lib/capybara/pagemap/select.rb, line 66
      def build_select_opt(key_name)
        instance_eval <<-RUBY
          def #{key_name}_select(option)
            @#{key_name}_input.select(option) if self.#{key_name}_input.respond_to?(:select)
          end
        RUBY
      end