Fixes recursion bug in disambiguate_in().
[ohcount] / ruby / gestalt / rules / logical_rule.rb
1 module Ohcount
2         module Gestalt
3                 class LogicalRule < Rule
4                         attr_reader :rules
5
6                         def initialize(*rules, &block)
7                                 @rules = rules
8         self.instance_eval(&block) if block
9                         end
10
11       def each_rule(&block)
12         @rules.each { |r| r.each_rule(&block) }
13         yield self
14       end
15
16       def clone
17         cloned_rules = @rules.map { |r|
18           r.clone
19         }
20         self.class.new(*cloned_rules)
21       end
22
23                         def new_rule(r_class, *args, &block)
24                                 @rules << r_class.new(*args,&block)
25                         end
26
27                         def _or(*args, &block)
28                                 new_rule OrRule, *args, &block
29                         end
30
31                         def _and(*args, &block)
32                                 new_rule AndRule, *args, &block
33                         end
34
35                         def _not(*args, &block)
36                                 new_rule NotRule, *args, &block
37                         end
38
39                         def gestalt(*args)
40                                 new_rule GestaltRule, *args
41                         end
42
43                         def language(*args)
44                                 new_rule LanguageRule, *args
45                         end
46
47                         def csproj_import(*args)
48                                 new_rule CsprojRule, *args
49                         end
50
51                         def maven_dependency(*args)
52                                 new_rule MavenRule, *(['dependency'] + args)
53                         end
54
55                         def maven_plugin(*args)
56                                 new_rule MavenRule, *(['plugin'] + args)
57                         end
58
59                         # file rules
60                         def c_headers(*args)
61                                 new_rule CHeaderRule, *args
62                         end
63
64                         def filenames(*args)
65                                 new_rule FilenameRule, *args
66                         end
67
68                         def keywords(*args)
69                                 new_rule KeywordRule, *([nil] << args)
70                         end
71
72                         def c_keywords(*args)
73                                 new_rule CKeywordRule, *args
74                         end
75
76                         def java_import(*args)
77                                 new_rule JavaImportRule, *args
78                         end
79
80                         def csharp_using(*args)
81                                 new_rule CSharpUsingRule, *args
82                         end
83
84       def find_filenames(*args)
85         new_rule FindFilenamesRule, *args
86       end
87
88                         def method_missing(m,*args, &block)
89                                 if m.to_s =~ /^(.*)_keywords$/
90                                         language = $1
91                                         new_args = [language] + args
92                                         new_rule(KeywordRule, *new_args, &block)
93                                   return
94         end
95                                 super
96                         end
97
98                 end
99         end
100 end