1 require 'gestalt/rules/rule'
2 require 'gestalt/rules/logical_rule'
3 require 'gestalt/rules/or_rule'
4 require 'gestalt/rules/and_rule'
5 require 'gestalt/rules/not_rule'
6 require 'gestalt/rules/language_rule'
7 require 'gestalt/rules/file_rule'
8 require 'gestalt/rules/filename_rule'
9 require 'gestalt/rules/find_filenames_rule'
10 require 'gestalt/rules/c_header_rule'
11 require 'gestalt/rules/keyword_rule'
12 require 'gestalt/rules/c_keyword_rule'
13 require 'gestalt/rules/gestalt_rule'
14 require 'gestalt/rules/java_import_rule'
15 require 'gestalt/rules/csharp_using_rule'
16 require 'gestalt/rules/maven_parser'
17 require 'gestalt/rules/maven_rule'
18 require 'gestalt/rules/csproj_parser'
19 require 'gestalt/rules/csproj_rule'
25 attr_reader :type, :fixed_name
27 def initialize(type, fixed_name = nil, options = {}, &block)
29 @fixed_name = fixed_name
31 @top_level_or = options[:rule]
33 @top_level_or = OrRule.new(&block)
37 def gestalts(gestalt_engine)
38 @top_level_or.triggers(gestalt_engine).map do |trigger|
39 Gestalt::Base.new(type, trigger.name || self.fixed_name, trigger.count)
44 @top_level_or ||= OrRule.new
47 def self.add_definition(definition)
49 @definitions << definition
52 def self.all_definitions
57 rule = top_level_or.clone
58 Definition.new(type,fixed_name,:rule => rule)
63 # DSL language to allow people to define gestalt definitions like this:\
65 # define_xxx 'Foobar' do
69 def self.method_missing(method, *args, &block)
70 if method.to_s =~ /define_(.*)$/
71 Definition.add_definition(Definition.new($1.intern,*args,&block))