class Kameleon::DSL::Context::Scope

Attributes

params[RW]

Public Class Methods

new(params) click to toggle source
# File lib/kameleon/dsl/context/scope.rb, line 8
def initialize(params)
  @params = params
end

Public Instance Methods

selector() click to toggle source
# File lib/kameleon/dsl/context/scope.rb, line 12
def selector
  detect_selector(params)
end

Private Instance Methods

default_selector() click to toggle source
# File lib/kameleon/dsl/context/scope.rb, line 55
def default_selector
  defined_areas[:default] || [:xpath, "//body"]
end
defined_areas() click to toggle source
# File lib/kameleon/dsl/context/scope.rb, line 59
def defined_areas
  ::Kameleon::Session.defined_areas
end
detect_selector(param) click to toggle source
# File lib/kameleon/dsl/context/scope.rb, line 18
def detect_selector(param)
  case param
    when Hash
      #! add warning when there is more then one element in hash
      Kameleon::DSL::Context::SpecialSelectors.send(*param.first)
    when Symbol
      normalize(defined_areas[param])
    when String
      normalize(param)
    when Array
      param.size == 1 ?
          detect_selector(param.first) :
          normalize(param)
    when nil
      normalize(default_selector)
    else
      raise "type <#{param.class.name}> not implemented"
  end
end
normalize(params) click to toggle source
# File lib/kameleon/dsl/context/scope.rb, line 38
def normalize(params)
  case params
    when String
      [::Capybara.default_selector, params]
    when Array
      if params.empty?
        normalize(default_selector)
      elsif params.size == 1
        [::Capybara.default_selector] + params
      elsif [:xpath, :css].include?(params.first)
        params
      else
        JoinInToOne.new(params, self).selector
      end
  end
end