ManageIQ/manageiq-providers-openstack

View on GitHub
app/models/manageiq/providers/openstack/inventory/collector/target_collection.rb

Summary

Maintainability
A
0 mins
Test Coverage
C
75%

Cyclomatic complexity for infer_related_vm_ems_refs_db! is too high. [16/11]
Open

  def infer_related_vm_ems_refs_db!
    changed_vms = manager.vms.where(:ems_ref => references(:vms)).includes(:key_pairs, :network_ports, :floating_ips,
                                                                           :orchestration_stack, :cloud_networks, :cloud_tenant)
    changed_vms.each do |vm|
      stack      = vm.orchestration_stack

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

Use filter_map instead.
Open

    end.compact + references(:floating_ips).collect do |floating_ip_id|
      safe_get { network_service.floating_ips.get(floating_ip_id) }
    end.compact

Use filter_map instead.
Open

    @cloud_networks = references(:cloud_networks).collect do |network_id|
      safe_get do
        network_service.get_network(network_id).body["network"]
      rescue Fog::OpenStack::Network::NotFound
        nil

Use filter_map instead.
Open

    @network_routers = references(:network_routers).collect do |router_id|
      safe_get { network_service.routers.get(router_id) }
    end.compact

Use filter_map instead.
Open

    @floating_ips = references(:floating_ips_by_address).collect do |floating_ip|
      safe_get { network_service.floating_ips.all(:floating_ip_address => floating_ip).first }
    end.compact + references(:floating_ips).collect do |floating_ip_id|

Use filter_map instead.
Open

    targets_by_association(:orchestration_stacks).collect do |target|
      get_orchestration_stack(target.manager_ref[:ems_ref], target.options[:tenant_id])
    end.compact

Use filter_map instead.
Open

    references(:vms).collect do |vm_id|
      get_vm(vm_id)
    end.compact

Use filter_map instead.
Open

    @flavors = references(:flavors).collect do |flavor_id|
      safe_get { compute_service.flavors.get(flavor_id) }
    end.compact

Use filter_map instead.
Open

      vm.cloud_networks.collect(&:ems_ref).compact.each { |ems_ref| add_target!(:cloud_networks, ems_ref) }

Use filter_map instead.
Open

      vm.network_ports.collect(&:ems_ref).compact.each do |ems_ref|

Use filter_map instead.
Open

    @images = references(:images).collect do |image_id|
      safe_get { image_service.images.get(image_id) }
    end.compact

Use filter_map instead.
Open

    @cloud_volume_snapshots = targets_by_association(:cloud_volume_snapshots).collect do |target|
      scoped_get_snapshot(target.manager_ref[:ems_ref], target.options[:tenant_id])
    end.compact

Use filter_map instead.
Open

      vm.key_pairs.collect(&:name).compact.each do |name|

Use filter_map instead.
Open

    @cloud_volumes = targets_by_association(:cloud_volumes).collect do |target|
      scoped_get_volume(target.manager_ref[:ems_ref], target.options[:tenant_id])
    end.compact

Use filter_map instead.
Open

      vm.floating_ips.collect(&:ems_ref).compact.each { |ems_ref| add_target!(:floating_ips, ems_ref) }

Use filter_map instead.
Open

      vm.cloud_volumes.collect(&:ems_ref).compact.each do |ems_ref|

Use filter_map instead.
Open

    @tenants = references(:cloud_tenants).collect do |cloud_tenant_id|
      memoized_get_tenant(cloud_tenant_id)
    end.compact

There are no issues that match your filters.

Category
Status