Class: Array

Inherits:
Object
  • Object
show all
Includes:
Philter::Base
Defined in:
lib/array.rb

Instance Method Summary collapse

Instance Method Details

#philter(search = nil, options = {}) ⇒ Object



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
      # search: {} or []
      selected = phil_search_from_list search, item, options
    elsif search.is_a?(Regexp)
      # Search has one item
      # search: 3 or search: 'a'
      print " b.  "                                                      if options[:debug]
      selected = phil_evaluate item, nil, search, :simple, options.merge(operator: '=~')
      puts "  #{'=> X' if selected}"                                     if options[:debug]
    else
      # Search has one item
      # search: 3 or search: 'a'
      # search: '<3' or any other operator
      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