1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
require 'gestalt/rules/rule'
require 'gestalt/rules/logical_rule'
require 'gestalt/rules/or_rule'
require 'gestalt/rules/and_rule'
require 'gestalt/rules/not_rule'
require 'gestalt/rules/language_rule'
require 'gestalt/rules/file_rule'
require 'gestalt/rules/filename_rule'
require 'gestalt/rules/find_filenames_rule'
require 'gestalt/rules/c_header_rule'
require 'gestalt/rules/keyword_rule'
require 'gestalt/rules/c_keyword_rule'
require 'gestalt/rules/gestalt_rule'
require 'gestalt/rules/java_import_rule'
require 'gestalt/rules/csharp_using_rule'
require 'gestalt/rules/find_java_imports_rule'
require 'gestalt/rules/maven_parser'
require 'gestalt/rules/maven_rule'
require 'gestalt/rules/csproj_parser'
require 'gestalt/rules/csproj_rule'
module Ohcount
module Gestalt
class Definition
attr_reader :type, :fixed_name
def initialize(type, fixed_name = nil, options = {}, &block)
@type = type
@fixed_name = fixed_name
if options[:rule]
@top_level_or = options[:rule]
else
@top_level_or = OrRule.new(&block)
end
end
def gestalts(gestalt_engine)
@top_level_or.triggers(gestalt_engine).map do |trigger|
Gestalt::Base.new(type, trigger.name || self.fixed_name, trigger.count)
end
end
def top_level_or
@top_level_or ||= OrRule.new
end
def self.add_definition(definition)
@definitions ||= []
@definitions << definition
end
def self.all_definitions
@definitions || []
end
def clone
rule = top_level_or.clone
Definition.new(type,fixed_name,:rule => rule)
end
end
# DSL language to allow people to define gestalt definitions like this:\
#
# define_xxx 'Foobar' do
# filenames 'foobar'
# end
#
def self.method_missing(method, *args, &block)
if method.to_s =~ /define_(.*)$/
Definition.add_definition(Definition.new($1.intern,*args,&block))
else
super
end
end
end
end
|