class Napybara::FinderMethodsAppender

Attributes

block[R]
child_element_name[R]
child_element_selector[R]
element[R]
optional_args[R]

Public Class Methods

new( element, child_element_name, child_element_selector, optional_args, block) click to toggle source
# File lib/napybara/finder_methods_appender.rb, line 8
def initialize(
  element, child_element_name, child_element_selector, optional_args, block)

  @element, @child_element_name, @child_element_selector, @optional_args, @block =
    element, child_element_name, child_element_selector, optional_args, block
end

Public Instance Methods

capybara_options() click to toggle source
# File lib/napybara/finder_methods_appender.rb, line 22
def capybara_options
  return {} if optional_args.empty?
  return {} if !optional_args.last.is_a?(Hash)

  optional_args.last
end
execute() click to toggle source
# File lib/napybara/finder_methods_appender.rb, line 29
def execute
  define_child_element_method
  define_has_child_element_method
  define_has_no_child_element_method
  define_child_elements_method
end
record_selector() click to toggle source
# File lib/napybara/finder_methods_appender.rb, line 15
def record_selector
  return if optional_args.empty?
  return if !optional_args[0].is_a?(String)

  optional_args[0]
end

Private Instance Methods

define_child_element_method() click to toggle source
# File lib/napybara/finder_methods_appender.rb, line 38
def define_child_element_method
  appender = self

  element.define_singleton_method(child_element_name) do |record = nil|
    selector = Selector.new(
      appender.child_element_selector,
      appender.record_selector,
      record)

    selector_string = selector.to_s

    capybara_element =
      self.get.find(selector_string, appender.capybara_options)

    self.class.new(capybara_element, self, selector_string, &appender.block)
  end
end
define_child_elements_method() click to toggle source
# File lib/napybara/finder_methods_appender.rb, line 81
def define_child_elements_method
  appender = self

  element.define_singleton_method(child_element_name.to_s.pluralize) do
    elements = self.get.all(appender.child_element_selector).map do |child_element|
      self.class.new(
        child_element, self, appender.child_element_selector, &appender.block)
    end

    ElementArray.new(elements, self, appender.child_element_selector)
  end
end
define_has_child_element_method() click to toggle source
# File lib/napybara/finder_methods_appender.rb, line 56
def define_has_child_element_method
  appender = self

  element.define_singleton_method("has_#{child_element_name}?") do |record = nil|
    selector = Selector.new(
      appender.child_element_selector,
      appender.record_selector, record)

    self.get.has_css?(selector.to_s)
  end
end
define_has_no_child_element_method() click to toggle source
# File lib/napybara/finder_methods_appender.rb, line 68
def define_has_no_child_element_method
  appender = self

  element.define_singleton_method("has_no_#{child_element_name}?") do |record = nil|
    selector = Selector.new(
      appender.child_element_selector,
      appender.record_selector,
      record)

    self.get.has_no_css?(selector.to_s)
  end
end