[NEW] add tests (currently broken) for source_file_list
[ohcount] / ruby / gestalt.rb
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.
4
5 $: << File.expand_path(File.dirname(__FILE__))
6 require "ohcount"
7
8 # gestalt
9 require "gestalt/trigger"
10 require "gestalt/definition"
11 require "gestalt/base"
12 require "gestalt/definitions"
13 require "gestalt/gestalt_engine"
14
15 module Ohcount
16   class SourceFile
17     def gestalts
18       gestalt_engine = Gestalt::GestaltEngine.new
19       gestalt_engine.process(self)
20       gestalt_engine.calc_gestalts
21       gestalt_engine.gestalts
22     end
23   end
24
25   class SourceFileList
26     def analyze_gestalt
27       @gestalt_engine = Gestalt::GestaltEngine.new
28       iter = self.head
29       while (iter)
30         @gestalt_engine.process(iter.sf)
31         iter = iter.next
32       end
33       @gestalt_engine.calc_gestalts
34     end
35
36     def gestalts
37       @gestalt_engine.gestalts if @gestalt_engine
38     end
39   end
40 end
41
42 if __FILE__ == $0
43   sourcefile_list = Ohcount::SourceFileList.new()
44   sourcefile_list.add_directory('.') if ARGV.size == 0
45   ARGV.each do |file_or_path|
46     if File.directory?(file_or_path)
47       sourcefile_list.add_directory(file_or_path)
48     else
49       sourcefile_list.add_file(file_or_path)
50     end
51   end
52   sourcefile_list.analyze_gestalt()
53   sourcefile_list.gestalts.sort.each do |gestalt|
54     puts "#{gestalt.type}\t#{gestalt.count.to_s.rjust(8)}\t#{gestalt.name}"
55   end
56 end