Class: Watizzle::Locators::Element::SelectorBuilder::Sizzle

Inherits:
Object
  • Object
show all
Defined in:
lib/watizzle/locators/element/selector_builder/sizzle.rb

Instance Method Summary collapse

Instance Method Details

#build(selectors) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/watizzle/locators/element/selector_builder/sizzle.rb', line 6

def build(selectors)
  if selectors.empty?
    sizzle = '*'
  else
    sizzle = ''
    sizzle << (selectors.delete(:tag_name) || '')
  end

  klass = selectors.delete(:class)
  if klass
    if klass.is_a?(String)
      if klass.include? ' '
        sizzle << %([class="#{escape_quotes(klass)}"])
      else
        sizzle << ".#{klass}"
      end
    else
      sizzle << %(:regexp(class, #{klass.inspect}))
    end
  end

  href = selectors.delete(:href)
  if href
    if href.is_a?(String)
      sizzle << %([href~="#{escape_quotes(href)}"])
    else
      sizzle << %(:regexp(href, #{href.inspect}))
    end
  end

  text = selectors.delete(:text)
  if text
    if text.is_a?(String)
      sizzle << %(:contains("#{escape_quotes(text)}"))
    else
      sizzle << %(:regexp(text, #{text.inspect}))
    end
  end

  if selectors.key?(:visible)
    sizzle << (selectors.delete(:visible) ? ':visible' : ':hidden')
  end

  index = selectors.delete(:index)

  selectors.each do |key, value|
    key = key.to_s.tr("_", "-")

    case value
    when String, Fixnum
      sizzle << %([#{key}="#{escape_quotes(value)}"])
    when Regexp
      sizzle << %(:regexp(#{key}, #{value.inspect}))
    end
  end

  if index
    sizzle << %(:eq(#{index}))
  end

  p sizzle: sizzle, selectors: selectors if $DEBUG

  [:sizzle, sizzle]
end