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"
|