Class: Turbulence

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/turbulence.rb,
lib/turbulence/scm/git.rb,
lib/turbulence/version.rb,
lib/turbulence/cli_parser.rb,
lib/turbulence/scm/perforce.rb,
lib/turbulence/configuration.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, Configuration, 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.4"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = nil) ⇒ Turbulence

Returns a new instance of Turbulence.



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

def initialize(config = nil)
  @config  = config || Turbulence.config
  @metrics = {}

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

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



29
30
31
# File 'lib/turbulence.rb', line 29

def config
  @config
end

#metricsObject (readonly)

Returns the value of attribute metrics.



30
31
32
# File 'lib/turbulence.rb', line 30

def metrics
  @metrics
end

Class Method Details

.configObject

Make a config instance available to anyone who wants one



25
26
27
# File 'lib/turbulence.rb', line 25

def self.config
  @config ||= Configuration.new
end

Instance Method Details

#calculate_metrics_with(calculator) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/turbulence.rb', line 53

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.class, score)
  end

  report "\n"
end

#files_of_interestObject



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

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



72
73
74
# File 'lib/turbulence.rb', line 72

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

#report(this) ⇒ Object



64
65
66
# File 'lib/turbulence.rb', line 64

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

#set_file_metric(filename, metric, value) ⇒ Object



68
69
70
# File 'lib/turbulence.rb', line 68

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