module Selectivity::Rspec::FeatureHelpers

Public Instance Methods

selectivity_select(value, *args) click to toggle source
# File lib/selectivity/rspec.rb, line 5
def selectivity_select(value, *args)
  options = args.extract_options!

  fail('Selectivity input not set!') unless options.has_key?(:from)

  from  = options.delete(:from)
  input = find_selectivity_input(from, options)
  items = _selectivity_multiselect?(input) ? args.unshift(value).uniq : [value]

  items.each do |item|
    _selectivity_select!(input, item)
  end
end
selectivity_unselect(value, *args) click to toggle source
# File lib/selectivity/rspec.rb, line 19
def selectivity_unselect(value, *args)
  options = args.extract_options!

  fail('Selectivity input not set!') unless options.has_key?(:from)

  from  = options.delete(:from)
  input = find_selectivity_input(from, options)
  items = _selectivity_multiselect?(input) ? args.unshift(value).uniq : [value]

  items.each do |item|
    if _selectivity_multiselect?(input)
      _selectivity_unselect_multiple!(input, item)
    else
      _selectivity_unselect_single!(input)
    end
  end
end

Private Instance Methods

_selectivity_multiselect?(input) click to toggle source
# File lib/selectivity/rspec.rb, line 53
def _selectivity_multiselect?(input)
  input.first('.selectivity-multiple-input-container').present?
end
_selectivity_select!(input, item) click to toggle source
# File lib/selectivity/rspec.rb, line 57
def _selectivity_select!(input, item)
  input.click

  within 'div.selectivity-dropdown' do
    element = if page.driver.class.name =~ /poltergeist/i
                find('div.selectivity-result-item', text: item)
              else
                find(:xpath, ".//div[contains(@class,'selectivity-result-item')][text()='#{item}']")
              end

    if element.visible?
      page.evaluate_script("$('div.selectivity-result-item:contains(#{item})').trigger('click')")
    end
  end
end
_selectivity_unselect_multiple!(input, value) click to toggle source
# File lib/selectivity/rspec.rb, line 77
def _selectivity_unselect_multiple!(input, value)
  input.first('.selectivity-multiple-selected-item', text: value)
       .first('.selectivity-multiple-selected-item-remove')
       .click
end
_selectivity_unselect_single!(input) click to toggle source
# File lib/selectivity/rspec.rb, line 73
def _selectivity_unselect_single!(input)
  input.first('.selectivity-single-selected-item-remove').click
end
find_selectivity_input(from, options) click to toggle source
# File lib/selectivity/rspec.rb, line 39
def find_selectivity_input(from, options)
  label = first(:xpath, ".//label[contains(., '#{from}')]", options)
  if label.present?
    find(:div, "##{label[:for]}", options)
  else
    target = first(:xpath, ".//div[contains(., '#{from}')]", options) || first(:div, from, options)
    if target[:class].include?('selectivity-input')
      target
    else
      target.first('.selectivity-input')
    end
  end
end