reevoo/sapience-rb

View on GitHub
lib/sapience/base.rb

Summary

Maintainability
D
2 days
Test Coverage

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

    def measure_internal(level, index, message, params)
      params.dup
      start     = Time.now
      exception = nil
      begin
Severity: Minor
Found in lib/sapience/base.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.

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

    def log_internal(level, index, message = nil, payload = nil, exception = nil)
      # Exception being logged?
      if exception.nil? && payload.nil? && message.respond_to?(:backtrace) && message.respond_to?(:message)
        exception = message
        message   = nil
Severity: Minor
Found in lib/sapience/base.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.

Method measure_internal has a Cognitive Complexity of 31 (exceeds 5 allowed). Consider refactoring.
Open

    def measure_internal(level, index, message, params)
      params.dup
      start     = Time.now
      exception = nil
      begin
Severity: Minor
Found in lib/sapience/base.rb - About 4 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 log_internal has a Cognitive Complexity of 29 (exceeds 5 allowed). Consider refactoring.
Open

    def log_internal(level, index, message = nil, payload = nil, exception = nil)
      # Exception being logged?
      if exception.nil? && payload.nil? && message.respond_to?(:backtrace) && message.respond_to?(:message)
        exception = message
        message   = nil
Severity: Minor
Found in lib/sapience/base.rb - About 4 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 measure_internal has 64 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    def measure_internal(level, index, message, params)
      params.dup
      start     = Time.now
      exception = nil
      begin
