Module: Mechanize::ElementMatcher

Included in:
Form, Form::MultiSelectList, Page
Defined in:
lib/mechanize/element_matcher.rb

Instance Method Summary collapse

Instance Method Details

#elements_with(singular, plural = "#{singular}s") ⇒ Object


4
5
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
# File 'lib/mechanize/element_matcher.rb', line 4

def elements_with singular, plural = "#{singular}s"
  class_eval "    def \#{plural}_with criteria = {}\n      selector = method = nil\n      if String === criteria then\n        criteria = {:name => criteria}\n      else\n        criteria = criteria.each_with_object({}) { |(k, v), h|\n          case k = k.to_sym\n          when :id\n            h[:dom_id] = v\n          when :class\n            h[:dom_class] = v\n          when :search, :xpath, :css\n            if v\n              if method\n                warn \"multiple search selectors are given; previous selector (\\\#{method}: \\\#{selector.inspect}) is ignored.\"\n              end\n              selector = v\n              method = k\n            end\n          else\n            h[k] = v\n          end\n        }\n      end\n\n      f = select_\#{plural}(selector, method).find_all do |thing|\n        criteria.all? do |k,v|\n          v === thing.__send__(k)\n        end\n      end\n      yield f if block_given?\n      f\n    end\n\n    def \#{singular}_with criteria = {}\n      f = \#{plural}_with(criteria).first\n      yield f if block_given?\n      f\n    end\n\n    def \#{singular}_with! criteria = {}\n      f = \#{singular}_with(criteria)\n      raise Mechanize::ElementNotFoundError.new(self, :\#{singular}, criteria) if f.nil?\n      yield f if block_given?\n      f\n    end\n\n    def select_\#{plural} selector, method = :search\n      if selector.nil? then\n        \#{plural}\n      else\n        nodes = __send__(method, selector)\n        \#{plural}.find_all do |element|\n          nodes.include?(element.node)\n        end\n      end\n    end\n\n    alias :\#{singular} :\#{singular}_with\n  CODE\nend\n"