Showing 215 of 217 total issues

File document_search_spec.rb has 942 lines of code (exceeds 250 allowed). Consider refactoring.
Open

require 'rails_helper'

describe DocumentSearch do
  let(:query) { 'common' }
  let(:handles) { %w[agency_blogs] }
Severity: Major
Found in spec/classes/document_search_spec.rb - About 2 days to fix

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

          resource :documents do
            desc 'Create a document'
            params do
              requires :document_id,
                       allow_blank: false,
    Severity: Minor
    Found in app/controllers/api/v1/documents.rb by rubocop

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

      def build_search_query
        doc_query = self
    
        search.query do
          function_score do
    Severity: Minor
    Found in app/classes/document_query.rb - About 1 day to fix

    Cognitive Complexity

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

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

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

    Further reading

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

        class Documents < Grape::API
          prefix 'api'
          version 'v1'
          default_format :json
          format :json
    Severity: Minor
    Found in app/controllers/api/v1/documents.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.

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

          resource :collections do
            desc 'Create a collection'
            params do
              requires :handle,
                       allow_blank: false,

    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.

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

        class Collections < Grape::API
          prefix 'api'
          version 'v1'
          default_format :json
          format :json

    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.

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

            params do
              optional :title,
                       type: String,
                       allow_blank: false,
                       desc: 'Document title'
    Severity: Minor
    Found in app/controllers/api/v1/documents.rb by rubocop

    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.

    File documents_spec.rb has 391 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    require 'rails_helper'
    require 'uri'
    
    describe Api::V1::Documents do
      let(:id) { 'some really!weird@id.name' }
    Severity: Minor
    Found in spec/requests/api/v1/documents_spec.rb - About 5 hrs to fix

      File collections_spec.rb has 382 lines of code (exceeds 250 allowed). Consider refactoring.
      Open

      require 'rails_helper'
      
      describe Api::V1::Collections do
        let(:valid_session) do
          env_secrets = Rails.application.config_for(:secrets)
      Severity: Minor
      Found in spec/requests/api/v1/collections_spec.rb - About 5 hrs to fix

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

        namespace :i14y do
          desc "Creates templates, indexes, and reader/writer aliases for all i14y models"
          task setup: :environment do
            Dir[Rails.root.join('app', 'templates', '*.rb')].each do |template_generator|
              entity_name = File.basename(template_generator, '.rb')
        Severity: Minor
        Found in lib/tasks/i14y.rake by rubocop

        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.

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

                params do
                  requires :document_id,
                           allow_blank: false,
                           type: String,
                           regexp: { value: %r{^[^/]+$}, message: "cannot contain any of the following characters: ['/']" },
        Severity: Minor
        Found in app/controllers/api/v1/documents.rb by rubocop

        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.

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

                params do
                  requires :handles,
                           allow_blank: false,
                           type: String,
                           desc: 'Restrict results to this comma-separated list of document collections'

        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.

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

        class Documents
          include Templatable
          LIGHT_STEMMERS = {
            de: 'german',
            es: 'spanish',
        Severity: Minor
        Found in app/templates/documents.rb - About 4 hrs to fix

          Method build_search_query has 93 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

            def build_search_query
              doc_query = self
          
              search.query do
                function_score do
          Severity: Major
          Found in app/classes/document_query.rb - About 3 hrs to fix

            File document_query.rb has 319 lines of code (exceeds 250 allowed). Consider refactoring.
            Open

            class DocumentQuery
              include Elasticsearch::DSL
            
              HIGHLIGHT_OPTIONS = {
                pre_tags: ["\ue000"],
            Severity: Minor
            Found in app/classes/document_query.rb - About 3 hrs to fix

              Cyclomatic complexity for build_search_query is too high. [17/7]
              Open

                def build_search_query
                  doc_query = self
              
                  search.query do
                    function_score do
              Severity: Minor
              Found in app/classes/document_query.rb by rubocop

              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. Blocks that are calls to builtin iteration methods (e.g. `ary.map{...}) also add one, others are ignored.

              def each_child_node(*types)               # count begins: 1
                unless block_given?                     # unless: +1
                  return to_enum(__method__, *types)
              
                children.each do |child|                # each{}: +1
                  next unless child.is_a?(Node)         # unless: +1
              
                  yield child if types.empty? ||        # if: +1, ||: +1
                                 types.include?(child.type)
                end
              
                self
              end                                       # total: 6

              Perceived complexity for build_search_query is too high. [18/8]
              Open

                def build_search_query
                  doc_query = self
              
                  search.query do
                    function_score do
              Severity: Minor
              Found in app/classes/document_query.rb by rubocop

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

                def extract_hits(hits)
                  hits.map do |hit|
                    highlight = hit['highlight']
                    source =  deserialized(hit)
                    if highlight.present?

              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 tokenizer(json)
                  json.tokenizer do
                    json.kuromoji do
                      json.type('kuromoji_tokenizer')
                      json.mode('search')
              Severity: Minor
              Found in app/templates/documents.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 body
                  Jbuilder.encode do |json|
                    json.index_patterns("*-#{I14y::APP_NAME}-documents-*")
                    json.settings do
                      json.analysis do
              Severity: Minor
              Found in app/templates/documents.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
              Severity
              Category
              Status
              Source
              Language