require 'roodi/checks/check' module Roodi module Checks class CyclomaticComplexityCheck < Check COMPLEXITY_NODE_TYPES = [:if, :while, :until, :for, :rescue, :case, :when, :and, :or] def initialize(complexity) super() @complexity = complexity end protected def count_complexity(node) count_branches(node) + 1 end private def count_branches(node) count = 0 count = count + 1 if COMPLEXITY_NODE_TYPES.include? node.node_type node.children.each {|node| count += count_branches(node)} count end end end end