1 # gestalt.rb written by Mitchell Foral. mitchell<att>caladbolg.net.
2 # See COPYING for license information.
3 # Ohcount module tweaked for use by Gestalts.
5 $: << File.expand_path(File.dirname(__FILE__))
9 require "gestalt/trigger"
10 require "gestalt/definition"
11 require "gestalt/base"
12 require "gestalt/definitions"
13 require "gestalt/dot_net_definitions"
14 require "gestalt/java_definitions"
15 require "gestalt/jasper_definitions"
16 require "gestalt/gestalt_engine"
17 require "gestalt/gestalt_facts"
23 gestalt_engine = Gestalt::GestaltEngine.new
24 gestalt_engine.process(self)
25 gestalt_engine.calc_gestalts
26 gestalt_engine.gestalts
32 @gestalt_engine = Gestalt::GestaltEngine.new
35 @gestalt_engine.process(iter.sf)
38 @gestalt_engine.calc_gestalts
42 @gestalt_engine.gestalts if @gestalt_engine
45 # call analyze to generate facts from a collection of files (typically a
46 # project directory). Because deducing different facts often requires doing
47 # similar work, this function allows multiple facts to be extracted in one
52 # :gestalt:: platform dependencies and tools usage
53 # :languages:: detailed programming languages facts
54 # :java:: java-related dependencies (jars & imports)
58 # sfl = SourceFileList.new(:dir => '/foo/bar')
59 # sfl.analyze(:languages)
60 # puts sfl.ruby.code.count
62 def analyze(what = [:*])
63 what = [what] unless what.is_a?(Array)
65 do_gestalt = what.include?(:gestalt) || what.include?(:*)
66 do_languages = what.include?(:language) || what.include?(:*)
68 analyze_languages() if do_languages
69 analyze_gestalt() if do_gestalt
75 sourcefile_list = Ohcount::SourceFileList.new()
76 sourcefile_list.add_directory('.') if ARGV.size == 0
77 ARGV.each do |file_or_path|
78 if File.directory?(file_or_path)
79 sourcefile_list.add_directory(file_or_path)
81 sourcefile_list.add_file(file_or_path)
84 STDOUT.puts "Examining #{sourcefile_list.size} file(s) for gestalts."
85 sourcefile_list.analyze_gestalt()
86 sourcefile_list.gestalts.sort.each do |gestalt|
87 puts "#{gestalt.type}\t#{gestalt.count.to_s.rjust(8)}\t#{gestalt.name}"