| Class | RDig::UrlFilters::FilterChain |
| In: |
lib/rdig/url_filters.rb
|
| Parent: | Object |
# File lib/rdig/url_filters.rb, line 6
6: def initialize(chain_config)
7: @filters = []
8: chain_config.each { |filter|
9: case filter
10: when Hash
11: filter.each_pair { |f, args|
12: add(f, args)
13: }
14: when Array
15: args = filter
16: filter = args.shift
17: add(filter, args)
18: else
19: add(filter)
20: end
21: }
22: end
add a filter and it’s args to the chain when args is a symbol, it is treated as a configuration key
# File lib/rdig/url_filters.rb, line 26
26: def add(filter, args=nil)
27: args = RDig.config.crawler.send(args) if args.is_a? Symbol
28: case filter
29: when Symbol
30: if args.nil?
31: @filters << lambda { |document|
32: UrlFilters.send(filter, document)
33: }
34: else
35: @filters << lambda { |document|
36: UrlFilters.send(filter, document, args)
37: }
38: end
39: when Class
40: if args.nil?
41: if filter.respond_to?(:instance)
42: filter_instance = filter.instance
43: else
44: filter_instance = filter.new
45: end
46: else
47: filter_instance = filter.new(args)
48: end
49: @filters << lambda { |document|
50: filter_instance.apply(document)
51: }
52: end
53: end