Class: RDig::UrlFilters::FilterChain
- Inherits:
-
Object
- Object
- RDig::UrlFilters::FilterChain
- Defined in:
- lib/rdig/url_filters.rb
Instance Method Summary collapse
-
#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.
- #apply(document) ⇒ Object
-
#initialize(chain_config) ⇒ FilterChain
constructor
A new instance of FilterChain.
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 |