ClusterLabs/hawk

View on GitHub
hawk/app/helpers/application_helper.rb

Summary

Maintainability
C
7 hrs
Test Coverage

Module has too many lines. [252/100]
Open

module ApplicationHelper
  def branding_config
    @branding_config ||= begin
      config = YAML.load_file(
        Rails.root.join(

This cop checks if the length a module exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Method has too many lines. [67/30]
Open

  def installed_docs
    [
      {
        title: "SLE HA Administration Guide",
        html: docs_path.join(

This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Assignment Branch Condition size for footer_metadata_items is too high. [27.18/15]
Open

  def footer_metadata_items
    meta_items = [
      [_("Status"), "meta.status", :status, nil],
      [_("Epoch"), "meta.epoch", :epoch, _("Current Configuration Version")],
      [_("Host"), "meta.host", :host, nil],

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Method installed_docs has 67 lines of code (exceeds 25 allowed). Consider refactoring.
Open

  def installed_docs
    [
      {
        title: "SLE HA Administration Guide",
        html: docs_path.join(
Severity: Major
Found in hawk/app/helpers/application_helper.rb - About 2 hrs to fix

    Assignment Branch Condition size for installed_docs is too high. [21.02/15]
    Open

      def installed_docs
        [
          {
            title: "SLE HA Administration Guide",
            html: docs_path.join(

    This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

    File application_helper.rb has 254 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    module ApplicationHelper
      def branding_config
        @branding_config ||= begin
          config = YAML.load_file(
            Rails.root.join(
    Severity: Minor
    Found in hawk/app/helpers/application_helper.rb - About 2 hrs to fix

      Assignment Branch Condition size for current_metatags is too high. [16.03/15]
      Open

        def current_metatags
          [].tap do |output|
            if protect_against_forgery?
              output.push csrf_meta_tags
            end

      This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

      Assignment Branch Condition size for base_docs is too high. [15.03/15]
      Open

        def base_docs
          if Rails.configuration.x.hawk_is_sles
            [
              { icon: "bug", style: "danger", title: _("File a Bug Report"), desc: _("Report a bug or request a feature!"), url: "https://bugzilla.suse.com/enter_bug.cgi?classification=SUSE%20Linux%20Enterprise%20High%20Availability%20Extension" },
              { icon: "newspaper-o", style: "success", title: _("Release Notes"), desc: _("Read the release notes for the SUSE High Availability Extension."), url: "https://www.suse.com/releasenotes/x86_64/SLE-HA/15/" },

      This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

      Method current_metatags has 29 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

        def current_metatags
          [].tap do |output|
            if protect_against_forgery?
              output.push csrf_meta_tags
            end
      Severity: Minor
      Found in hawk/app/helpers/application_helper.rb - About 1 hr to fix

        Use tr instead of gsub.
        Open

              I18n.locale.to_s.gsub("-", "_")

        This cop identifies places where gsub can be replaced by tr or delete.

        Example:

        # bad
        'abc'.gsub('b', 'd')
        'abc'.gsub('a', '')
        'abc'.gsub(/a/, 'd')
        'abc'.gsub!('a', 'd')
        
        # good
        'abc'.gsub(/.*/, 'a')
        'abc'.gsub(/a+/, 'd')
        'abc'.tr('b', 'd')
        'a b c'.delete(' ')

        Similar blocks of code found in 2 locations. Consider refactoring.
        Open

                { icon: "bug", style: "danger", title: _("File a Bug Report"), desc: _("Report a bug or request a feature!"), url: "https://github.com/ClusterLabs/hawk/issues/new" },
                { icon: "newspaper-o", style: "success", title: _("News"), desc: _("Visit the Hawk website for information about the latest release."), url: "http://hawk-ui.github.io/" },
                { icon: "book", style: "success", title: _("Online Documentation"), desc: _("Getting Started using Hawk"), url: "http://hawk-guide.readthedocs.io/en/latest/" },
        Severity: Minor
        Found in hawk/app/helpers/application_helper.rb and 1 other location - About 45 mins to fix
        hawk/app/helpers/application_helper.rb on lines 247..249

        Duplicated Code

        Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

        Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

        When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

        Tuning

        This issue has a mass of 40.

        We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

        The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

        If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

        See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

        Refactorings

        Further Reading

        Similar blocks of code found in 2 locations. Consider refactoring.
        Open

                { icon: "bug", style: "danger", title: _("File a Bug Report"), desc: _("Report a bug or request a feature!"), url: "https://bugzilla.suse.com/enter_bug.cgi?classification=SUSE%20Linux%20Enterprise%20High%20Availability%20Extension" },
                { icon: "newspaper-o", style: "success", title: _("Release Notes"), desc: _("Read the release notes for the SUSE High Availability Extension."), url: "https://www.suse.com/releasenotes/x86_64/SLE-HA/15/" },
                { icon: "book", style: "success", title: _("Online Documentation"), desc: _("Read the most up-to-date documentation at the suse.com website."), url: "https://www.suse.com/documentation/sle-ha-15/" },
        Severity: Minor
        Found in hawk/app/helpers/application_helper.rb and 1 other location - About 45 mins to fix
        hawk/app/helpers/application_helper.rb on lines 253..255

        Duplicated Code

        Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

        Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

        When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

        Tuning

        This issue has a mass of 40.

        We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

        The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

        If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

        See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

        Refactorings

        Further Reading

        Use meaningful heredoc delimiters.
        Open

                EOS

        This cop checks that your heredocs are using meaningful delimiters. By default it disallows END and EO*, and can be configured through blacklisting additional delimiters.

        Example:

        # good
        <<-SQL
          SELECT * FROM foo
        SQL
        
        # bad
        <<-END
          SELECT * FROM foo
        END
        
        # bad
        <<-EOS
          SELECT * FROM foo
        EOS

        Use a guard clause instead of wrapping the code inside a conditional expression.
        Open

            if valid.include? params[:controller].to_sym

        Use a guard clause instead of wrapping the code inside a conditional expression

        Example:

        # bad
        def test
          if something
            work
          end
        end
        
        # good
        def test
          return unless something
          work
        end
        
        # also good
        def test
          work if something
        end
        
        # bad
        if something
          raise 'exception'
        else
          ok
        end
        
        # good
        raise 'exception' if something
        ok

        Favor modifier if usage when having a single-line body. Another good alternative is the usage of control flow &&/||.
        Open

              if protect_against_forgery?

        Checks for if and unless statements that would fit on one line if written as a modifier if/unless. The maximum line length is configured in the Metrics/LineLength cop.

        Example:

        # bad
        if condition
          do_stuff(bar)
        end
        
        unless qux.empty?
          Foo.do_something
        end
        
        # good
        do_stuff(bar) if condition
        Foo.do_something unless qux.empty?

        Avoid comma after the last item of an array.
        Open

                { icon: "book", style: "success", title: _("Online Documentation"), desc: _("Read the most up-to-date documentation at the suse.com website."), url: "https://www.suse.com/documentation/sle-ha-15/" },

        This cop checks for trailing comma in array and hash literals.

        Example: EnforcedStyleForMultiline: consistent_comma

        # bad
        a = [1, 2,]
        
        # good
        a = [
          1, 2,
          3,
        ]
        
        # good
        a = [
          1,
          2,
        ]

        Example: EnforcedStyleForMultiline: comma

        # bad
        a = [1, 2,]
        
        # good
        a = [
          1,
          2,
        ]

        Example: EnforcedStyleForMultiline: no_comma (default)

        # bad
        a = [1, 2,]
        
        # good
        a = [
          1,
          2
        ]

        Space missing to the left of {.
        Open

            hash.map{|key, value|

        Checks that block braces have or don't have a space before the opening brace depending on configuration.

        Example:

        # bad
        foo.map{ |a|
          a.bar.to_s
        }
        
        # good
        foo.map { |a|
          a.bar.to_s
        }

        Use meaningful heredoc delimiters.
        Open

                EOS

        This cop checks that your heredocs are using meaningful delimiters. By default it disallows END and EO*, and can be configured through blacklisting additional delimiters.

        Example:

        # good
        <<-SQL
          SELECT * FROM foo
        SQL
        
        # bad
        <<-END
          SELECT * FROM foo
        END
        
        # bad
        <<-EOS
          SELECT * FROM foo
        EOS

        Space between { and | missing.
        Open

            hash.map{|key, value|

        Checks that block braces have or don't have surrounding space inside them on configuration. For blocks taking parameters, it checks that the left brace has or doesn't have trailing space depending on configuration.

        Example: EnforcedStyle: space (default)

        # The `space` style enforces that block braces have
        # surrounding space.
        
        # bad
        some_array.each {puts e}
        
        # good
        some_array.each { puts e }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that block braces don't
        # have surrounding space.
        
        # bad
        some_array.each { puts e }
        
        # good
        some_array.each {puts e}

        Example: EnforcedStyleForEmptyBraces: no_space (default)

        # The `no_space` EnforcedStyleForEmptyBraces style enforces that
        # block braces don't have a space in between when empty.
        
        # bad
        some_array.each {   }
        some_array.each {  }
        some_array.each { }
        
        # good
        some_array.each {}

        Example: EnforcedStyleForEmptyBraces: space

        # The `space` EnforcedStyleForEmptyBraces style enforces that
        # block braces have at least a spece in between when empty.
        
        # bad
        some_array.each {}
        
        # good
        some_array.each { }
        some_array.each {  }
        some_array.each {   }

        Example: SpaceBeforeBlockParameters: true (default)

        # The SpaceBeforeBlockParameters style set to `true` enforces that
        # there is a space between `{` and `|`. Overrides `EnforcedStyle`
        # if there is a conflict.
        
        # bad
        [1, 2, 3].each {|n| n * 2 }
        
        # good
        [1, 2, 3].each { |n| n * 2 }

        Example: SpaceBeforeBlockParameters: true

        # The SpaceBeforeBlockParameters style set to `false` enforces that
        # there is no space between `{` and `|`. Overrides `EnforcedStyle`
        # if there is a conflict.
        
        # bad
        [1, 2, 3].each { |n| n * 2 }
        
        # good
        [1, 2, 3].each {|n| n * 2 }

        Indent the first parameter one step more than the start of the previous line.
        Open

                id: controller_name,
                class: current_cib.id,
                data: {
                  cib: current_cib.id,
                  epoch: current_cib.epoch,

        This cop checks the indentation of the first parameter in a method call. Parameters after the first one are checked by Style/AlignParameters, not by this cop.

        Example:

        # bad
        some_method(
        first_param,
        second_param)
        
        # good
        some_method(
          first_param,
        second_param)

        Use meaningful heredoc delimiters.
        Open

                EOS

        This cop checks that your heredocs are using meaningful delimiters. By default it disallows END and EO*, and can be configured through blacklisting additional delimiters.

        Example:

        # good
        <<-SQL
          SELECT * FROM foo
        SQL
        
        # bad
        <<-END
          SELECT * FROM foo
        END
        
        # bad
        <<-EOS
          SELECT * FROM foo
        EOS

        Favor modifier if usage when having a single-line body. Another good alternative is the usage of control flow &&/||.
        Open

            if valid.include? params[:controller].to_sym

        Checks for if and unless statements that would fit on one line if written as a modifier if/unless. The maximum line length is configured in the Metrics/LineLength cop.

        Example:

        # bad
        if condition
          do_stuff(bar)
        end
        
        unless qux.empty?
          Foo.do_something
        end
        
        # good
        do_stuff(bar) if condition
        Foo.do_something unless qux.empty?

        Use 2 spaces for indentation in a heredoc by using some library(e.g. ActiveSupport's String#strip_heredoc).
        Open

                  Guides you through the setup of a very basic two-node cluster,
        using the bootstrap scripts provided by the ha-cluster-bootstrap package.
        This includes the configuration of a virtual IP address as a cluster resource
        and the user of SBD on shared storage as a fencing mechanism.
                EOS

        This cops checks the indentation of the here document bodies. The bodies are indented one step. In Ruby 2.3 or newer, squiggly heredocs (<<~) should be used. If you use the older rubies, you should introduce some library to your project (e.g. ActiveSupport, Powerpack or Unindent). Note: When Metrics/LineLength's AllowHeredoc is false(not default), this cop does not add any offenses for long here documents to avoid Metrics/LineLength's offenses.

        Example:

        # bad
        <<-RUBY
        something
        RUBY
        
        # good
        # When EnforcedStyle is squiggly, bad code is auto-corrected to the
        # following code.
        <<~RUBY
          something
        RUBY
        
        # good
        # When EnforcedStyle is active_support, bad code is auto-corrected to
        # the following code.
        <<-RUBY.strip_heredoc
          something
        RUBY

        Avoid using {...} for multi-line blocks.
        Open

            hash.map{|key, value|

        Check for uses of braces or do/end around single line or multi-line blocks.

        Example: EnforcedStyle: linecountbased (default)

        # bad - single line block
        items.each do |item| item / 5 end
        
        # good - single line block
        items.each { |item| item / 5 }
        
        # bad - multi-line block
        things.map { |thing|
          something = thing.some_method
          process(something)
        }
        
        # good - multi-line block
        things.map do |thing|
          something = thing.some_method
          process(something)
        end

        Example: EnforcedStyle: semantic

        # Prefer `do...end` over `{...}` for procedural blocks.
        
        # return value is used/assigned
        # bad
        foo = map do |x|
          x
        end
        puts (map do |x|
          x
        end)
        
        # return value is not used out of scope
        # good
        map do |x|
          x
        end
        
        # Prefer `{...}` over `do...end` for functional blocks.
        
        # return value is not used out of scope
        # bad
        each { |x|
          x
        }
        
        # return value is used/assigned
        # good
        foo = map { |x|
          x
        }
        map { |x|
          x
        }.inspect

        Example: EnforcedStyle: bracesforchaining

        # bad
        words.each do |word|
          word.flip.flop
        end.join("-")
        
        # good
        words.each { |word|
          word.flip.flop
        }.join("-")

        Avoid comma after the last item of an array.
        Open

                { icon: "book", style: "success", title: _("Online Documentation"), desc: _("Getting Started using Hawk"), url: "http://hawk-guide.readthedocs.io/en/latest/" },

        This cop checks for trailing comma in array and hash literals.

        Example: EnforcedStyleForMultiline: consistent_comma

        # bad
        a = [1, 2,]
        
        # good
        a = [
          1, 2,
          3,
        ]
        
        # good
        a = [
          1,
          2,
        ]

        Example: EnforcedStyleForMultiline: comma

        # bad
        a = [1, 2,]
        
        # good
        a = [
          1,
          2,
        ]

        Example: EnforcedStyleForMultiline: no_comma (default)

        # bad
        a = [1, 2,]
        
        # good
        a = [
          1,
          2
        ]

        Use meaningful heredoc delimiters.
        Open

                EOS

        This cop checks that your heredocs are using meaningful delimiters. By default it disallows END and EO*, and can be configured through blacklisting additional delimiters.

        Example:

        # good
        <<-SQL
          SELECT * FROM foo
        SQL
        
        # bad
        <<-END
          SELECT * FROM foo
        END
        
        # bad
        <<-EOS
          SELECT * FROM foo
        EOS

        Favor modifier unless usage when having a single-line body. Another good alternative is the usage of control flow &&/||.
        Open

                unless @title.empty?

        Checks for if and unless statements that would fit on one line if written as a modifier if/unless. The maximum line length is configured in the Metrics/LineLength cop.

        Example:

        # bad
        if condition
          do_stuff(bar)
        end
        
        unless qux.empty?
          Foo.do_something
        end
        
        # good
        do_stuff(bar) if condition
        Foo.do_something unless qux.empty?

        There are no issues that match your filters.

        Category
        Status