reactrb/reactive-record

View on GitHub
lib/reactive_record/active_record/reactive_record/base.rb

Summary

Maintainability
F
4 days
Test Coverage

Possible command injection
Open

        `console.error(#{message})`

Injection is #1 on the 2010 OWASP Top Ten web security risks. Command injection occurs when shell commands unsafely include user-manipulatable values.

There are many ways to run commands in Ruby:

`ls #{params[:file]}`

system("ls #{params[:dir]}")

exec("md5sum #{params[:input]}")

Brakeman will warn on any method like these that uses user input or unsafely interpolates variables.

See the Ruby Security Guide for details.

Class has too many lines. [355/250]
Open

  class Base

    # Its all about lazy loading. This prevents us from grabbing enormous association collections, or large attributes
    # unless they are explicitly requested.

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

Method reactive_set! has a Cognitive Complexity of 55 (exceeds 5 allowed). Consider refactoring.
Open

    def reactive_set!(attribute, value)
      @virgin = false unless data_loading?
      unless @destroyed or (!(attributes[attribute].is_a? DummyValue) and attributes.has_key?(attribute) and attributes[attribute] == value)
        if association = @model.reflect_on_association(attribute)
          if association.collection?
Severity: Minor
Found in lib/reactive_record/active_record/reactive_record/base.rb - About 1 day 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 apply_method has a Cognitive Complexity of 37 (exceeds 5 allowed). Consider refactoring.
Open

    def apply_method(method)
      # Fills in the value returned by sending "method" to the corresponding server side db instance
      if on_opal_server? and changed?
        log("Warning fetching virtual attributes (#{model.name}.#{method}) during prerendering on a changed or new model is not implemented.", :warning)
        # to implement this we would have to sync up any changes during prererendering with a set the cached models (see server_data_cache)
Severity: Minor
Found in lib/reactive_record/active_record/reactive_record/base.rb - About 5 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

File base.rb has 358 lines of code (exceeds 250 allowed). Consider refactoring.
Open

module ReactiveRecord
  class Base

    # Its all about lazy loading. This prevents us from grabbing enormous association collections, or large attributes
    # unless they are explicitly requested.
