ManageIQ/manageiq

View on GitHub
app/models/metric/ci_mixin/rollup.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
91%

Cyclomatic complexity for perf_rollup_to_parents is too high. [13/11]
Open

  def perf_rollup_to_parents(interval_name, start_time, end_time = nil)
    parent_rollups, next_rollup_interval = case interval_name
                                           when 'realtime'             then [perf_rollup_parents(interval_name), 'hourly']
                                           when 'hourly', 'historical' then [perf_rollup_parents('hourly'), 'daily']
                                           when 'daily'                then [nil, nil]

Checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one. Blocks that are calls to builtin iteration methods (e.g. `ary.map{...}) also add one, others are ignored.

def each_child_node(*types)               # count begins: 1
  unless block_given?                     # unless: +1
    return to_enum(__method__, *types)

  children.each do |child|                # each{}: +1
    next unless child.is_a?(Node)         # unless: +1

    yield child if types.empty? ||        # if: +1, ||: +1
                   types.include?(child.type)
  end

  self
end                                       # total: 6

Shadowing outer local variable - times.
Open

        times_by_tp.each do |tp, times|

Checks for the use of local variable names from an outer scope in block arguments or block-local variables. This mirrors the warning given by ruby -cw prior to Ruby 2.6: "shadowing outer local variable - foo".

NOTE: Shadowing of variables in block passed to Ractor.new is allowed because Ractor should not access outer variables. eg. following style is encouraged:

```ruby
worker_id, pipe = env
Ractor.new(worker_id, pipe) do |worker_id, pipe|
end
```

Example:

# bad

def some_method
  foo = 1

  2.times do |foo| # shadowing outer `foo`
    do_something(foo)
  end
end

Example:

# good

def some_method
  foo = 1

  2.times do |bar|
    do_something(bar)
  end
end

There are no issues that match your filters.

Category
Status