cequel/cequel

View on GitHub
lib/cequel/record/record_set.rb

Summary

Maintainability
D
2 days
Test Coverage

Class RecordSet has 82 methods (exceeds 20 allowed). Consider refactoring.
Open

    class RecordSet < SimpleDelegator
      extend Util::Forwardable
      extend Cequel::Util::HashAccessors
      include Enumerable
      include BulkWrites
Severity: Major
Found in lib/cequel/record/record_set.rb - About 1 day to fix

    Class has too many lines. [449/412]
    Open

        class RecordSet < SimpleDelegator
          extend Util::Forwardable
          extend Cequel::Util::HashAccessors
          include Enumerable
          include BulkWrites
    Severity: Minor
    Found in lib/cequel/record/record_set.rb by rubocop

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

    File record_set.rb has 455 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    module Cequel
      module Record
        #
        # This class represents a subset of records from a particular table. Record
        # sets encapsulate a CQL query, and are constructed using a chained builder
    Severity: Minor
    Found in lib/cequel/record/record_set.rb - About 6 hrs to fix

      Method find_rows_in_single_batch has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
      Open

            def find_rows_in_single_batch(options = {})
              if options.key?(:batch_size)
                fail ArgumentError,
                     "Can't pass :batch_size argument with a limit in the scope"
              else
      Severity: Minor
      Found in lib/cequel/record/record_set.rb - About 25 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

      Method find_rows_in_batches has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
      Open

            def find_rows_in_batches(options = {}, &block)
              return find_rows_in_single_batch(options, &block) if row_limit
              options.assert_valid_keys(:batch_size)
              batch_size = options.fetch(:batch_size, 1000)
              batch_record_set = base_record_set = limit(batch_size)
      Severity: Minor
      Found in lib/cequel/record/record_set.rb - About 25 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

      Line is too long. [81/80]
      Open

                     scoped_secondary_columns.merge(column_name => column.cast(value)))
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Line is too long. [106/80]
      Open

            # @note Filtering can incurr a significant performance overhead or even timeout on a large data-set.
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      When using method_missing, define respond_to_missing?.
      Open

            def method_missing(method, *args, &block)
              target_class.with_scope(self) { super }
            end
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop checks for the presence of method_missing without also defining respond_to_missing? and falling back on super.

      Example:

      #bad
      def method_missing(name, *args)
        # ...
      end
      
      #good
      def respond_to_missing?(name, include_private)
        # ...
      end
      
      def method_missing(name, *args)
        # ...
        super
      end

      Align .reject with .columns on line 927.
      Open

                  .reject { |column| column.collection_column? }
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop checks the indentation of the method name part in method calls that span more than one line.

      Example: EnforcedStyle: aligned

      # bad
      while myvariable
      .b
        # do something
      end
      
      # good
      while myvariable
            .b
        # do something
      end
      
      # good
      Thing.a
           .b
           .c

      Example: EnforcedStyle: indented

      # good
      while myvariable
        .b
      
        # do something
      end

      Example: EnforcedStyle: indentedrelativeto_receiver

      # good
      while myvariable
              .a
              .b
      
        # do something
      end
      
      # good
      myvariable = Thing
                     .a
                     .b
                     .c

      Line is too long. [85/80]
      Open

            # Add `ALLOW FILTERING` to select-queries for filtering of none-indexed fields.
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Use alias instead of alias_method in a class body.
      Open

            alias_method :length, :count
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop enforces the use of either #alias or #alias_method depending on configuration. It also flags uses of alias :symbol rather than alias bareword.

      Example: EnforcedStyle: prefer_alias (default)

      # bad
      alias_method :bar, :foo
      alias :bar :foo
      
      # good
      alias bar foo

      Example: EnforcedStyle: preferaliasmethod

      # bad
      alias :bar :foo
      alias bar foo
      
      # good
      alias_method :bar, :foo

      Use alias instead of alias_method in a class body.
      Open

            alias_method :/, :[]
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop enforces the use of either #alias or #alias_method depending on configuration. It also flags uses of alias :symbol rather than alias bareword.

      Example: EnforcedStyle: prefer_alias (default)

      # bad
      alias_method :bar, :foo
      alias :bar :foo
      
      # good
      alias bar foo

      Example: EnforcedStyle: preferaliasmethod

      # bad
      alias :bar :foo
      alias bar foo
      
      # good
      alias_method :bar, :foo

      Use alias instead of alias_method in a class body.
      Open

            alias_method :size, :count
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop enforces the use of either #alias or #alias_method depending on configuration. It also flags uses of alias :symbol rather than alias bareword.

      Example: EnforcedStyle: prefer_alias (default)

      # bad
      alias_method :bar, :foo
      alias :bar :foo
      
      # good
      alias bar foo

      Example: EnforcedStyle: preferaliasmethod

      # bad
      alias :bar :foo
      alias bar foo
      
      # good
      alias_method :bar, :foo

      Unnecessary utf-8 encoding comment.
      Open

      # -*- encoding : utf-8 -*-
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Line is too long. [92/80]
      Open

                fail ArgumentError, "No column #{column_name} configured for #{target_class.name}"
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Line is too long. [103/80]
      Open

                     "Can't scope by more than one indexed column in the same query without allow_filtering!"
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Extra blank line detected.
      Open

      
            hattr_reader :cequel_attributes, :select_columns, :scoped_key_values,
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cops checks for two or more consecutive blank lines.

      Example:

      # bad - It has two empty lines.
      some_method
      # one empty line
      # two empty lines
      some_method
      
      # good
      some_method
      # one empty line
      some_method

      Align .map with .columns on line 927.
      Open

                  .map { |column| column.name }
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop checks the indentation of the method name part in method calls that span more than one line.

      Example: EnforcedStyle: aligned

      # bad
      while myvariable
      .b
        # do something
      end
      
      # good
      while myvariable
            .b
        # do something
      end
      
      # good
      Thing.a
           .b
           .c

      Example: EnforcedStyle: indented

      # good
      while myvariable
        .b
      
        # do something
      end

      Example: EnforcedStyle: indentedrelativeto_receiver

      # good
      while myvariable
              .a
              .b
      
        # do something
      end
      
      # good
      myvariable = Thing
                     .a
                     .b
                     .c

      Use || instead of or.
      Open

              first or fail(RecordNotFound,
      Severity: Minor
      Found in lib/cequel/record/record_set.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

      Avoid using {...} for multi-line blocks.
      Open

                            scoped_key_attributes.map { |k, v|
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Check for uses of braces or do/end around single line or multi-line blocks.

      Example: EnforcedStyle: linecountbased (default)

      # bad - single line block
      items.each do |item| item / 5 end
      
      # good - single line block
      items.each { |item| item / 5 }
      
      # bad - multi-line block
      things.map { |thing|
        something = thing.some_method
        process(something)
      }
      
      # good - multi-line block
      things.map do |thing|
        something = thing.some_method
        process(something)
      end

      Example: EnforcedStyle: semantic

      # Prefer `do...end` over `{...}` for procedural blocks.
      
      # return value is used/assigned
      # bad
      foo = map do |x|
        x
      end
      puts (map do |x|
        x
      end)
      
      # return value is not used out of scope
      # good
      map do |x|
        x
      end
      
      # Prefer `{...}` over `do...end` for functional blocks.
      
      # return value is not used out of scope
      # bad
      each { |x|
        x
      }
      
      # return value is used/assigned
      # good
      foo = map { |x|
        x
      }
      map { |x|
        x
      }.inspect

      Example: EnforcedStyle: bracesforchaining

      # bad
      words.each do |word|
        word.flip.flop
      end.join("-")
      
      # good
      words.each { |word|
        word.flip.flop
      }.join("-")

      Add an empty line after magic comments.
      Open

      module Cequel
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Checks for a newline after the final magic comment.

      Example:

      # good
      # frozen_string_literal: true
      
      # Some documentation for Person
      class Person
        # Some code
      end
      
      # bad
      # frozen_string_literal: true
      # Some documentation for Person
      class Person
        # Some code
      end

      Space inside string interpolation detected.
      Open

                            scoped_key_attributes.map { |k, v|
                              "#{k}: #{v}" }.join(', ')}")
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop checks for whitespace within string interpolations.

      Example: EnforcedStyle: no_space (default)

      # bad
         var = "This is the #{ space } example"
      
      # good
         var = "This is the #{no_space} example"

      Example: EnforcedStyle: space

      # bad
         var = "This is the #{no_space} example"
      
      # good
         var = "This is the #{ space } example"

      Line is too long. [83/80]
      Open

              { scoped_key_values: [], select_columns: [], scoped_secondary_columns: {} }
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Line is too long. [90/80]
      Open

                     "Can't scope by non-indexed column #{column.name} without allow_filtering!"
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Expression at 540, 38 should be on its own line.
      Open

                              "#{k}: #{v}" }.join(', ')}")
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop checks whether the end statement of a do..end block is on its own line.

      Example:

      # bad
      blah do |i|
        foo(i) end
      
      # good
      blah do |i|
        foo(i)
      end
      
      # bad
      blah { |i|
        foo(i) }
      
      # good
      blah { |i|
        foo(i)
      }

      Do not use parallel assignment.
      Open

              @target_class, @cequel_attributes = target_class, attributes
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      Checks for simple usages of parallel assignment. This will only complain when the number of variables being assigned matched the number of assigning variables.

      Example:

      # bad
      a, b, c = 1, 2, 3
      a, b, c = [1, 2, 3]
      
      # good
      one, two = *foo
      a, b = foo()
      a, b = b, a
      
      a = 1
      b = 2
      c = 3

      Provide an exception class and message as arguments to raise.
      Open

              raise Cequel::Record::DangerousQueryError.new
      Severity: Minor
      Found in lib/cequel/record/record_set.rb by rubocop

      This cop checks the args passed to fail and raise. For exploded style (default), it recommends passing the exception class and message to raise, rather than construct an instance of the error. It will still allow passing just a message, or the construction of an error with more than one argument.

      The exploded style works identically, but with the addition that it will also suggest constructing error objects when the exception is passed multiple arguments.

      Example: EnforcedStyle: exploded (default)

      # bad
      raise StandardError.new("message")
      
      # good
      raise StandardError, "message"
      fail "message"
      raise MyCustomError.new(arg1, arg2, arg3)
      raise MyKwArgError.new(key1: val1, key2: val2)

      Example: EnforcedStyle: compact

      # bad
      raise StandardError, "message"
      raise RuntimeError, arg1, arg2, arg3
      
      # good
      raise StandardError.new("message")
      raise MyCustomError.new(arg1, arg2, arg3)
      fail "message"

      There are no issues that match your filters.

      Category
      Status