Class: RDig::UrlFilters::FilterChain

Inherits:
Object
  • Object
show all
Defined in:
lib/rdig/url_filters.rb

Instance Method Summary collapse

Constructor Details

#initialize(chain_config) ⇒ FilterChain

Returns a new instance of FilterChain.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/rdig/url_filters.rb', line 6

def initialize(chain_config)
  @filters = []
  chain_config.each { |filter|
    case filter
    when Hash
      filter.each_pair { |f, args|
        add(f, args)
      }
    when Array
      args = filter
      filter = args.shift
      add(filter, args)
    else
      add(filter)
    end
  }
end

Instance Method Details

#add(filter, args = nil) ⇒ Object

add a filter and it’s args to the chain if args is a symbol, it is treated as a configuration key



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
# File 'lib/rdig/url_filters.rb', line 26

def add(filter, args=nil)
  args = RDig.config.crawler.send(args) if args.is_a? Symbol
  case filter
  when Symbol
    if args.nil?
      @filters << lambda { |document|
        UrlFilters.send(filter, document)
      }
    else
      @filters << lambda { |document|
        UrlFilters.send(filter, document, args)
      }
    end
  when Class
    if args.nil?
      if filter.respond_to?(:instance)
        filter_instance = filter.instance
      else
        filter_instance = filter.new
      end
    else
      filter_instance = filter.new(args)
    end
    @filters << lambda { |document|
      filter_instance.apply(document)
    }
  end
end

#apply(document) ⇒ Object



55
56
57
58
59
60
# File 'lib/rdig/url_filters.rb', line 55

def apply(document)
  @filters.each { |filter|
    return nil unless filter.call(document)
  }
  return document
end