3
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
|
# File 'lib/array.rb', line 3
def philter search=nil, options={}
options = {
get: nil,
debug: false
}.merge(options)
unless search
puts philter_help if options[:debug]
raise "Specify search parameter!"
end
results = []
self.each do |item|
puts "item #{item.class.name} #{item}" if options[:debug]
if search.respond_to? :each
selected = phil_search_from_list search, item, options
elsif search.is_a?(Regexp)
print " b. " if options[:debug]
selected = phil_evaluate item, nil, search, :simple, options.merge(operator: '=~')
puts " #{'=> X' if selected}" if options[:debug]
else
print " c. " if options[:debug]
selected = phil_evaluate item, nil, search, :simple, options.merge(operator: '==')
puts " #{'=> X' if selected}" if options[:debug]
end
if selected
results <<
if options[:get]
if item.respond_to? options[:get]
item.send options[:get]
elsif item.respond_to? '[]'
item[options[:get]]
end
else
item
end
end
end
puts "------------------" if options[:debug]
puts " #{results ? results.size : 'No'} item#{results && results.size == 1 ? '' : 's'} found" if options[:debug]
results
end
|