Severity: Minor
Found in lib/reactive_record/active_record/reactive_record/base.rb - About 4 hrs to fix

    Cyclomatic complexity for apply_method is too high. [28/6]
    Open

        def apply_method(method)
          # Fills in the value returned by sending "method" to the corresponding server side db instance
          if on_opal_server? and changed?
            log("Warning fetching virtual attributes (#{model.name}.#{method}) during prerendering on a changed or new model is not implemented.", :warning)
            # to implement this we would have to sync up any changes during prererendering with a set the cached models (see server_data_cache)

    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.

    Class Base has 33 methods (exceeds 20 allowed). Consider refactoring.
    Open

      class Base
    
        # Its all about lazy loading. This prevents us from grabbing enormous association collections, or large attributes
        # unless they are explicitly requested.
    
    
    Severity: Minor
    Found in lib/reactive_record/active_record/reactive_record/base.rb - About 4 hrs to fix

      Method update_attribute has a Cognitive Complexity of 28 (exceeds 5 allowed). Consider refactoring.
      Open

          def update_attribute(attribute, *args)
            value = args[0]
            if args.count != 0 and data_loading?
              if (aggregation = model.reflect_on_aggregation(attribute)) and !(aggregation.klass < ActiveRecord::Base)
                @synced_attributes[attribute] = aggregation.deserialize(aggregation.serialize(value))
      Severity: Minor
      Found in lib/reactive_record/active_record/reactive_record/base.rb - About 4 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

      Cyclomatic complexity for update_attribute is too high. [26/6]
      Open

          def update_attribute(attribute, *args)
            value = args[0]
            if args.count != 0 and data_loading?
              if (aggregation = model.reflect_on_aggregation(attribute)) and !(aggregation.klass < ActiveRecord::Base)
                @synced_attributes[attribute] = aggregation.deserialize(aggregation.serialize(value))

      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.

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

          def reactive_set!(attribute, value)
            @virgin = false unless data_loading?
            unless @destroyed or (!(attributes[attribute].is_a? DummyValue) and attributes.has_key?(attribute) and attributes[attribute] == value)
              if association = @model.reflect_on_association(attribute)
                if association.collection?

      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.

      Cyclomatic complexity for reactive_set! is too high. [22/6]
      Open

          def reactive_set!(attribute, value)
            @virgin = false unless data_loading?
            unless @destroyed or (!(attributes[attribute].is_a? DummyValue) and attributes.has_key?(attribute) and attributes[attribute] == value)
              if association = @model.reflect_on_association(attribute)
                if association.collection?

      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.

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

          def update_attribute(attribute, *args)
            value = args[0]
            if args.count != 0 and data_loading?
              if (aggregation = model.reflect_on_aggregation(attribute)) and !(aggregation.klass < ActiveRecord::Base)
                @synced_attributes[attribute] = aggregation.deserialize(aggregation.serialize(value))

      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.

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

          def apply_method(method)
            # Fills in the value returned by sending "method" to the corresponding server side db instance
            if on_opal_server? and changed?
              log("Warning fetching virtual attributes (#{model.name}.#{method}) during prerendering on a changed or new model is not implemented.", :warning)
              # to implement this we would have to sync up any changes during prererendering with a set the cached models (see server_data_cache)

      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.

      Method reactive_get! has a Cognitive Complexity of 16 (exceeds 5 allowed). Consider refactoring.
      Open

          def reactive_get!(attribute, reload = nil)
            @virgin = false unless data_loading?
            unless @destroyed
              if @attributes.has_key? attribute
                attributes[attribute].notify if @attributes[attribute].is_a? DummyValue
      Severity: Minor
      Found in lib/reactive_record/active_record/reactive_record/base.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

      Method find_association has a Cognitive Complexity of 16 (exceeds 5 allowed). Consider refactoring.
      Open

          def find_association(association, id)
            inverse_of = association.inverse_of
            instance = if id
              find(association.klass, association.klass.primary_key, id)
            else
      Severity: Minor
      Found in lib/reactive_record/active_record/reactive_record/base.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

      Cyclomatic complexity for find_association is too high. [8/6]
      Open

          def find_association(association, id)
            inverse_of = association.inverse_of
            instance = if id
              find(association.klass, association.klass.primary_key, id)
            else

      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.

      Method reactive_set! has 46 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          def reactive_set!(attribute, value)
            @virgin = false unless data_loading?
            unless @destroyed or (!(attributes[attribute].is_a? DummyValue) and attributes.has_key?(attribute) and attributes[attribute] == value)
              if association = @model.reflect_on_association(attribute)
                if association.collection?
      Severity: Minor
      Found in lib/reactive_record/active_record/reactive_record/base.rb - About 1 hr to fix

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

            def reactive_get!(attribute, reload = nil)
              @virgin = false unless data_loading?
              unless @destroyed
                if @attributes.has_key? attribute
                  attributes[attribute].notify if @attributes[attribute].is_a? DummyValue

        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.

        Method update_attribute has 41 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

            def update_attribute(attribute, *args)
              value = args[0]
              if args.count != 0 and data_loading?
                if (aggregation = model.reflect_on_aggregation(attribute)) and !(aggregation.klass < ActiveRecord::Base)
                  @synced_attributes[attribute] = aggregation.deserialize(aggregation.serialize(value))
        Severity: Minor
        Found in lib/reactive_record/active_record/reactive_record/base.rb - About 1 hr to fix

          Method apply_method has 35 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              def apply_method(method)
                # Fills in the value returned by sending "method" to the corresponding server side db instance
                if on_opal_server? and changed?
                  log("Warning fetching virtual attributes (#{model.name}.#{method}) during prerendering on a changed or new model is not implemented.", :warning)
                  # to implement this we would have to sync up any changes during prererendering with a set the cached models (see server_data_cache)
          Severity: Minor
          Found in lib/reactive_record/active_record/reactive_record/base.rb - About 1 hr to fix

            Method find has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
            Open

                def self.find(model, attribute, value)
                  # will return the unique record with this attribute-value pair
                  # value cannot be an association or aggregation
            
                  model = model.base_class
            Severity: Minor
            Found in lib/reactive_record/active_record/reactive_record/base.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

            Avoid deeply nested control flow statements.
            Open

                          if value.nil?
                            attributes[attribute].attributes[inverse_of].delete(@ar_instance) unless attributes[attribute].nil?
                          elsif value.attributes[inverse_of]
                            value.attributes[inverse_of] << @ar_instance
                          else
            Severity: Major
            Found in lib/reactive_record/active_record/reactive_record/base.rb - About 45 mins to fix

              Avoid deeply nested control flow statements.
              Open

                          elsif !value.nil?
                            attributes[attribute].attributes[inverse_of] = nil unless attributes[attribute].nil?
                            value.attributes[inverse_of] = @ar_instance
                            React::State.set_state(value.backing_record, inverse_of, @ar_instance) unless data_loading?
                          elsif attributes[attribute]
              Severity: Major
              Found in lib/reactive_record/active_record/reactive_record/base.rb - About 45 mins to fix

                Method sync_scopes has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
                Open

                    def sync_scopes
                      self.class.sync_blocks[self.model].each do |watching_class, scopes|
                        scopes.each do |scope_name, blocks|
                          blocks.each do |block|
                            if block.arity > 0
                Severity: Minor
                Found in lib/reactive_record/active_record/reactive_record/base.rb - About 35 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

                Avoid more than 4 levels of block nesting.
                Open

                              if value.nil?
                                attributes[attribute].attributes[inverse_of].delete(@ar_instance) unless attributes[attribute].nil?
                              elsif value.attributes[inverse_of]
                                value.attributes[inverse_of] << @ar_instance
                              else

                This cop checks for excessive nesting of conditional and looping constructs.

                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                The maximum level of nesting allowed is configurable.

                Avoid more than 4 levels of block nesting.
                Open

                              attributes[attribute].attributes[inverse_of] = nil unless attributes[attribute].nil?

                This cop checks for excessive nesting of conditional and looping constructs.

                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                The maximum level of nesting allowed is configurable.

                Avoid more than 4 levels of block nesting.
                Open

                              React::State.set_state(value.backing_record, inverse_of, @ar_instance) unless data_loading?

                This cop checks for excessive nesting of conditional and looping constructs.

                You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

                The maximum level of nesting allowed is configurable.

                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                Open

                        if association = @model.reflect_on_association(attribute)

                This cop checks for assignments in the conditions of if/while/until.

                Example:

                # bad
                
                if some_var = true
                  do_something
                end

                Example:

                # good
                
                if some_var == true
                  do_something
                end

                Shadowing outer local variable - hash.
                Open

                      @sync_blocks ||= Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = [] } } }

                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                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

                Shadowing outer local variable - record.
                Open

                      record = @records[model].detect { |record| record.vector == vector }

                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                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

                Unused method argument - block. If it's necessary, use _ or _block as an argument name to indicate that it won't be used. You can also write as load_data(*) if you want the method to accept any arguments but don't care about them.
                Open

                    def self.load_data(&block)

                This cop checks for unused method arguments.

                Example:

                # bad
                
                def some_method(used, unused, _unused_but_allowed)
                  puts used
                end

                Example:

                # good
                
                def some_method(used, _unused, _unused_but_allowed)
                  puts used
                end

                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                Open

                        if attribute != model.primary_key and id = find_in_db(model, attribute, value)

                This cop checks for assignments in the conditions of if/while/until.

                Example:

                # bad
                
                if some_var = true
                  do_something
                end

                Example:

                # good
                
                if some_var == true
                  do_something
                end

                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                Open

                        new_value = if association = @model.reflect_on_association(method)

                This cop checks for assignments in the conditions of if/while/until.

                Example:

                # bad
                
                if some_var = true
                  do_something
                end

                Example:

                # good
                
                if some_var == true
                  do_something
                end

                end at 279, 6 is not aligned with if at 269, 16.
                Open

                      end

                This cop checks whether the end keywords are aligned properly.

                Three modes are supported through the EnforcedStyleAlignWith configuration parameter:

                If it's set to keyword (which is the default), the end shall be aligned with the start of the keyword (if, class, etc.).

                If it's set to variable the end shall be aligned with the left-hand-side of the variable assignment, if there is one.

                If it's set to start_of_line, the end shall be aligned with the start of the line where the matching keyword appears.

                Example: EnforcedStyleAlignWith: keyword (default)

                # bad
                
                variable = if true
                    end
                
                # good
                
                variable = if true
                           end

                Example: EnforcedStyleAlignWith: variable

                # bad
                
                variable = if true
                    end
                
                # good
                
                variable = if true
                end

                Example: EnforcedStyleAlignWith: startofline

                # bad
                
                variable = if true
                    end
                
                # good
                
                puts(if true
                end)

                Shadowing outer local variable - record.
                Open

                      record = @records[model].detect { |record| record.attributes[attribute] == value}

                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                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

                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                Open

                        elsif aggregation = @model.reflect_on_aggregation(method) and (aggregation.klass < ActiveRecord::Base)

                This cop checks for assignments in the conditions of if/while/until.

                Example:

                # bad
                
                if some_var = true
                  do_something
                end

                Example:

                # good
                
                if some_var == true
                  do_something
                end

                Shadowing outer local variable - hash.
                Open

                      @sync_blocks ||= Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = [] } } }

                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                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

                Unused method argument - hash. If it's necessary, use _ or _hash as an argument name to indicate that it won't be used.
                Open

                    def initialize(model, hash = {}, ar_instance = nil)

                This cop checks for unused method arguments.

                Example:

                # bad
                
                def some_method(used, unused, _unused_but_allowed)
                  puts used
                end

                Example:

                # good
                
                def some_method(used, _unused, _unused_but_allowed)
                  puts used
                end

                Shadowing outer local variable - key.
                Open

                      @sync_blocks ||= Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = [] } } }

                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                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

                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                Open

                        elsif aggregation = @model.reflect_on_aggregation(attribute) and (aggregation.klass < ActiveRecord::Base)

                This cop checks for assignments in the conditions of if/while/until.

                Example:

                # bad
                
                if some_var = true
                  do_something
                end

                Example:

                # good
                
                if some_var == true
                  do_something
                end

                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                Open

                      elsif aggregation = model.reflect_on_aggregation(attribute) and (aggregation.klass < ActiveRecord::Base)

                This cop checks for assignments in the conditions of if/while/until.

                Example:

                # bad
                
                if some_var = true
                  do_something
                end

                Example:

                # good
                
                if some_var == true
                  do_something
                end

                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                Open

                      elsif aggregation = @model.reflect_on_aggregation(method) and (aggregation.klass < ActiveRecord::Base)

                This cop checks for assignments in the conditions of if/while/until.

                Example:

                # bad
                
                if some_var = true
                  do_something
                end

                Example:

                # good
                
                if some_var == true
                  do_something
                end

                end at 390, 6 is not aligned with if at 386, 17.
                Open

                      end

                This cop checks whether the end keywords are aligned properly.

                Three modes are supported through the EnforcedStyleAlignWith configuration parameter:

                If it's set to keyword (which is the default), the end shall be aligned with the start of the keyword (if, class, etc.).

                If it's set to variable the end shall be aligned with the left-hand-side of the variable assignment, if there is one.

                If it's set to start_of_line, the end shall be aligned with the start of the line where the matching keyword appears.

                Example: EnforcedStyleAlignWith: keyword (default)

                # bad
                
                variable = if true
                    end
                
                # good
                
                variable = if true
                           end

                Example: EnforcedStyleAlignWith: variable

                # bad
                
                variable = if true
                    end
                
                # good
                
                variable = if true
                end

                Example: EnforcedStyleAlignWith: startofline

                # bad
                
                variable = if true
                    end
                
                # good
                
                puts(if true
                end)

                Unused block argument - v2. If it's necessary, use _ or _v2 as an argument name to indicate that it won't be used.
                Open

                        existing_record.attributes.merge!(attributes) { |key, v1, v2| v1 }

                This cop checks for unused block arguments.

                Example:

                # bad
                
                do_something do |used, unused|
                  puts used
                end
                
                do_something do |bar|
                  puts :foo
                end
                
                define_method(:foo) do |bar|
                  puts :baz
                end

                Example:

                #good
                
                do_something do |used, _unused|
                  puts used
                end
                
                do_something do
                  puts :foo
                end
                
                define_method(:foo) do |_bar|
                  puts :baz
                end

                Variable value used in void context.
                Open

                      value

                This cop checks for operators, variables and literals used in void context.

                Example:

                # bad
                
                def some_method
                  some_num * 10
                  do_something
                end

                Example:

                # bad
                
                def some_method(some_var)
                  some_var
                  do_something
                end

                Example:

                # good
                
                def some_method
                  do_something
                  some_num * 10
                end

                Example:

                # good
                
                def some_method(some_var)
                  do_something
                  some_var
                end

                end at 398, 8 is not aligned with if at 394, 57.
                Open

                        end unless instance_backing_record_attributes[inverse_of]

                This cop checks whether the end keywords are aligned properly.

                Three modes are supported through the EnforcedStyleAlignWith configuration parameter:

                If it's set to keyword (which is the default), the end shall be aligned with the start of the keyword (if, class, etc.).

                If it's set to variable the end shall be aligned with the left-hand-side of the variable assignment, if there is one.

                If it's set to start_of_line, the end shall be aligned with the start of the line where the matching keyword appears.

                Example: EnforcedStyleAlignWith: keyword (default)

                # bad
                
                variable = if true
                    end
                
                # good
                
                variable = if true
                           end

                Example: EnforcedStyleAlignWith: variable

                # bad
                
                variable = if true
                    end
                
                # good
                
                variable = if true
                end

                Example: EnforcedStyleAlignWith: startofline

                # bad
                
                variable = if true
                    end
                
                # good
                
                puts(if true
                end)

                end at 427, 8 is not aligned with if at 415, 20.
                Open

                        end

                This cop checks whether the end keywords are aligned properly.

                Three modes are supported through the EnforcedStyleAlignWith configuration parameter:

                If it's set to keyword (which is the default), the end shall be aligned with the start of the keyword (if, class, etc.).

                If it's set to variable the end shall be aligned with the left-hand-side of the variable assignment, if there is one.

                If it's set to start_of_line, the end shall be aligned with the start of the line where the matching keyword appears.

                Example: EnforcedStyleAlignWith: keyword (default)

                # bad
                
                variable = if true
                    end
                
                # good
                
                variable = if true
                           end

                Example: EnforcedStyleAlignWith: variable

                # bad
                
                variable = if true
                    end
                
                # good
                
                variable = if true
                end

                Example: EnforcedStyleAlignWith: startofline

                # bad
                
                variable = if true
                    end
                
                # good
                
                puts(if true
                end)

                Ambiguous block operator. Parenthesize the method arguments if it's surely a block operator, or add a whitespace to the right of the & if it should be a binary AND.
                Open

                            elsif @ar_instance.instance_eval &block

                This cop checks for ambiguous operators in the first argument of a method invocation without parentheses.

                Example:

                # bad
                
                # The `*` is interpreted as a splat operator but it could possibly be
                # a `*` method invocation (i.e. `do_something.*(some_array)`).
                do_something *some_array

                Example:

                # good
                
                # With parentheses, there's no ambiguity.
                do_something(*some_array)

                Shadowing outer local variable - record.
                Open

                          record = @records[model].detect { |record| record.id == id}

                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                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

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

                      rescue Exception => e
                        message = "Could not subclass #{@model_klass.model_name} as #{type}.  Perhaps #{type} class has not been required. Exception: #{e}"
                        `console.error(#{message})`

                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

                Unused block argument - key. If it's necessary, use _ or _key as an argument name to indicate that it won't be used.
                Open

                        existing_record.attributes.merge!(attributes) { |key, v1, v2| v1 }

                This cop checks for unused block arguments.

                Example:

                # bad
                
                do_something do |used, unused|
                  puts used
                end
                
                do_something do |bar|
                  puts :foo
                end
                
                define_method(:foo) do |bar|
                  puts :baz
                end

                Example:

                #good
                
                do_something do |used, _unused|
                  puts used
                end
                
                do_something do
                  puts :foo
                end
                
                define_method(:foo) do |_bar|
                  puts :baz
                end

                Use == if you meant to do a comparison or wrap the expression in parentheses to indicate you meant to assign in a condition.
                Open

                      elsif association = @model.reflect_on_association(method) and association.collection?

                This cop checks for assignments in the conditions of if/while/until.

                Example:

                # bad
                
                if some_var = true
                  do_something
                end

                Example:

                # good
                
                if some_var == true
                  do_something
                end

                Shadowing outer local variable - key.
                Open

                      @sync_blocks ||= Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = [] } } }

                This cop looks for use of the same name as outer local variables for block arguments or block local variables. This is a mimic of the warning "shadowing outer local variable - foo" from ruby -cw.

                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

                Unused block argument - attribute. If it's necessary, use _ or _attribute as an argument name to indicate that it won't be used.
                Open

                      @synced_attributes.each { |attribute, value| sync_attribute(key, value) }

                This cop checks for unused block arguments.

                Example:

                # bad
                
                do_something do |used, unused|
                  puts used
                end
                
                do_something do |bar|
                  puts :foo
                end
                
                define_method(:foo) do |bar|
                  puts :baz
                end

                Example:

                #good
                
                do_something do |used, _unused|
                  puts used
                end
                
                do_something do
                  puts :foo
                end
                
                define_method(:foo) do |_bar|
                  puts :baz
                end

                There are no issues that match your filters.

                Category
                Status