File: gestalt.rb

package info (click to toggle)
ohcount 3.0.0-6.1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 4,828 kB
  • sloc: ansic: 6,534; ruby: 2,560; perl: 2,041; erlang: 350; lisp: 272; sh: 244; pascal: 196; vhdl: 150; haskell: 149; asm: 127; cs: 124; awk: 98; java: 92; php: 73; tcl: 58; xml: 57; fortran: 54; makefile: 32; python: 31; ada: 30; objc: 30; jsp: 28; sql: 18; cobol: 13; ml: 9; cpp: 3
file content (89 lines) | stat: -rw-r--r-- 2,480 bytes parent folder | download | duplicates (8)
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
79
80
81
82
83
84
85
86
87
88
89
# gestalt.rb written by Mitchell Foral. mitchell<att>caladbolg.net.
# See COPYING for license information.
# Ohcount module tweaked for use by Gestalts.

$: << File.expand_path(File.dirname(__FILE__))
require "ohcount"

# gestalt
require "gestalt/trigger"
require "gestalt/definition"
require "gestalt/base"
require "gestalt/definitions"
require "gestalt/dot_net_definitions"
require "gestalt/java_definitions"
require "gestalt/jasper_definitions"
require "gestalt/gestalt_engine"
require "gestalt/gestalt_facts"


module Ohcount
  class SourceFile
    def gestalts
      gestalt_engine = Gestalt::GestaltEngine.new
      gestalt_engine.process(self)
      gestalt_engine.calc_gestalts
      gestalt_engine.gestalts
    end
  end

  class SourceFileList
    def analyze_gestalt
      @gestalt_engine = Gestalt::GestaltEngine.new
      iter = self.head
      while (iter)
        @gestalt_engine.process(iter.sf)
        iter = iter.next
      end
      @gestalt_engine.calc_gestalts
    end

    def gestalts
      @gestalt_engine.gestalts if @gestalt_engine
    end

		# call analyze to generate facts from a collection of files (typically a
		# project directory). Because deducing different facts often requires doing
		# similar work, this function allows multiple facts to be extracted in one
		# single pass
		#
		# *Fact* *Types*
		#
		# :gestalt:: platform dependencies and tools usage
		# :languages:: detailed programming languages facts
		# :java:: java-related dependencies (jars & imports)
		#
		# Examples
		#
		#  sfl = SourceFileList.new(:dir => '/foo/bar')
		#  sfl.analyze(:languages)
		#  puts sfl.ruby.code.count
		#
		def analyze(what = [:*])
			what = [what] unless what.is_a?(Array)

			do_gestalt   = what.include?(:gestalt)   || what.include?(:*)
			do_languages = what.include?(:language)  || what.include?(:*)

			analyze_languages() if do_languages
			analyze_gestalt() if do_gestalt
		end
  end
end

if __FILE__ == $0
  sourcefile_list = Ohcount::SourceFileList.new()
  sourcefile_list.add_directory('.') if ARGV.size == 0
  ARGV.each do |file_or_path|
    if File.directory?(file_or_path)
      sourcefile_list.add_directory(file_or_path)
    else
      sourcefile_list.add_file(file_or_path)
    end
  end
	STDOUT.puts "Examining #{sourcefile_list.size} file(s) for gestalts."
  sourcefile_list.analyze_gestalt()
  sourcefile_list.gestalts.sort.each do |gestalt|
    puts "#{gestalt.type}\t#{gestalt.count.to_s.rjust(8)}\t#{gestalt.name}"
  end
end