lib/flagging.rb

Summary

Maintainability
D
2 days
Test Coverage

Possible SQL injection
Open

        conditions: conditions
Severity: Critical
Found in lib/flagging.rb by brakeman

Injection is #1 on the 2013 OWASP Top Ten web security risks. SQL injection is when a user is able to manipulate a value which is used unsafely inside a SQL query. This can lead to data leaks, data loss, elevation of privilege, and other unpleasant outcomes.

Brakeman focuses on ActiveRecord methods dealing with building SQL statements.

A basic (Rails 2.x) example looks like this:

User.first(:conditions => "username = '#{params[:username]}'")

Brakeman would produce a warning like this:

Possible SQL injection near line 30: User.first(:conditions => ("username = '#{params[:username]}'"))

The safe way to do this query is to use a parameterized query:

User.first(:conditions => ["username = ?", params[:username]])

Brakeman also understands the new Rails 3.x way of doing things (and local variables and concatenation):

username = params[:user][:name].downcase
password = params[:user][:password]

User.first.where("username = '" + username + "' AND password = '" + password + "'")

This results in this kind of warning:

Possible SQL injection near line 37:
User.first.where((((("username = '" + params[:user][:name].downcase) + "' AND password = '") + params[:user][:password]) + "'"))

See the Ruby Security Guide for more information and Rails-SQLi.org for many examples of SQL injection in Rails.

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

module Flagging
  unless included_modules.include? Flagging
    attr_accessor :do_not_moderate
    attr_accessor :pending_version

Severity: Minor
Found in lib/flagging.rb by rubocop

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

Assignment Branch Condition size for revert_to_latest_unflagged_version_or_create_blank_version is too high. [52.41/15]
Open

    def revert_to_latest_unflagged_version_or_create_blank_version
      last_version_number = max_version

      logger.debug('what is last_version_number: ' + last_version_number.to_s)

Severity: Minor
Found in lib/flagging.rb by rubocop

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

    def revert_to_latest_unflagged_version_or_create_blank_version
      last_version_number = max_version

      logger.debug('what is last_version_number: ' + last_version_number.to_s)

Severity: Minor
Found in lib/flagging.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

Method has too many lines. [40/10]
Open

    def revert_to_latest_unflagged_version_or_create_blank_version
      last_version_number = max_version

      logger.debug('what is last_version_number: ' + last_version_number.to_s)

Severity: Minor
Found in lib/flagging.rb by rubocop

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.

Consider simplifying this complex logical expression.
Open

  unless included_modules.include? Flagging
    attr_accessor :do_not_moderate
    attr_accessor :pending_version

    def self.included(klass)
