app/queries/top_hits.rb

Summary

Maintainability
A
3 hrs
Test Coverage
A
100%

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.

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

      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

      max expects at least 2 positional arguments, got 0.
      Open

              json.max do
                # https://www.elastic.co/guide/en/elasticsearch/reference/2.0/breaking_20_scripting_changes.html#_scripting_syntax
                json.script do
                  json.source '_score'
                  json.lang 'painless'
      Severity: Minor
      Found in app/queries/top_hits.rb by rubocop

      Checks for a block that is known to need more positional block arguments than are given (by default this is configured for Enumerable methods needing 2 arguments). Optional arguments are allowed, although they don't generally make sense as the default value will be used. Blocks that have no receiver, or take splatted arguments (ie. *args) are always accepted.

      Keyword arguments (including **kwargs) do not get counted towards this, as they are not used by the methods in question.

      Method names and their expected arity can be configured like this:

      Methods:
        inject: 2
        reduce: 2

      Safety:

      This cop matches for method names only and hence cannot tell apart methods with same name in different classes, which may lead to a false positive.

      Example:

      # bad
      values.reduce {}
      values.min { |a| a }
      values.sort { |a; b| a + b }
      
      # good
      values.reduce { |memo, obj| memo << obj }
      values.min { |a, b| a <=> b }
      values.sort { |*x| x[0] <=> x[1] }

      There are no issues that match your filters.

      Category
      Status