Fixes to pass Ruby extension tests.
[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
40     def analyze
41       analyze_languages()
42       analyze_gestalt()
43     end
44   end
45 end
46
47 if __FILE__ == $0
48   sourcefile_list = Ohcount::SourceFileList.new()
49   sourcefile_list.add_directory('.') if ARGV.size == 0
50   ARGV.each do |file_or_path|
51     if File.directory?(file_or_path)
52       sourcefile_list.add_directory(file_or_path)
53     else
54       sourcefile_list.add_file(file_or_path)
55     end
56   end
57   sourcefile_list.analyze_gestalt()
58   sourcefile_list.gestalts.sort.each do |gestalt|
59     puts "#{gestalt.type}\t#{gestalt.count.to_s.rjust(8)}\t#{gestalt.name}"
60   end
61 end