ClusterLabs/hawk

View on GitHub
hawk/app/controllers/reports_controller.rb

Summary

Maintainability
D
1 day
Test Coverage

Class has too many lines. [369/300]
Open

class ReportsController < ApplicationController
  before_action :login_required
  before_action :set_title
  before_action :set_record, only: [:show, :destroy, :download, :cache]
  before_action :set_transition, only: [:display, :detail, :graph, :logs, :diff, :pefile, :status, :cib]

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

File reports_controller.rb has 371 lines of code (exceeds 250 allowed). Consider refactoring.
Open

class ReportsController < ApplicationController
  before_action :login_required
  before_action :set_title
  before_action :set_record, only: [:show, :destroy, :download, :cache]
  before_action :set_transition, only: [:display, :detail, :graph, :logs, :diff, :pefile, :status, :cib]
Severity: Minor
Found in hawk/app/controllers/reports_controller.rb - About 4 hrs to fix

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

    class ReportsController < ApplicationController
      before_action :login_required
      before_action :set_title
      before_action :set_record, only: [:show, :destroy, :download, :cache]
      before_action :set_transition, only: [:display, :detail, :graph, :logs, :diff, :pefile, :status, :cib]
    Severity: Minor
    Found in hawk/app/controllers/reports_controller.rb - About 4 hrs to fix

      Assignment Branch Condition size for window_transition is too high. [32.7/15]
      Open

        def window_transition
          if last_transition > 10
            case
            when current_transition <= (first_transition + 5)
              start = first_transition

      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 generate is too high. [30.56/15]
      Open

        def generate
          errors = []
          params[:report].permit!
          from_time = parse_time params[:report][:from_time], errors
          to_time = parse_time params[:report][:to_time], errors

      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 graph has a Cognitive Complexity of 21 (exceeds 5 allowed). Consider refactoring.
      Open

        def graph
          respond_to do |format|
            format.html do
              render layout: false
            end
      Severity: Minor
      Found in hawk/app/controllers/reports_controller.rb - About 2 hrs 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

      Assignment Branch Condition size for destroy is too high. [24.35/15]
      Open

        def destroy
          @hb_report = HbReport.new @report.name
      
          respond_to do |format|
            begin

      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 graph is too high. [21/15]
      Open

        def graph
          respond_to do |format|
            format.html do
              render layout: false
            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 index is too high. [21.47/15]
      Open

        def index
          if params[:from_time].present? && params[:to_time].present?
            from_time = params[:from_time]
            to_time = params[:to_time]
            @hb_report = HbReport.new make_report_name(from_time, to_time)

      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 diff is too high. [19.75/15]
      Open

        def diff
          tidx = @transition[:index]
          if tidx > 0 && tidx < @transitions.length
            l = @transitions[tidx-1][:path]
            r = @transitions[tidx][:path]

      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 upload is too high. [18.22/15]
      Open

        def upload
          @report = Report::Upload.new params[:report].permit!
      
          respond_to do |format|
            if @report.save

      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

      Cyclomatic complexity for graph is too high. [7/6]
      Open

        def graph
          respond_to do |format|
            format.html do
              render layout: false
            end

      This cop 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.

      Assignment Branch Condition size for set_transition is too high. [15.52/15]
      Open

        def set_transition
          set_transitions
          if params.has_key? :transition
            tidx = params[:transition].to_i
            tidx -= 1 if tidx > 0

      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 set_transitions is too high. [15.3/15]
      Open

        def set_transitions
          session[:history_session_poke] = "poke"
          set_record
          @hb_report = HbReport.new @report.name
          @transitions = Rails.cache.fetch("#{params[:id]}/#{session.id}", expires_in: 2.hours) do

      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 generate has 27 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

        def generate
          errors = []
          params[:report].permit!
          from_time = parse_time params[:report][:from_time], errors
          to_time = parse_time params[:report][:to_time], errors
      Severity: Minor
      Found in hawk/app/controllers/reports_controller.rb - About 1 hr to fix

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

          def set_transition
            set_transitions
            if params.has_key? :transition
              tidx = params[:transition].to_i
              tidx -= 1 if tidx > 0
        Severity: Minor
        Found in hawk/app/controllers/reports_controller.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 generate has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
        Open

          def generate
            errors = []
            params[:report].permit!
            from_time = parse_time params[:report][:from_time], errors
            to_time = parse_time params[:report][:to_time], errors
        Severity: Minor
        Found in hawk/app/controllers/reports_controller.rb - About 45 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

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

              format.xml do
                ok, data = @report.graph(@hb_report, @transition[:path], :xml)
                render xml: data if ok
                render text: { error: data }, status: 500 unless ok
        Severity: Minor
        Found in hawk/app/controllers/reports_controller.rb and 1 other location - About 30 mins to fix
        hawk/app/controllers/reports_controller.rb on lines 186..189

        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 32.

        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

              format.json do
                ok, data = @report.graph(@hb_report, @transition[:path], :json)
                render json: data if ok
                render json: { error: data }, status: 500 unless ok
        Severity: Minor
        Found in hawk/app/controllers/reports_controller.rb and 1 other location - About 30 mins to fix
        hawk/app/controllers/reports_controller.rb on lines 181..184

        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 32.

        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

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

                unless logs_err.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?

        Always use raise to signal exceptions.
        Open

            fail Cib::RecordNotFound.new(_("The report does not exist"), redirect_to: reports_path) if @report.nil?

        This cop checks for uses of fail and raise.

        Example: EnforcedStyle: only_raise (default)

        # The `only_raise` style enforces the sole use of `raise`.
        # bad
        begin
          fail
        rescue Exception
          # handle it
        end
        
        def watch_out
          fail
        rescue Exception
          # handle it
        end
        
        Kernel.fail
        
        # good
        begin
          raise
        rescue Exception
          # handle it
        end
        
        def watch_out
          raise
        rescue Exception
          # handle it
        end
        
        Kernel.raise

        Example: EnforcedStyle: only_fail

        # The `only_fail` style enforces the sole use of `fail`.
        # bad
        begin
          raise
        rescue Exception
          # handle it
        end
        
        def watch_out
          raise
        rescue Exception
          # handle it
        end
        
        Kernel.raise
        
        # good
        begin
          fail
        rescue Exception
          # handle it
        end
        
        def watch_out
          fail
        rescue Exception
          # handle it
        end
        
        Kernel.fail

        Example: EnforcedStyle: semantic

        # The `semantic` style enforces the use of `fail` to signal an
        # exception, then will use `raise` to trigger an offense after
        # it has been rescued.
        # bad
        begin
          raise
        rescue Exception
          # handle it
        end
        
        def watch_out
          # Error thrown
        rescue Exception
          fail
        end
        
        Kernel.fail
        Kernel.raise
        
        # good
        begin
          fail
        rescue Exception
          # handle it
        end
        
        def watch_out
          fail
        rescue Exception
          raise 'Preferably with descriptive message'
        end
        
        explicit_receiver.fail
        explicit_receiver.raise

        Useless assignment to variable - e.
        Open

              rescue Exception => e

        This cop checks for every useless assignment to local variable in every scope. The basic idea for this cop was from the warning of ruby -cw:

        assigned but unused variable - foo

        Currently this cop has advanced logic that detects unreferenced reassignments and properly handles varied cases such as branch, loop, rescue, ensure, etc.

        Example:

        # bad
        
        def some_method
          some_var = 1
          do_something
        end

        Example:

        # good
        
        def some_method
          some_var = 1
          do_something(some_var)
        end

        Avoid rescuing without specifying an error class.
        Open

          rescue => e

        This cop checks for rescuing StandardError. There are two supported styles implicit and explicit. This cop will not register an offense if any error other than StandardError is specified.

        Example: EnforcedStyle: implicit

        # `implicit` will enforce using `rescue` instead of
        # `rescue StandardError`.
        
        # bad
        begin
          foo
        rescue StandardError
          bar
        end
        
        # good
        begin
          foo
        rescue
          bar
        end
        
        # good
        begin
          foo
        rescue OtherError
          bar
        end
        
        # good
        begin
          foo
        rescue StandardError, SecurityError
          bar
        end

        Example: EnforcedStyle: explicit (default)

        # `explicit` will enforce using `rescue StandardError`
        # instead of `rescue`.
        
        # bad
        begin
          foo
        rescue
          bar
        end
        
        # good
        begin
          foo
        rescue StandardError
          bar
        end
        
        # good
        begin
          foo
        rescue OtherError
          bar
        end
        
        # good
        begin
          foo
        rescue StandardError, SecurityError
          bar
        end

        Do not use empty case condition, instead use an if expression.
        Open

              case

        This cop checks for case statements with an empty condition.

        Example:

        # bad:
        case
        when x == 0
          puts 'x is 0'
        when y == 0
          puts 'y is 0'
        else
          puts 'neither is 0'
        end
        
        # good:
        if x == 0
          puts 'x is 0'
        elsif y == 0
          puts 'y is 0'
        else
          puts 'neither is 0'
        end
        
        # good: (the case condition node is not empty)
        case n
        when 0
          puts 'zero'
        when 1
          puts 'one'
        else
          puts 'more'
        end

        Space inside } missing.
        Open

                render json: {cib: cib}

        Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

        Example: EnforcedStyle: space

        # The `space` style enforces that hash literals have
        # surrounding space.
        
        # bad
        h = {a: 1, b: 2}
        
        # good
        h = { a: 1, b: 2 }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that hash literals have
        # no surrounding space.
        
        # bad
        h = { a: 1, b: 2 }
        
        # good
        h = {a: 1, b: 2}

        Example: EnforcedStyle: compact

        # The `compact` style normally requires a space inside
        # hash braces, with the exception that successive left
        # braces or right braces are collapsed together in nested hashes.
        
        # bad
        h = { a: { b: 2 } }
        
        # good
        h = { a: { b: 2 }}

        Avoid rescuing the Exception class. Perhaps you meant to rescue StandardError?
        Open

            rescue Exception => e
              errors << _("must be a valid datetime")
              nil

        This cop checks for rescue blocks targeting the Exception class.

        Example:

        # bad
        
        begin
          do_something
        rescue Exception
          handle_exception
        end

        Example:

        # good
        
        begin
          do_something
        rescue ArgumentError
          handle_exception
        end

        Space inside } missing.
        Open

                  render json: {success: true, message: _("Upload completed.")}

        Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

        Example: EnforcedStyle: space

        # The `space` style enforces that hash literals have
        # surrounding space.
        
        # bad
        h = {a: 1, b: 2}
        
        # good
        h = { a: 1, b: 2 }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that hash literals have
        # no surrounding space.
        
        # bad
        h = { a: 1, b: 2 }
        
        # good
        h = {a: 1, b: 2}

        Example: EnforcedStyle: compact

        # The `compact` style normally requires a space inside
        # hash braces, with the exception that successive left
        # braces or right braces are collapsed together in nested hashes.
        
        # bad
        h = { a: { b: 2 } }
        
        # good
        h = { a: { b: 2 }}

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

            if @report

        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

        Redundant begin block detected.
        Open

            begin

        This cop checks for redundant begin blocks.

        Currently it checks for code like this:

        Example:

        def redundant
          begin
            ala
            bala
          rescue StandardError => e
            something
          end
        end
        
        def preferred
          ala
          bala
        rescue StandardError => e
          something
        end

        Prefer annotated tokens (like %<foo>s</foo>) over unannotated tokens (like %s).
        Open

                  render json: { error: _("Error deleting %s") % @report.id }, status: :unprocessable_entity

        Use a consistent style for named format string tokens.

        Note: unannotated style cop only works for strings which are passed as arguments to those methods: sprintf, format, %. The reason is that unannotated format is very similar to encoded URLs or Date/Time formatting strings.

        Example: EnforcedStyle: annotated (default)

        # bad
        format('%{greeting}', greeting: 'Hello')
        format('%s', 'Hello')
        
        # good
        format('%<greeting>s', greeting: 'Hello')</greeting>

        Example: EnforcedStyle: template

        # bad
        format('%<greeting>s', greeting: 'Hello')
        format('%s', 'Hello')
        
        # good
        format('%{greeting}', greeting: 'Hello')</greeting>

        Example: EnforcedStyle: unannotated

        # bad
        format('%<greeting>s', greeting: 'Hello')
        format('%{greeting}', 'Hello')
        
        # good
        format('%s', 'Hello')</greeting>

        Surrounding space missing for operator -.
        Open

            tr = @transitions[transition.to_i-1]

        Checks that operators have space around them, except for ** which should not have surrounding space.

        Example:

        # bad
        total = 3*4
        "apple"+"juice"
        my_number = 38/4
        a ** b
        
        # good
        total = 3 * 4
        "apple" + "juice"
        my_number = 38 / 4
        a**b

        Prefer double-quoted strings inside interpolations.
        Open

            "hawk-#{f.sub(' ', '_')}-#{t.sub(' ', '_')}"

        This cop checks that quotes inside the string interpolation match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        result = "Tests #{success ? "PASS" : "FAIL"}"
        
        # good
        result = "Tests #{success ? 'PASS' : 'FAIL'}"

        Example: EnforcedStyle: double_quotes

        # bad
        result = "Tests #{success ? 'PASS' : 'FAIL'}"
        
        # good
        result = "Tests #{success ? "PASS" : "FAIL"}"

        Prefer double-quoted strings inside interpolations.
        Open

            "hawk-#{f.sub(' ', '_')}-#{t.sub(' ', '_')}"

        This cop checks that quotes inside the string interpolation match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        result = "Tests #{success ? "PASS" : "FAIL"}"
        
        # good
        result = "Tests #{success ? 'PASS' : 'FAIL'}"

        Example: EnforcedStyle: double_quotes

        # bad
        result = "Tests #{success ? 'PASS' : 'FAIL'}"
        
        # good
        result = "Tests #{success ? "PASS" : "FAIL"}"

        Space inside { missing.
        Open

                  render json: {success: true, message: _("Please wait while report is generated...")}

        Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

        Example: EnforcedStyle: space

        # The `space` style enforces that hash literals have
        # surrounding space.
        
        # bad
        h = {a: 1, b: 2}
        
        # good
        h = { a: 1, b: 2 }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that hash literals have
        # no surrounding space.
        
        # bad
        h = { a: 1, b: 2 }
        
        # good
        h = {a: 1, b: 2}

        Example: EnforcedStyle: compact

        # The `compact` style normally requires a space inside
        # hash braces, with the exception that successive left
        # braces or right braces are collapsed together in nested hashes.
        
        # bad
        h = { a: { b: 2 } }
        
        # good
        h = { a: { b: 2 }}

        Space inside { missing.
        Open

                render json: {cib: cib}

        Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

        Example: EnforcedStyle: space

        # The `space` style enforces that hash literals have
        # surrounding space.
        
        # bad
        h = {a: 1, b: 2}
        
        # good
        h = { a: 1, b: 2 }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that hash literals have
        # no surrounding space.
        
        # bad
        h = { a: 1, b: 2 }
        
        # good
        h = {a: 1, b: 2}

        Example: EnforcedStyle: compact

        # The `compact` style normally requires a space inside
        # hash braces, with the exception that successive left
        # braces or right braces are collapsed together in nested hashes.
        
        # bad
        h = { a: { b: 2 } }
        
        # good
        h = { a: { b: 2 }}

        Avoid rescuing without specifying an error class.
        Open

          rescue => e

        This cop checks for rescuing StandardError. There are two supported styles implicit and explicit. This cop will not register an offense if any error other than StandardError is specified.

        Example: EnforcedStyle: implicit

        # `implicit` will enforce using `rescue` instead of
        # `rescue StandardError`.
        
        # bad
        begin
          foo
        rescue StandardError
          bar
        end
        
        # good
        begin
          foo
        rescue
          bar
        end
        
        # good
        begin
          foo
        rescue OtherError
          bar
        end
        
        # good
        begin
          foo
        rescue StandardError, SecurityError
          bar
        end

        Example: EnforcedStyle: explicit (default)

        # `explicit` will enforce using `rescue StandardError`
        # instead of `rescue`.
        
        # bad
        begin
          foo
        rescue
          bar
        end
        
        # good
        begin
          foo
        rescue StandardError
          bar
        end
        
        # good
        begin
          foo
        rescue OtherError
          bar
        end
        
        # good
        begin
          foo
        rescue StandardError, SecurityError
          bar
        end

        Prefer double-quoted strings inside interpolations.
        Open

            "hawk-#{f.sub(' ', '_')}-#{t.sub(' ', '_')}"

        This cop checks that quotes inside the string interpolation match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        result = "Tests #{success ? "PASS" : "FAIL"}"
        
        # good
        result = "Tests #{success ? 'PASS' : 'FAIL'}"

        Example: EnforcedStyle: double_quotes

        # bad
        result = "Tests #{success ? 'PASS' : 'FAIL'}"
        
        # good
        result = "Tests #{success ? "PASS" : "FAIL"}"

        Useless assignment to variable - e.
        Open

            rescue Exception => e

        This cop checks for every useless assignment to local variable in every scope. The basic idea for this cop was from the warning of ruby -cw:

        assigned but unused variable - foo

        Currently this cop has advanced logic that detects unreferenced reassignments and properly handles varied cases such as branch, loop, rescue, ensure, etc.

        Example:

        # bad
        
        def some_method
          some_var = 1
          do_something
        end

        Example:

        # good
        
        def some_method
          some_var = 1
          do_something(some_var)
        end

        Use the new Ruby 1.9 hash syntax.
        Open

                send_data data, :type => "image/svg+xml", :disposition => "inline" if ok

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Use Hash#key? instead of Hash#has_key?.
        Open

            if params.has_key? :transition

        This cop (by default) checks for uses of methods Hash#haskey? and Hash#hasvalue? where it enforces Hash#key? and Hash#value? It is configurable to enforce the inverse, using verbose method names also.

        Example: EnforcedStyle: short (default)

        # bad Hash#haskey? Hash#hasvalue?

        # good Hash#key? Hash#value?

        Example: EnforcedStyle: verbose

        # bad Hash#key? Hash#value?

        # good Hash#haskey? Hash#hasvalue?

        Use empty lines between method definitions.
        Open

          def format_date(t)

        This cop checks whether method definitions are separated by one empty line.

        NumberOfEmptyLines can be and integer (e.g. 1 by default) or an array (e.g. [1, 2]) to specificy a minimum and a maximum of empty lines.

        AllowAdjacentOneLineDefs can be used to configure is adjacent one line methods definitions are an offense

        Example:

        # bad
        def a
        end
        def b
        end

        Example:

        # good
        def a
        end
        
        def b
        end

        Avoid rescuing the Exception class. Perhaps you meant to rescue StandardError?
        Open

              rescue Exception => e
                format.html do
                  flash[:alert] = _("Error deleting %s") % @report.id
                  redirect_to reports_url
                end

        This cop checks for rescue blocks targeting the Exception class.

        Example:

        # bad
        
        begin
          do_something
        rescue Exception
          handle_exception
        end

        Example:

        # good
        
        begin
          do_something
        rescue ArgumentError
          handle_exception
        end

        Prefer annotated tokens (like %<foo>s</foo>) over unannotated tokens (like %s).
        Open

                  flash[:alert] = _("Error deleting %s") % @report.id

        Use a consistent style for named format string tokens.

        Note: unannotated style cop only works for strings which are passed as arguments to those methods: sprintf, format, %. The reason is that unannotated format is very similar to encoded URLs or Date/Time formatting strings.

        Example: EnforcedStyle: annotated (default)

        # bad
        format('%{greeting}', greeting: 'Hello')
        format('%s', 'Hello')
        
        # good
        format('%<greeting>s', greeting: 'Hello')</greeting>

        Example: EnforcedStyle: template

        # bad
        format('%<greeting>s', greeting: 'Hello')
        format('%s', 'Hello')
        
        # good
        format('%{greeting}', greeting: 'Hello')</greeting>

        Example: EnforcedStyle: unannotated

        # bad
        format('%<greeting>s', greeting: 'Hello')
        format('%{greeting}', 'Hello')
        
        # good
        format('%s', 'Hello')</greeting>

        Use the new Ruby 1.9 hash syntax.
        Open

                send_data data, :type => "image/svg+xml", :disposition => "inline" if ok

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Prefer Date or Time over DateTime.
        Open

              DateTime.parse(t).utc.iso8601

        This cop checks for uses of DateTime that should be replaced by Date or Time.

        Example:

        # bad - uses `DateTime` for current time
        DateTime.now
        
        # good - uses `Time` for current time
        Time.now
        
        # bad - uses `DateTime` for modern date
        DateTime.iso8601('2016-06-29')
        
        # good - uses `Date` for modern date
        Date.iso8601('2016-06-29')
        
        # good - uses `DateTime` with start argument for historical date
        DateTime.iso8601('1751-04-23', Date::ENGLAND)

        Prefer double-quoted strings inside interpolations.
        Open

            "hawk-#{f.sub(' ', '_')}-#{t.sub(' ', '_')}"

        This cop checks that quotes inside the string interpolation match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        result = "Tests #{success ? "PASS" : "FAIL"}"
        
        # good
        result = "Tests #{success ? 'PASS' : 'FAIL'}"

        Example: EnforcedStyle: double_quotes

        # bad
        result = "Tests #{success ? 'PASS' : 'FAIL'}"
        
        # good
        result = "Tests #{success ? "PASS" : "FAIL"}"

        Extra blank line detected.
        Open

        
          def format_date(t)

        This cops checks for two or more consecutive blank lines.

        Example:

        # bad - It has two empty lines.
        some_method
        # one empty line
        # two empty lines
        some_method
        
        # good
        some_method
        # one empty line
        some_method

        Surrounding space missing for operator -.
        Open

              l = @transitions[tidx-1][:path]

        Checks that operators have space around them, except for ** which should not have surrounding space.

        Example:

        # bad
        total = 3*4
        "apple"+"juice"
        my_number = 38/4
        a ** b
        
        # good
        total = 3 * 4
        "apple" + "juice"
        my_number = 38 / 4
        a**b

        Prefer Date or Time over DateTime.
        Open

            t = DateTime.parse(t) if t.is_a? String

        This cop checks for uses of DateTime that should be replaced by Date or Time.

        Example:

        # bad - uses `DateTime` for current time
        DateTime.now
        
        # good - uses `Time` for current time
        Time.now
        
        # bad - uses `DateTime` for modern date
        DateTime.iso8601('2016-06-29')
        
        # good - uses `Date` for modern date
        Date.iso8601('2016-06-29')
        
        # good - uses `DateTime` with start argument for historical date
        DateTime.iso8601('1751-04-23', Date::ENGLAND)

        Space inside } missing.
        Open

                  render json: {success: true, message: _("Please wait while report is generated...")}

        Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

        Example: EnforcedStyle: space

        # The `space` style enforces that hash literals have
        # surrounding space.
        
        # bad
        h = {a: 1, b: 2}
        
        # good
        h = { a: 1, b: 2 }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that hash literals have
        # no surrounding space.
        
        # bad
        h = { a: 1, b: 2 }
        
        # good
        h = {a: 1, b: 2}

        Example: EnforcedStyle: compact

        # The `compact` style normally requires a space inside
        # hash braces, with the exception that successive left
        # braces or right braces are collapsed together in nested hashes.
        
        # bad
        h = { a: { b: 2 } }
        
        # good
        h = { a: { b: 2 }}

        Space inside { missing.
        Open

                  render json: {success: true, message: _("Upload completed.")}

        Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

        Example: EnforcedStyle: space

        # The `space` style enforces that hash literals have
        # surrounding space.
        
        # bad
        h = {a: 1, b: 2}
        
        # good
        h = { a: 1, b: 2 }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that hash literals have
        # no surrounding space.
        
        # bad
        h = { a: 1, b: 2 }
        
        # good
        h = {a: 1, b: 2}

        Example: EnforcedStyle: compact

        # The `compact` style normally requires a space inside
        # hash braces, with the exception that successive left
        # braces or right braces are collapsed together in nested hashes.
        
        # bad
        h = { a: { b: 2 } }
        
        # good
        h = { a: { b: 2 }}

        There are no issues that match your filters.

        Category
        Status