Class: Turbulence

Inherits:
Object
  • Object
show all
Defined in:
lib/turbulence.rb,
lib/turbulence/scm/git.rb,
lib/turbulence/version.rb,
lib/turbulence/scm/perforce.rb,
lib/turbulence/calculators/churn.rb,
lib/turbulence/file_name_mangler.rb,
lib/turbulence/checks_environment.rb,
lib/turbulence/generators/treemap.rb,
lib/turbulence/calculators/complexity.rb,
lib/turbulence/command_line_interface.rb,
lib/turbulence/generators/scatterplot.rb

Defined Under Namespace

Modules: Calculators, Generators, Scm Classes: ChecksEnvironment, CommandLineInterface, FileNameMangler

Constant Summary collapse

CODE_DIRECTORIES =
["app/models",
"app/controllers",
"app/helpers",
"app/jobs",
"app/mailers",
"app/validators",
"lib"]
CALCULATORS =
[Turbulence::Calculators::Complexity,
Turbulence::Calculators::Churn]
VERSION =
"1.2.3"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(directory, output = nil, exclusion_pattern = nil) ⇒ Turbulence

Returns a new instance of Turbulence.



23
24
25
26
27
28
29
30
31
# File 'lib/turbulence.rb', line 23

def initialize(directory, output = nil, exclusion_pattern = nil)
  @output            = output
  @metrics           = {}
  @exclusion_pattern = exclusion_pattern

  Dir.chdir(directory) do
    CALCULATORS.each(&method(:calculate_metrics_with))
  end
end

Instance Attribute Details

#exclusion_patternObject (readonly)

Returns the value of attribute exclusion_pattern.



20
21
22
# File 'lib/turbulence.rb', line 20

def exclusion_pattern
  @exclusion_pattern
end

#metricsObject (readonly)

Returns the value of attribute metrics.



21
22
23
# File 'lib/turbulence.rb', line 21

def metrics
  @metrics
end

Instance Method Details

#calculate_metrics_with(calculator) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/turbulence.rb', line 38

def calculate_metrics_with(calculator)
  report "calculating metric: #{calculator}\n"

  calculator.for_these_files(files_of_interest) do |filename, score|
    report "."
    set_file_metric(filename, calculator, score)
  end

  report "\n"
end

#files_of_interestObject



33
34
35
36
# File 'lib/turbulence.rb', line 33

def files_of_interest
  file_list = CODE_DIRECTORIES.map{|base_dir| "#{base_dir}/**/*\.rb"}
  @ruby_files ||= exclude_files(Dir[*file_list])
end

#metrics_for(filename) ⇒ Object



57
58
59
# File 'lib/turbulence.rb', line 57

def metrics_for(filename)
  @metrics[filename] ||= {}
end

#report(this) ⇒ Object



49
50
51
# File 'lib/turbulence.rb', line 49

def report(this)
  @output.print this unless @output.nil?
end

#set_file_metric(filename, metric, value) ⇒ Object



53
54
55
# File 'lib/turbulence.rb', line 53

def set_file_metric(filename, metric, value)
  metrics_for(filename)[metric] = value
end