Class: Roodi::Checks::AbcMetricMethodCheck

Inherits:
Check
  • Object
show all
Defined in:
lib/roodi/checks/abc_metric_method_check.rb

Constant Summary collapse

ASSIGNMENTS =

TODO: ‘-=’ does not work in the moment!

[:lasgn]
BRANCHES =
[:vcall, :call]
CONDITIONS =
[:==, :<=, :>=, :<, :>]
OPERATORS =
[:*, :/, :%, :+, :<<, :>>, :&, :|, :^]
DEFAULT_SCORE =
10

Instance Method Summary collapse

Methods inherited from Check

#add_error, #errors, #evaluate_node_at_line, #position

Constructor Details

#initialize(options = {}) ⇒ AbcMetricMethodCheck

Returns a new instance of AbcMetricMethodCheck.



16
17
18
19
# File 'lib/roodi/checks/abc_metric_method_check.rb', line 16

def initialize(options = {})
  super()
  @score = options['score'] || DEFAULT_SCORE
end

Instance Method Details

#evaluate(node) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/roodi/checks/abc_metric_method_check.rb', line 25

def evaluate(node)
  method_name = node[1]
  a = count_assignments(node)
  b = count_branches(node)
  c = count_conditionals(node)
  score = Math.sqrt(a*a + b*b + c*c)
  add_error({ :method => method_name, :score => score }) unless score <= @score
end

#interesting_nodesObject



21
22
23
# File 'lib/roodi/checks/abc_metric_method_check.rb', line 21

def interesting_nodes
  [:defn]
end