[NEW] Gestalts for silverlight + popular JS libs
[ohcount] / ruby / gestalt / rules / file_rule.rb
1 module Ohcount
2         module Gestalt
3                 # an abstract base class representing a rule based
4                 # on an individual file's attribute (like
5                 # code content, or filename, etc..)
6                 class FileRule < Rule
7                         attr_reader :min_count, :count
8
9                         def initialize(args = {})
10                                 args ||= {}
11                                 @min_count = 1
12         @count = 0
13         @triggers = []
14                                 args.each do |k,v|
15                                         case k
16                                         when :min then @min_count = v
17                                         else raise ArgumentError.new("Unrecognized option: #{ k.inspect }")
18                                         end
19                                 end
20                                 FileRule.add_instance(self)
21                         end
22
23       # default implementation - will yield a single trigger if appropriate
24                         def triggers(gestalt_engine)
25         if triggered?
26           [Trigger.new]
27         else
28           []
29         end
30       end
31
32                         def self.process_source_file(source_file)
33                                 instances.each do |rule|
34           next if rule.triggered?
35           rule.process_source_file(source_file)
36         end
37                         end
38
39                         def self.instances
40                                 @instances ||= []
41                         end
42
43                         def self.add_instance(r)
44                                 instances << r
45                         end
46
47       def triggered?
48         @count >= @min_count
49       end
50
51                 end
52         end
53 end