1 class TextFilter
2 include Simpleton
3 include Annotatable
4
5 annotate :filter_name, :description
6
7 def filter(text)
8 text
9 end
10
11 class << self
12 def inherited(subclass)
13 subclass.filter_name = subclass.name.to_name('Filter')
14 end
15
16 def filter(text)
17 instance.filter(text)
18 end
19
20 def description_file(filename)
21 text = File.read(filename) rescue ""
22 self.description text
23 end
24
25 def descendants_names
26 descendants.map { |s| s.filter_name }.sort
27 end
28
29 def find_descendant(filter_name)
30 descendants.each do |s|
31 return s if s.filter_name == filter_name
32 end
33 nil
34 end
35 end
36 end