Severity: Major
Found in lib/sapience/base.rb - About 2 hrs to fix

    Class Base has 22 methods (exceeds 20 allowed). Consider refactoring.
    Open

      class Base
        # Class name to be logged
        attr_accessor :name, :filter, :log_hooks
        include Sapience::LogMethods
    
    
    Severity: Minor
    Found in lib/sapience/base.rb - About 2 hrs to fix

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

          def initialize(klass, level = nil, filter = nil, log_hooks = [])
            # Support filtering all messages to this logger using a Regular Expression
            # or Proc
            fail ArgumentError, ":filter must be a Regexp or Proc" unless filter.nil? || filter.is_a?(Regexp) || filter.is_a?(Proc)
      
      
      Severity: Minor
      Found in lib/sapience/base.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.

      Method log_internal has 39 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          def log_internal(level, index, message = nil, payload = nil, exception = nil)
            # Exception being logged?
            if exception.nil? && payload.nil? && message.respond_to?(:backtrace) && message.respond_to?(:message)
              exception = message
              message   = nil
      Severity: Minor
      Found in lib/sapience/base.rb - About 1 hr to fix

        Method initialize has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
        Open

            def initialize(klass, level = nil, filter = nil, log_hooks = [])
              # Support filtering all messages to this logger using a Regular Expression
              # or Proc
              fail ArgumentError, ":filter must be a Regexp or Proc" unless filter.nil? || filter.is_a?(Regexp) || filter.is_a?(Proc)
        
        
        Severity: Minor
        Found in lib/sapience/base.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 log_internal has 5 arguments (exceeds 4 allowed). Consider refactoring.
        Open

            def log_internal(level, index, message = nil, payload = nil, exception = nil)
        Severity: Minor
        Found in lib/sapience/base.rb - About 35 mins to fix

          TODO found
          Open

              # TODO: Move this to logger.rb?
          Severity: Minor
          Found in lib/sapience/base.rb by fixme

          TODO found
          Open

              # TODO: Move this to logger.rb?
          Severity: Minor
          Found in lib/sapience/base.rb by fixme

          Prefer single-quoted strings when you don't need string interpolation or special symbols.
          Open

                fail ArgumentError, ":filter must be a Regexp or Proc" unless filter.nil? || filter.is_a?(Regexp) || filter.is_a?(Proc)
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Checks if uses of quotes match the configured preference.

          Example: EnforcedStyle: single_quotes (default)

          # bad
          "No special symbols"
          "No string interpolation"
          "Just text"
          
          # good
          'No special symbols'
          'No string interpolation'
          'Just text'
          "Wait! What's #{this}!"

          Example: EnforcedStyle: double_quotes

          # bad
          'Just some text'
          'No special chars or interpolation'
          
          # good
          "Just some text"
          "No special chars or interpolation"
          "Every string in #{project} uses double_quotes"

          Line is too long. [83/80]
          Open

              #     Should always be supplied unless the result of the supplied block returns
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Always use raise to signal exceptions.
          Open

                    fail exception
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          This cop checks for uses of fail and raise.

          Example: EnforcedStyle: only_raise (default)

          # The `only_raise` style enforces the sole use of `raise`.
          # bad
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            # handle it
          end
          
          Kernel.fail
          
          # good
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            raise
          rescue Exception
            # handle it
          end
          
          Kernel.raise

          Example: EnforcedStyle: only_fail

          # The `only_fail` style enforces the sole use of `fail`.
          # bad
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            raise
          rescue Exception
            # handle it
          end
          
          Kernel.raise
          
          # good
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            # handle it
          end
          
          Kernel.fail

          Example: EnforcedStyle: semantic

          # The `semantic` style enforces the use of `fail` to signal an
          # exception, then will use `raise` to trigger an offense after
          # it has been rescued.
          # bad
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            # Error thrown
          rescue Exception
            fail
          end
          
          Kernel.fail
          Kernel.raise
          
          # good
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            raise 'Preferably with descriptive message'
          end
          
          explicit_receiver.fail
          explicit_receiver.raise

          Line is too long. [83/80]
          Open

              #    For example if set to :warn, this appender would only log :warn and :fatal
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Add an empty line after magic comments.
          Open

          module Sapience
          Severity: Minor
          Found in lib/sapience/base.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

          Line is too long. [81/80]
          Open

              # Returns the global default level index if the level has not been explicitly
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Prefer single-quoted strings when you don't need string interpolation or special symbols.
          Open

                      params[:duration] || fail("Mandatory block missing when :duration option is not supplied")
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Checks if uses of quotes match the configured preference.

          Example: EnforcedStyle: single_quotes (default)

          # bad
          "No special symbols"
          "No string interpolation"
          "Just text"
          
          # good
          'No special symbols'
          'No string interpolation'
          'Just text'
          "Wait! What's #{this}!"

          Example: EnforcedStyle: double_quotes

          # bad
          'Just some text'
          'No special chars or interpolation'
          
          # good
          "Just some text"
          "No special chars or interpolation"
          "Every string in #{project} uses double_quotes"

          Line is too long. [100/80]
          Open

                Thread.current[:sapience_payload] = current_payload ? current_payload.merge(payload) : payload
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Line is too long. [81/80]
          Open

              #   Name of the class, module, or other identifier for which the log messages
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Line is too long. [86/80]
          Open

              #    Only allow log entries of this level or higher to be written to this appender
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Line is too long. [83/80]
          Open

              # Returns [Sapience::Formatters::Default] formatter default for this subscriber
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Line is too long. [84/80]
          Open

              #    RegExp: Only include log messages where the class name matches the supplied
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Line is too long. [88/80]
          Open

              #    Sapience.add_appender(:stream, file_name: 'application.log', formatter: :color)
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Prefer single-quoted strings when you don't need string interpolation or special symbols.
          Open

                fail NotImplementedError, "Logging Appender must implement #log(log)"
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Checks if uses of quotes match the configured preference.

          Example: EnforcedStyle: single_quotes (default)

          # bad
          "No special symbols"
          "No string interpolation"
          "Just text"
          
          # good
          'No special symbols'
          'No string interpolation'
          'Just text'
          "Wait! What's #{this}!"

          Example: EnforcedStyle: double_quotes

          # bad
          'Just some text'
          'No special chars or interpolation'
          
          # good
          "Just some text"
          "No special chars or interpolation"
          "Every string in #{project} uses double_quotes"

          Line is too long. [81/80]
          Open

              # Whether the log message should be logged for the current logger or appender
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Prefer single-quoted strings when you don't need string interpolation or special symbols.
          Open

              SELF_PATTERN = File.join("lib", "sapience")
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Checks if uses of quotes match the configured preference.

          Example: EnforcedStyle: single_quotes (default)

          # bad
          "No special symbols"
          "No string interpolation"
          "Just text"
          
          # good
          'No special symbols'
          'No string interpolation'
          'Just text'
          "Wait! What's #{this}!"

          Example: EnforcedStyle: double_quotes

          # bad
          'Just some text'
          'No special chars or interpolation'
          
          # good
          "Just some text"
          "No special chars or interpolation"
          "Every string in #{project} uses double_quotes"

          Missing top-level class documentation comment.
          Open

            class Base
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          This cop checks for missing top-level documentation of classes and modules. Classes with no body are exempt from the check and so are namespace modules - modules that have nothing in their bodies except classes, other modules, or constant definitions.

          The documentation requirement is annulled if the class or module has a "#:nodoc:" comment next to it. Likewise, "#:nodoc: all" does the same for all its children.

          Example:

          # bad
          class Person
            # ...
          end
          
          # good
          # Description/Explanation of Person class
          class Person
            # ...
          end

          Always use raise to signal exceptions.
          Open

                fail NotImplementedError, "Logging Appender must implement #log(log)"
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          This cop checks for uses of fail and raise.

          Example: EnforcedStyle: only_raise (default)

          # The `only_raise` style enforces the sole use of `raise`.
          # bad
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            # handle it
          end
          
          Kernel.fail
          
          # good
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            raise
          rescue Exception
            # handle it
          end
          
          Kernel.raise

          Example: EnforcedStyle: only_fail

          # The `only_fail` style enforces the sole use of `fail`.
          # bad
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            raise
          rescue Exception
            # handle it
          end
          
          Kernel.raise
          
          # good
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            # handle it
          end
          
          Kernel.fail

          Example: EnforcedStyle: semantic

          # The `semantic` style enforces the use of `fail` to signal an
          # exception, then will use `raise` to trigger an offense after
          # it has been rescued.
          # bad
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            # Error thrown
          rescue Exception
            fail
          end
          
          Kernel.fail
          Kernel.raise
          
          # good
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            raise 'Preferably with descriptive message'
          end
          
          explicit_receiver.fail
          explicit_receiver.raise

          Always use raise to signal exceptions.
          Open

                      params[:duration] || fail("Mandatory block missing when :duration option is not supplied")
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          This cop checks for uses of fail and raise.

          Example: EnforcedStyle: only_raise (default)

          # The `only_raise` style enforces the sole use of `raise`.
          # bad
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            # handle it
          end
          
          Kernel.fail
          
          # good
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            raise
          rescue Exception
            # handle it
          end
          
          Kernel.raise

          Example: EnforcedStyle: only_fail

          # The `only_fail` style enforces the sole use of `fail`.
          # bad
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            raise
          rescue Exception
            # handle it
          end
          
          Kernel.raise
          
          # good
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            # handle it
          end
          
          Kernel.fail

          Example: EnforcedStyle: semantic

          # The `semantic` style enforces the use of `fail` to signal an
          # exception, then will use `raise` to trigger an offense after
          # it has been rescued.
          # bad
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            # Error thrown
          rescue Exception
            fail
          end
          
          Kernel.fail
          Kernel.raise
          
          # good
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            raise 'Preferably with descriptive message'
          end
          
          explicit_receiver.fail
          explicit_receiver.raise

          Always use raise to signal exceptions.
          Open

                fail ArgumentError, ":filter must be a Regexp or Proc" unless filter.nil? || filter.is_a?(Regexp) || filter.is_a?(Proc)
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          This cop checks for uses of fail and raise.

          Example: EnforcedStyle: only_raise (default)

          # The `only_raise` style enforces the sole use of `raise`.
          # bad
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            # handle it
          end
          
          Kernel.fail
          
          # good
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            raise
          rescue Exception
            # handle it
          end
          
          Kernel.raise

          Example: EnforcedStyle: only_fail

          # The `only_fail` style enforces the sole use of `fail`.
          # bad
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            raise
          rescue Exception
            # handle it
          end
          
          Kernel.raise
          
          # good
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            # handle it
          end
          
          Kernel.fail

          Example: EnforcedStyle: semantic

          # The `semantic` style enforces the use of `fail` to signal an
          # exception, then will use `raise` to trigger an offense after
          # it has been rescued.
          # bad
          begin
            raise
          rescue Exception
            # handle it
          end
          
          def watch_out
            # Error thrown
          rescue Exception
            fail
          end
          
          Kernel.fail
          Kernel.raise
          
          # good
          begin
            fail
          rescue Exception
            # handle it
          end
          
          def watch_out
            fail
          rescue Exception
            raise 'Preferably with descriptive message'
          end
          
          explicit_receiver.fail
          explicit_receiver.raise

          Line is too long. [81/80]
          Open

              # Note: This level is only for this particular instance. It does not override
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Prefer single-quoted strings when you don't need string interpolation or special symbols.
          Open

              SELF_PATTERN = File.join("lib", "sapience")
          Severity: Minor
          Found in lib/sapience/base.rb by rubocop

          Checks if uses of quotes match the configured preference.

          Example: EnforcedStyle: single_quotes (default)

          # bad
          "No special symbols"
          "No string interpolation"
          "Just text"
          
          # good
          'No special symbols'
          'No string interpolation'
          'Just text'
          "Wait! What's #{this}!"

          Example: EnforcedStyle: double_quotes

          # bad
          'Just some text'
          'No special chars or interpolation'
          
          # good
          "Just some text"
          "No special chars or interpolation"
          "Every string in #{project} uses double_quotes"

          There are no issues that match your filters.

          Category
          Status