Showing 99 of 99 total issues

Class has too many lines. [228/100]
Open

class TopHits
  DEFAULT_PRE_TAG = '<strong>'
  DEFAULT_POST_TAG = '</strong>'
  TEXT_FIELDS = %w[title description caption].freeze

Severity: Minor
Found in app/queries/top_hits.rb by rubocop

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

You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

Example: CountAsOne: ['array', 'heredoc', 'method_call']

class Foo
  ARRAY = [         # +1
    1,
    2
  ]

  HASH = {          # +3
    key: 'value'
  }

  MSG = <<~HEREDOC  # +1
    Heredoc
    content.
  HEREDOC

  foo(              # +1
    1,
    2
  )
end                 # 6 points

NOTE: This cop also applies for Struct definitions.

File flickr_photos_importer_spec.rb has 316 lines of code (exceeds 250 allowed). Consider refactoring.
Open

require 'rails_helper'

describe FlickrPhotosImporter do
  it { is_expected.to be_retryable true }
  it { is_expected.to be_unique }
Severity: Minor
Found in spec/workers/flickr_photos_importer_spec.rb - About 3 hrs to fix

    Class TopHits has 27 methods (exceeds 20 allowed). Consider refactoring.
    Open

    class TopHits
      DEFAULT_PRE_TAG = '<strong>'
      DEFAULT_POST_TAG = '</strong>'
      TEXT_FIELDS = %w[title description caption].freeze
    
    
    Severity: Minor
    Found in app/queries/top_hits.rb - About 3 hrs to fix

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

        def perform(id, profile_type, days_ago = nil)
          page = 1
          pages = 1
          min_ts = days_ago.present? ? days_ago.days.ago.to_i : 0
          oldest_retrieved_ts = Time.now.to_i

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def top_hits(json)
          json.aggs do
            json.top_image_hits do
              json.top_hits do
                json.size 1
      Severity: Minor
      Found in app/queries/top_hits.rb by rubocop

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def filtered_query(json)
          json.query do
            json.function_score do
              json.functions do
                popularity_boost(json)
      Severity: Minor
      Found in app/queries/top_hits.rb by rubocop

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def recency_decay(json)
          json.child! do
            json.filter do
              json.range do
                json.taken_at do
      Severity: Minor
      Found in app/queries/top_hits.rb by rubocop

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def aggregations(json)
          json.aggregations do
            json.scores_histogram do
              json.histogram do
                json.script do
      Severity: Minor
      Found in app/queries/album_detection.rb by rubocop

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def store_photo(flickr_photo_structure, group_id)
          attributes = get_attributes(flickr_photo_structure, group_id)
          FlickrPhoto.create(attributes, op_type: 'create')
        rescue Elasticsearch::Transport::Transport::Errors::Conflict
          script = {

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def term_filter_child(json, filter_field)
          filter_value = @photo.send(filter_field)
          return if filter_value.blank?
      
          json.child! do
      Severity: Minor
      Found in app/queries/album_detection.rb by rubocop

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def self.detect_albums!(photo)
          photo_klass = photo.class
          photo_source = photo_klass.name.split(/(?=[A-Z])/).first
          album_detector_klass = "#{photo_source}AlbumDetector".constantize
          assign_default_album(photo)
      Severity: Minor
      Found in app/models/album_detector.rb by rubocop

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def search
          image_search_results = execute_client_search
          ensure_no_suggestion_when_results_present(image_search_results)
          if image_search_results.total.zero? && image_search_results.suggestion.present?
            suggestion = image_search_results.suggestion
      Severity: Minor
      Found in app/models/image_search.rb by rubocop

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

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods and IgnoredMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      def m
        array = [       # +1
          1,
          2
        ]
      
        hash = {        # +3
          key: 'value'
        }
      
        <<~HEREDOC      # +1
          Heredoc
          content.
        HEREDOC
      
        foo(            # +1
          1,
          2
        )
      end               # 6 points

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

        def perform(id, profile_type, days_ago = nil)
          page = 1
          pages = 1
          min_ts = days_ago.present? ? days_ago.days.ago.to_i : 0
          oldest_retrieved_ts = Time.now.to_i
      Severity: Minor
      Found in app/workers/flickr_photos_importer.rb - About 55 mins to fix

      Cognitive Complexity

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

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

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

      Further reading

      Block has too many lines. [31/25]
      Open

      namespace :deploy do
        desc 'Updates shared/config/*.yml files with the proper ones for environment'
        task :upload_shared_config_files do
          config_files = {}
      
      

      Checks if the length of a block exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable. The cop can be configured to ignore blocks passed to certain methods.

      You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

      NOTE: The ExcludedMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

      Example: CountAsOne: ['array', 'heredoc', 'method_call']

      something do
        array = [         # +1
          1,
          2
        ]
      
        hash = {          # +3
          key: 'value'
        }
      
        msg = <<~HEREDOC  # +1
          Heredoc
          content.
        HEREDOC
      
        foo(              # +1
          1,
          2
        )
      end                 # 6 points

      NOTE: This cop does not apply for Struct definitions.

      Method initialize has 6 arguments (exceeds 4 allowed). Consider refactoring.
      Open

        def initialize(query, size, from, flickr_groups, flickr_users, mrss_names)
      Severity: Minor
      Found in app/queries/top_hits.rb - About 45 mins to fix

        Block has too many lines. [28/25]
        Open

          task :upload_shared_config_files do
            config_files = {}
        
            run_locally do
              Dir.chdir('config') do

        Checks if the length of a block exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable. The cop can be configured to ignore blocks passed to certain methods.

        You can set constructs you want to fold with CountAsOne. Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct will be counted as one line regardless of its actual size.

        NOTE: The ExcludedMethods configuration is deprecated and only kept for backwards compatibility. Please use AllowedMethods and AllowedPatterns instead. By default, there are no methods to allowed.

        Example: CountAsOne: ['array', 'heredoc', 'method_call']

        something do
          array = [         # +1
            1,
            2
          ]
        
          hash = {          # +3
            key: 'value'
          }
        
          msg = <<~HEREDOC  # +1
            Heredoc
            content.
          HEREDOC
        
          foo(              # +1
            1,
            2
          )
        end                 # 6 points

        NOTE: This cop does not apply for Struct definitions.

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

          def search
            image_search_results = execute_client_search
            ensure_no_suggestion_when_results_present(image_search_results)
            if image_search_results.total.zero? && image_search_results.suggestion.present?
              suggestion = image_search_results.suggestion
        Severity: Minor
        Found in app/models/image_search.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 parameter lists longer than 5 parameters. [6/5]
        Open

          def initialize(query, size, from, flickr_groups, flickr_users, mrss_names)
        Severity: Minor
        Found in app/queries/top_hits.rb by rubocop

        Checks for methods with too many parameters.

        The maximum number of parameters is configurable. Keyword arguments can optionally be excluded from the total count, as they add less complexity than positional or optional parameters.

        Any number of arguments for initialize method inside a block of Struct.new and Data.define like this is always allowed:

        Struct.new(:one, :two, :three, :four, :five, keyword_init: true) do
          def initialize(one:, two:, three:, four:, five:)
          end
        end

        This is because checking the number of arguments of the initialize method does not make sense.

        NOTE: Explicit block argument &block is not counted to prevent erroneous change that is avoided by making block argument implicit.

        Example: Max: 3

        # good
        def foo(a, b, c = 1)
        end

        Example: Max: 2

        # bad
        def foo(a, b, c = 1)
        end

        Example: CountKeywordArgs: true (default)

        # counts keyword args towards the maximum
        
        # bad (assuming Max is 3)
        def foo(a, b, c, d: 1)
        end
        
        # good (assuming Max is 3)
        def foo(a, b, c: 1)
        end

        Example: CountKeywordArgs: false

        # don't count keyword args towards the maximum
        
        # good (assuming Max is 3)
        def foo(a, b, c, d: 1)
        end

        This cop also checks for the maximum number of optional parameters. This can be configured using the MaxOptionalParameters config option.

        Example: MaxOptionalParameters: 3 (default)

        # good
        def foo(a = 1, b = 2, c = 3)
        end

        Example: MaxOptionalParameters: 2

        # bad
        def foo(a = 1, b = 2, c = 3)
        end

        The second argument to describe should be the method being tested. '#instance' or '.class'.
        Open

        describe AlbumDetectionPhotoIterator, 'run' do

        Prefer have_received for setting message expectations. Setup AlbumDetector as a spy using allow or instance_spy.
        Open

            expect(AlbumDetector).to(receive(:detect_albums!).exactly(5).times { [] })
        Severity
        Category
        Status
        Source
        Language