ManageIQ/ovirt

View on GitHub
lib/ovirt/vm.rb

Summary

Maintainability
C
1 day
Test Coverage
F
56%

Class Vm has 34 methods (exceeds 20 allowed). Consider refactoring.
Open

  class Vm < Template
    self.top_level_strings    = [:name, :origin, :type, :description]
    self.top_level_booleans   = [:stateless]
    self.top_level_integers   = [:memory]
    self.top_level_timestamps = [:creation_time, :start_time]
Severity: Minor
Found in lib/ovirt/vm.rb - About 4 hrs to fix

    File vm.rb has 304 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    require_relative 'legacy_support/cloud_init_via_floppy_payload'
    
    module Ovirt
      class Vm < Template
        self.top_level_strings    = [:name, :origin, :type, :description]
    Severity: Minor
    Found in lib/ovirt/vm.rb - About 3 hrs to fix

      Method create_disk has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
      Open

          def create_disk(options = {})
            create_device("disk") do |xml|
              [:name, :interface, :format, :size, :type].each do |key|
                next if options[key].blank?
                xml.send("#{key}_", options[key])
      Severity: Minor
      Found in lib/ovirt/vm.rb - About 1 hr to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Method create_nic has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
      Open

          def create_nic(options = {})
            create_device("nic") do |xml|
              xml.name      options[:name]
              xml.interface options[:interface] unless options[:interface].blank?
              xml.network(:id => options[:network_id]) unless options[:network_id].blank?
      Severity: Minor
      Found in lib/ovirt/vm.rb - About 55 mins to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Method start has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
      Open

          def start
            if block_given?
              operation(:start) { |xml| yield xml }
            else
              operation(:start)
      Severity: Minor
      Found in lib/ovirt/vm.rb - About 25 mins to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Use match? instead of =~ when MatchData is not used.
      Open

            raise VmNotReadyToBoot, [err.message, err] if err.message =~ /disks .+ are locked/
      Severity: Minor
      Found in lib/ovirt/vm.rb by rubocop

      In Ruby 2.4, String#match?, Regexp#match? and Symbol#match? have been added. The methods are faster than match. Because the methods avoid creating a MatchData object or saving backref. So, when MatchData is not used, use match? instead of match.

      Example:

      # bad
      def foo
        if x =~ /re/
          do_something
        end
      end
      
      # bad
      def foo
        if x.match(/re/)
          do_something
        end
      end
      
      # bad
      def foo
        if /re/ === x
          do_something
        end
      end
      
      # good
      def foo
        if x.match?(/re/)
          do_something
        end
      end
      
      # good
      def foo
        if x =~ /re/
          do_something(Regexp.last_match)
        end
      end
      
      # good
      def foo
        if x.match(/re/)
          do_something($~)
        end
      end
      
      # good
      def foo
        if /re/ === x
          do_something($~)
        end
      end

      Use match? instead of =~ when MatchData is not used.
      Open

            raise VmNotReadyToBoot, [err.message, err] if err.message =~ /disks .+ are locked/
      Severity: Minor
      Found in lib/ovirt/vm.rb by rubocop

      In Ruby 2.4, String#match?, Regexp#match? and Symbol#match? have been added. The methods are faster than match. Because the methods avoid creating a MatchData object or saving backref. So, when MatchData is not used, use match? instead of match.

      Example:

      # bad
      def foo
        if x =~ /re/
          do_something
        end
      end
      
      # bad
      def foo
        if x.match(/re/)
          do_something
        end
      end
      
      # bad
      def foo
        if /re/ === x
          do_something
        end
      end
      
      # good
      def foo
        if x.match?(/re/)
          do_something
        end
      end
      
      # good
      def foo
        if x =~ /re/
          do_something(Regexp.last_match)
        end
      end
      
      # good
      def foo
        if x.match(/re/)
          do_something($~)
        end
      end
      
      # good
      def foo
        if /re/ === x
          do_something($~)
        end
      end

      Prefer using YAML.safe_load over YAML.load.
      Open

            raw_content          = YAML.load(content)
      Severity: Minor
      Found in lib/ovirt/vm.rb by rubocop

      Checks for the use of YAML class methods which have potential security issues leading to remote code execution when loading from an untrusted source.

      NOTE: Ruby 3.1+ (Psych 4) uses Psych.load as Psych.safe_load by default.

      Safety:

      The behavior of the code might change depending on what was in the YAML payload, since YAML.safe_load is more restrictive.

      Example:

      # bad
      YAML.load("--- !ruby/object:Foo {}") # Psych 3 is unsafe by default
      
      # good
      YAML.safe_load("--- !ruby/object:Foo {}", [Foo])                    # Ruby 2.5  (Psych 3)
      YAML.safe_load("--- !ruby/object:Foo {}", permitted_classes: [Foo]) # Ruby 3.0- (Psych 3)
      YAML.load("--- !ruby/object:Foo {}", permitted_classes: [Foo])      # Ruby 3.1+ (Psych 4)
      YAML.dump(foo)

      Do not suppress exceptions.
      Open

            rescue VmIsNotRunning
      Severity: Minor
      Found in lib/ovirt/vm.rb by rubocop

      Checks for rescue blocks with no body.

      Example:

      # bad
      def some_method
        do_something
      rescue
      end
      
      # bad
      begin
        do_something
      rescue
      end
      
      # good
      def some_method
        do_something
      rescue
        handle_exception
      end
      
      # good
      begin
        do_something
      rescue
        handle_exception
      end

      Example: AllowComments: true (default)

      # good
      def some_method
        do_something
      rescue
        # do nothing
      end
      
      # good
      begin
        do_something
      rescue
        # do nothing
      end

      Example: AllowComments: false

      # bad
      def some_method
        do_something
      rescue
        # do nothing
      end
      
      # bad
      begin
        do_something
      rescue
        # do nothing
      end

      Example: AllowNil: true (default)

      # good
      def some_method
        do_something
      rescue
        nil
      end
      
      # good
      begin
        do_something
      rescue
        # do nothing
      end
      
      # good
      do_something rescue nil

      Example: AllowNil: false

      # bad
      def some_method
        do_something
      rescue
        nil
      end
      
      # bad
      begin
        do_something
      rescue
        nil
      end
      
      # bad
      do_something rescue nil

      There are no issues that match your filters.

      Category
      Status