Severity: Critical
Found in lib/flagging.rb - About 5 hrs to fix

    Method has too many lines. [27/10]
    Open

        def find_flagged(basket_id, flagging_type = nil)
          full_version_class_name = base_class.name + '::' + versioned_class_name
    
          conditions = {
            basket_id: basket_id,
    Severity: Minor
    Found in lib/flagging.rb by rubocop

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

        def notify_moderators_immediatelly_if_necessary(options = {})
          if SystemSetting.frequency_of_moderation_email.is_a?(String) && (SystemSetting.frequency_of_moderation_email == 'instant')
            # if histor_url is blank it will be figured out in view
            history_url =
              if !options[:history_url].blank?
    Severity: Minor
    Found in lib/flagging.rb by rubocop

    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 has too many lines. [26/10]
    Open

        def notify_moderators_immediatelly_if_necessary(options = {})
          if SystemSetting.frequency_of_moderation_email.is_a?(String) && (SystemSetting.frequency_of_moderation_email == 'instant')
            # if histor_url is blank it will be figured out in view
            history_url =
              if !options[:history_url].blank?
    Severity: Minor
    Found in lib/flagging.rb by rubocop

    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.

    Perceived complexity for revert_to_latest_unflagged_version_or_create_blank_version is too high. [19/7]
    Open

        def revert_to_latest_unflagged_version_or_create_blank_version
          last_version_number = max_version
    
          logger.debug('what is last_version_number: ' + last_version_number.to_s)
    
    
    Severity: Minor
    Found in lib/flagging.rb by rubocop

    This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

    Example:

    def my_method                   # 1
      if cond                       # 1
        case var                    # 2 (0.8 + 4 * 0.2, rounded)
        when 1 then func_one
        when 2 then func_two
        when 3 then func_three
        when 4..10 then func_other
        end
      else                          # 1
        do_something until a && b   # 2
      end                           # ===
    end                             # 7 complexity points

    Assignment Branch Condition size for find_flagged is too high. [26.12/15]
    Open

        def find_flagged(basket_id, flagging_type = nil)
          full_version_class_name = base_class.name + '::' + versioned_class_name
    
          conditions = {
            basket_id: basket_id,
    Severity: Minor
    Found in lib/flagging.rb by rubocop

    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 revert_to_latest_unflagged_version_or_create_blank_version is too high. [16/6]
    Open

        def revert_to_latest_unflagged_version_or_create_blank_version
          last_version_number = max_version
    
          logger.debug('what is last_version_number: ' + last_version_number.to_s)
    
    
    Severity: Minor
    Found in lib/flagging.rb by rubocop

    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. [19/10]
    Open

        def self.included(klass)
          klass.send :after_save, :do_moderation
    
          # Each version has various statuses. Add conveniant checks for these.
          # We have to add these in this method because we need access to klass
    Severity: Minor
    Found in lib/flagging.rb by rubocop

    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.

    File flagging.rb has 279 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    module Flagging
      unless included_modules.include? Flagging
        attr_accessor :do_not_moderate
        attr_accessor :pending_version
    
    
    Severity: Minor
    Found in lib/flagging.rb - About 2 hrs to fix

      Method has too many lines. [16/10]
      Open

          def latest_unflagged_version_with_condition(&block)
            last_version_number = max_version
      
            last_version = versions.find_by_version(last_version_number)
            last_version_tags_count = last_version.tags.size
      Severity: Minor
      Found in lib/flagging.rb by rubocop

      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 already_at_blank_version? is too high. [18.03/15]
      Open

          def already_at_blank_version?
            title == SystemSetting.blank_title and (description.nil? or (self.class.name == 'Comment' and description == SystemSetting.pending_flag)) and extended_content.nil? and (!can_have_short_summary? or short_summary.nil?)
          end
      Severity: Minor
      Found in lib/flagging.rb by rubocop

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

          def remove_all_flags(version_number)
            version = versions.find_by_version(version_number)
            version.tag_list.remove(SystemSetting.blank_flag)
            version.tag_list.remove(SystemSetting.pending_flag)
            version.tag_list.remove(SystemSetting.reviewed_flag)
      Severity: Minor
      Found in lib/flagging.rb by rubocop

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

          def notify_moderators_immediatelly_if_necessary(options = {})
            if SystemSetting.frequency_of_moderation_email.is_a?(String) && (SystemSetting.frequency_of_moderation_email == 'instant')
              # if histor_url is blank it will be figured out in view
              history_url =
                if !options[:history_url].blank?
      Severity: Minor
      Found in lib/flagging.rb - About 1 hr to fix

      Cognitive Complexity

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

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

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

      Further reading

      Method latest_unflagged_version_with_condition has a Cognitive Complexity of 15 (exceeds 5 allowed). Consider refactoring.
      Open

          def latest_unflagged_version_with_condition(&block)
            last_version_number = max_version
      
            last_version = versions.find_by_version(last_version_number)
            last_version_tags_count = last_version.tags.size
      Severity: Minor
      Found in lib/flagging.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

      Assignment Branch Condition size for latest_unflagged_version_with_condition is too high. [17.23/15]
      Open

          def latest_unflagged_version_with_condition(&block)
            last_version_number = max_version
      
            last_version = versions.find_by_version(last_version_number)
            last_version_tags_count = last_version.tags.size
      Severity: Minor
      Found in lib/flagging.rb by rubocop

      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 already_at_blank_version? is too high. [7/6]
      Open

          def already_at_blank_version?
            title == SystemSetting.blank_title and (description.nil? or (self.class.name == 'Comment' and description == SystemSetting.pending_flag)) and extended_content.nil? and (!can_have_short_summary? or short_summary.nil?)
          end
      Severity: Minor
      Found in lib/flagging.rb by rubocop

      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.

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

          def latest_unflagged_version_with_condition(&block)
            last_version_number = max_version
      
            last_version = versions.find_by_version(last_version_number)
            last_version_tags_count = last_version.tags.size
      Severity: Minor
      Found in lib/flagging.rb by rubocop

      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.

      Perceived complexity for latest_unflagged_version_with_condition is too high. [8/7]
      Open

          def latest_unflagged_version_with_condition(&block)
            last_version_number = max_version
      
            last_version = versions.find_by_version(last_version_number)
            last_version_tags_count = last_version.tags.size
      Severity: Minor
      Found in lib/flagging.rb by rubocop

      This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

      Example:

      def my_method                   # 1
        if cond                       # 1
          case var                    # 2 (0.8 + 4 * 0.2, rounded)
          when 1 then func_one
          when 2 then func_two
          when 3 then func_three
          when 4..10 then func_other
          end
        else                          # 1
          do_something until a && b   # 2
        end                           # ===
      end                             # 7 complexity points

      Method revert_to_latest_unflagged_version_or_create_blank_version has 40 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          def revert_to_latest_unflagged_version_or_create_blank_version
            last_version_number = max_version
      
            logger.debug('what is last_version_number: ' + last_version_number.to_s)
      
      
      Severity: Minor
      Found in lib/flagging.rb - About 1 hr to fix

        Method find_flagged has 27 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

            def find_flagged(basket_id, flagging_type = nil)
              full_version_class_name = base_class.name + '::' + versioned_class_name
        
              conditions = {
                basket_id: basket_id,
        Severity: Minor
        Found in lib/flagging.rb - About 1 hr to fix

          Method notify_moderators_immediatelly_if_necessary has 26 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              def notify_moderators_immediatelly_if_necessary(options = {})
                if SystemSetting.frequency_of_moderation_email.is_a?(String) && (SystemSetting.frequency_of_moderation_email == 'instant')
                  # if histor_url is blank it will be figured out in view
                  history_url =
                    if !options[:history_url].blank?
          Severity: Minor
          Found in lib/flagging.rb - About 1 hr to fix

            Avoid more than 3 levels of block nesting.
            Open

                      break if last_version_number == 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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 3 levels of block nesting.
            Open

                      break if last_version_number == 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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.

            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 latest_unflagged_version_with_condition(*) if you want the method to accept any arguments but don't care about them.
            Open

                def latest_unflagged_version_with_condition(&block)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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

            Redundant else-clause.
            Open

                  else
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            Checks for empty else-clauses, possibly including comments and/or an explicit nil depending on the EnforcedStyle.

            Example: EnforcedStyle: empty

            # warn only on empty else
            
            # bad
            if condition
              statement
            else
            end
            
            # good
            if condition
              statement
            else
              nil
            end
            
            # good
            if condition
              statement
            else
              statement
            end
            
            # good
            if condition
              statement
            end

            Example: EnforcedStyle: nil

            # warn on else with nil in it
            
            # bad
            if condition
              statement
            else
              nil
            end
            
            # good
            if condition
              statement
            else
            end
            
            # good
            if condition
              statement
            else
              statement
            end
            
            # good
            if condition
              statement
            end

            Example: EnforcedStyle: both (default)

            # warn on empty else and else with nil in it
            
            # bad
            if condition
              statement
            else
              nil
            end
            
            # bad
            if condition
              statement
            else
            end
            
            # good
            if condition
              statement
            else
              statement
            end
            
            # good
            if condition
              statement
            end

            Pass __FILE__ and __LINE__ to eval method, as they are used by backtraces.
            Open

                  Module.class_eval("#{klass.name}::Version").class_eval <<-RUBY
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks eval method usage. eval can receive source location metadata, that are filename and line number. The metadata is used by backtraces. This cop recommends to pass the metadata to eval method.

            Example:

            # bad
            eval <<-RUBY
              def do_something
              end
            RUBY
            
            # bad
            C.class_eval <<-RUBY
              def do_something
              end
            RUBY
            
            # good
            eval <<-RUBY, binding, __FILE__, __LINE__ + 1
              def do_something
              end
            RUBY
            
            # good
            C.class_eval <<-RUBY, __FILE__, __LINE__ + 1
              def do_something
              end
            RUBY

            Use || instead of or.
            Open

                  already_at_blank_version? or latest_version_of_this_privacy.tags.size > 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use && instead of and.
            Open

                  title == SystemSetting.blank_title and (description.nil? or (self.class.name == 'Comment' and description == SystemSetting.pending_flag)) and extended_content.nil? and (!can_have_short_summary? or short_summary.nil?)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use && instead of and.
            Open

                  title == SystemSetting.blank_title and (description.nil? or (self.class.name == 'Comment' and description == SystemSetting.pending_flag)) and extended_content.nil? and (!can_have_short_summary? or short_summary.nil?)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use last_version_number.zero? instead of last_version_number == 0.
            Open

                      break if last_version_number == 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

            Use || instead of or.
            Open

                  title == SystemSetting.blank_title and (description.nil? or (self.class.name == 'Comment' and description == SystemSetting.pending_flag)) and extended_content.nil? and (!can_have_short_summary? or short_summary.nil?)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use || instead of or.
            Open

                  already_at_blank_version? or
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use && instead of and.
            Open

                  title == SystemSetting.blank_title and (description.nil? or (self.class.name == 'Comment' and description == SystemSetting.pending_flag)) and extended_content.nil? and (!can_have_short_summary? or short_summary.nil?)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use || instead of or.
            Open

                  title == SystemSetting.blank_title and (description.nil? or (self.class.name == 'Comment' and description == SystemSetting.pending_flag)) and extended_content.nil? and (!can_have_short_summary? or short_summary.nil?)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use && instead of and.
            Open

                    !already_at_blank_version? and
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Pass __FILE__ and __LINE__ to eval method, as they are used by backtraces.
            Open

                  Module.class_eval("#{klass.name}::Version").class_eval <<-RUBY
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks eval method usage. eval can receive source location metadata, that are filename and line number. The metadata is used by backtraces. This cop recommends to pass the metadata to eval method.

            Example:

            # bad
            eval <<-RUBY
              def do_something
              end
            RUBY
            
            # bad
            C.class_eval <<-RUBY
              def do_something
              end
            RUBY
            
            # good
            eval <<-RUBY, binding, __FILE__, __LINE__ + 1
              def do_something
              end
            RUBY
            
            # good
            C.class_eval <<-RUBY, __FILE__, __LINE__ + 1
              def do_something
              end
            RUBY

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

                  if version.tags.include?(Tag.find_by_name(SystemSetting.pending_flag))
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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

            Use && instead of and.
            Open

                    !do_not_moderate? and
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use && instead of and.
            Open

                  title == SystemSetting.blank_title and (description.nil? or (self.class.name == 'Comment' and description == SystemSetting.pending_flag)) and extended_content.nil? and (!can_have_short_summary? or short_summary.nil?)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use || instead of or.
            Open

                  already_at_blank_version? or version != versions.last.version
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use && instead of and.
            Open

                  fully_moderated? and
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Use || instead of or.
            Open

                    latest_version_of_this_privacy.tags.size > 0 or
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

            Example: EnforcedStyle: always (default)

            # bad
            foo.save and return
            
            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            if foo && bar
            end

            Example: EnforcedStyle: conditionals

            # bad
            if foo and bar
            end
            
            # good
            foo.save && return
            
            # good
            foo.save and return
            
            # good
            if foo && bar
            end

            Useless assignment to variable - tag_list.
            Open

                  tag_list = raw_tag_list
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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 a guard clause instead of wrapping the code inside a conditional expression.
            Open

                  if SystemSetting.frequency_of_moderation_email.is_a?(String) && (SystemSetting.frequency_of_moderation_email == 'instant')
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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

            Useless assignment to variable - just_flagged_version.
            Open

                  just_flagged_version = flag_at_with(version, flag, message)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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

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

                  if should_moderate?
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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?

            Favor unless over if for negative conditions.
            Open

                  if !message.blank?
                    tagging = version.taggings.find_by_tag_id(Tag.find_by_name(flag))
                    tagging.message = message
                    tagging.context = 'flags'
                    tagging.save
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            Checks for uses of if with a negated condition. Only ifs without else are considered. There are three different styles:

            - both
            - prefix
            - postfix

            Example: EnforcedStyle: both (default)

            # enforces `unless` for `prefix` and `postfix` conditionals
            
            # bad
            
            if !foo
              bar
            end
            
            # good
            
            unless foo
              bar
            end
            
            # bad
            
            bar if !foo
            
            # good
            
            bar unless foo

            Example: EnforcedStyle: prefix

            # enforces `unless` for just `prefix` conditionals
            
            # bad
            
            if !foo
              bar
            end
            
            # good
            
            unless foo
              bar
            end
            
            # good
            
            bar if !foo

            Example: EnforcedStyle: postfix

            # enforces `unless` for just `postfix` conditionals
            
            # bad
            
            bar if !foo
            
            # good
            
            bar unless foo
            
            # good
            
            if !foo
              bar
            end

            end at 340, 31 is not aligned with if at 331, 10.
            Open

                                           end
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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)

            Use last_version_tags_count.positive? instead of last_version_tags_count > 0.
            Open

                    while last_version_tags_count > 0 || !yield(last_version)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

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

                  if should_moderate?
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            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

            Use last_version_tags_count.positive? instead of last_version_tags_count > 0.
            Open

                    while last_version_tags_count > 0 || (last_version.respond_to?(:private) && last_version.private? != private?)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

            Use last_version_tags_count.zero? instead of last_version_tags_count == 0.
            Open

                  if last_version_tags_count == 0 && (!last_version.respond_to?(:private?) || last_version.private? == private?)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

            Use !empty? instead of size > 0.
            Open

                    if already_moderated_flag_ids.size > 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for numeric comparisons that can be replaced by a predicate method, such as receiver.length == 0, receiver.length > 0, receiver.length != 0, receiver.length < 1 and receiver.size == 0 that can be replaced by receiver.empty? and !receiver.empty.

            Example:

            # bad
            [1, 2, 3].length == 0
            0 == "foobar".length
            array.length < 1
            {a: 1, b: 2}.length != 0
            string.length > 0
            hash.size > 0
            
            # good
            [1, 2, 3].empty?
            "foobar".empty?
            array.empty?
            !{a: 1, b: 2}.empty?
            !string.empty?
            !hash.empty?

            Use latest_version_of_this_privacy.tags.size.positive? instead of latest_version_of_this_privacy.tags.size > 0.
            Open

                    latest_version_of_this_privacy.tags.size > 0 or
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

            %w-literals should be delimited by [ and ].
            Open

                %w{disputed reviewed rejected}.each do |type|
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop enforces the consistent usage of %-literal delimiters.

            Specify the 'default' key to set all preferred delimiters at once. You can continue to specify individual preferred delimiters to override the default.

            Example:

            # Style/PercentLiteralDelimiters:
            #   PreferredDelimiters:
            #     default: '[]'
            #     '%i':    '()'
            
            # good
            %w[alpha beta] + %i(gamma delta)
            
            # bad
            %W(alpha #{beta})
            
            # bad
            %I(alpha beta)

            Use !empty? instead of size > 0.
            Open

                    latest_version_of_this_privacy.tags.size > 0 or
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for numeric comparisons that can be replaced by a predicate method, such as receiver.length == 0, receiver.length > 0, receiver.length != 0, receiver.length < 1 and receiver.size == 0 that can be replaced by receiver.empty? and !receiver.empty.

            Example:

            # bad
            [1, 2, 3].length == 0
            0 == "foobar".length
            array.length < 1
            {a: 1, b: 2}.length != 0
            string.length > 0
            hash.size > 0
            
            # good
            [1, 2, 3].empty?
            "foobar".empty?
            array.empty?
            !{a: 1, b: 2}.empty?
            !string.empty?
            !hash.empty?

            Use already_moderated_flag_ids.size.positive? instead of already_moderated_flag_ids.size > 0.
            Open

                    if already_moderated_flag_ids.size > 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

            Use self-assignment shorthand -=.
            Open

                      last_version_number = last_version_number - 1
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop enforces the use the shorthand for self-assignment.

            Example:

            # bad
            x = x + 1
            
            # good
            x += 1

            Use self-assignment shorthand -=.
            Open

                      last_version_number = last_version_number - 1
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop enforces the use the shorthand for self-assignment.

            Example:

            # bad
            x = x + 1
            
            # good
            x += 1

            Use last_version_number.zero? instead of last_version_number == 0.
            Open

                      break if last_version_number == 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

            Pass &:id as an argument to collect instead of a block.
            Open

                    already_moderated_flag_ids = Tag.find_all_by_name(already_moderated_flags).collect { |f| f.id }
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            Use symbols as procs when possible.

            Example:

            # bad
            something.map { |s| s.upcase }
            
            # good
            something.map(&:upcase)

            Use last_version_tags_count.zero? instead of last_version_tags_count == 0.
            Open

                  if last_version_tags_count == 0 && yield(last_version)
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

            Use latest_version_of_this_privacy.tags.size.positive? instead of latest_version_of_this_privacy.tags.size > 0.
            Open

                  already_at_blank_version? or latest_version_of_this_privacy.tags.size > 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for usage of comparison operators (==, >, <) to test numbers as zero, positive, or negative. These can be replaced by their respective predicate methods. The cop can also be configured to do the reverse.

            The cop disregards #nonzero? as it its value is truthy or falsey, but not true and false, and thus not always interchangeable with != 0.

            The cop ignores comparisons to global variables, since they are often populated with objects which can be compared with integers, but are not themselves Interger polymorphic.

            Example: EnforcedStyle: predicate (default)

            # bad
            
            foo == 0
            0 > foo
            bar.baz > 0
            
            # good
            
            foo.zero?
            foo.negative?
            bar.baz.positive?

            Example: EnforcedStyle: comparison

            # bad
            
            foo.zero?
            foo.negative?
            bar.baz.positive?
            
            # good
            
            foo == 0
            0 > foo
            bar.baz > 0

            Use !empty? instead of size > 0.
            Open

                  already_at_blank_version? or latest_version_of_this_privacy.tags.size > 0
            Severity: Minor
            Found in lib/flagging.rb by rubocop

            This cop checks for numeric comparisons that can be replaced by a predicate method, such as receiver.length == 0, receiver.length > 0, receiver.length != 0, receiver.length < 1 and receiver.size == 0 that can be replaced by receiver.empty? and !receiver.empty.

            Example:

            # bad
            [1, 2, 3].length == 0
            0 == "foobar".length
            array.length < 1
            {a: 1, b: 2}.length != 0
            string.length > 0
            hash.size > 0
            
            # good
            [1, 2, 3].empty?
            "foobar".empty?
            array.empty?
            !{a: 1, b: 2}.empty?
            !string.empty?
            !hash.empty?

            There are no issues that match your filters.

            Category
            Status