goshippo/shippo-ruby-client

View on GitHub
lib/shippo/api/request.rb

Summary

Maintainability
A
2 hrs
Test Coverage

Cyclomatic complexity for execute is too high. [7/6]
Open

      def execute
        raise ArgumentError.new('Response is already defined, create another Request object.') if self.response
        validate!
        begin
          self.response        = shippo_phone_home
Severity: Minor
Found in lib/shippo/api/request.rb by rubocop

This cop 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.

Method execute has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
Open

      def execute
        raise ArgumentError.new('Response is already defined, create another Request object.') if self.response
        validate!
        begin
          self.response        = shippo_phone_home
Severity: Minor
Found in lib/shippo/api/request.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 execute has 27 lines of code (exceeds 25 allowed). Consider refactoring.
Open

      def execute
        raise ArgumentError.new('Response is already defined, create another Request object.') if self.response
        validate!
        begin
          self.response        = shippo_phone_home
Severity: Minor
Found in lib/shippo/api/request.rb - About 1 hr to fix

    Extra empty line detected before the rescue.
    Open

    
            rescue ::RestClient::BadRequest => e
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cops checks if empty lines exist around the bodies of begin sections. This cop doesn't check empty lines at begin body beginning/end and around method definition body. Style/EmptyLinesAroundBeginBody or Style/EmptyLinesAroundMethodBody can be used for this purpose.

    Example:

    # good
    
    begin
      do_something
    rescue
      do_something2
    else
      do_something3
    ensure
      do_something4
    end
    
    # good
    
    def foo
      do_something
    rescue
      do_something2
    end
    
    # bad
    
    begin
      do_something
    
    rescue
    
      do_something2
    
    else
    
      do_something3
    
    ensure
    
      do_something4
    end
    
    # bad
    
    def foo
      do_something
    
    rescue
    
      do_something2
    end

    Extra empty line detected before the rescue.
    Open

    
            rescue ::JSON::JSONError, ::JSON::ParserError => e
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cops checks if empty lines exist around the bodies of begin sections. This cop doesn't check empty lines at begin body beginning/end and around method definition body. Style/EmptyLinesAroundBeginBody or Style/EmptyLinesAroundMethodBody can be used for this purpose.

    Example:

    # good
    
    begin
      do_something
    rescue
      do_something2
    else
      do_something3
    ensure
      do_something4
    end
    
    # good
    
    def foo
      do_something
    rescue
      do_something2
    end
    
    # bad
    
    begin
      do_something
    
    rescue
    
      do_something2
    
    else
    
      do_something3
    
    ensure
    
      do_something4
    end
    
    # bad
    
    def foo
      do_something
    
    rescue
    
      do_something2
    end

    Closing method call brace must be on the line after the last argument when opening brace is on a separate line from the first argument.
    Open

              'API credentials seems to be missing, perhaps you forgot to set Shippo::API.token?') \
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cop checks that the closing brace in a method call is either on the same line as the last method argument, or a new line.

    When using the symmetrical (default) style:

    If a method call's opening brace is on the same line as the first argument of the call, then the closing brace should be on the same line as the last argument of the call.

    If an method call's opening brace is on the line above the first argument of the call, then the closing brace should be on the line below the last argument of the call.

    When using the new_line style:

    The closing brace of a multi-line method call must be on the line after the last argument of the call.

    When using the same_line style:

    The closing brace of a multi-line method call must be on the same line as the last argument of the call.

    Example:

    # symmetrical: bad
      # new_line: good
      # same_line: bad
      foo(a,
        b
      )
    
      # symmetrical: bad
      # new_line: bad
      # same_line: good
      foo(
        a,
        b)
    
      # symmetrical: good
      # new_line: bad
      # same_line: good
      foo(a,
        b)
    
      # symmetrical: good
      # new_line: good
      # same_line: bad
      foo(
        a,
        b
      )

    Omit parentheses for ternary conditions.
    Open

            (method == :get) ? request_url = params_to_url(params, url) : payload = params.to_json
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cop checks for the presence of parentheses around ternary conditions. It is configurable to enforce inclusion or omission of parentheses using EnforcedStyle. Omission is only enforced when removing the parentheses won't cause a different behavior.

    Example: EnforcedStyle: requirenoparentheses (default)

    # bad
    foo = (bar?) ? a : b
    foo = (bar.baz?) ? a : b
    foo = (bar && baz) ? a : b
    
    # good
    foo = bar? ? a : b
    foo = bar.baz? ? a : b
    foo = bar && baz ? a : b

    Example: EnforcedStyle: require_parentheses

    # bad
    foo = bar? ? a : b
    foo = bar.baz? ? a : b
    foo = bar && baz ? a : b
    
    # good
    foo = (bar?) ? a : b
    foo = (bar.baz?) ? a : b
    foo = (bar && baz) ? a : b

    Example: EnforcedStyle: requireparentheseswhen_complex

    # bad
    foo = (bar?) ? a : b
    foo = (bar.baz?) ? a : b
    foo = bar && baz ? a : b
    
    # good
    foo = bar? ? a : b
    foo = bar.baz? ? a : b
    foo = (bar && baz) ? a : b

    Favor a normal unless-statement over a modifier clause in a multiline statement.
    Open

            raise Shippo::Exceptions::AuthenticationError.new(
              'API credentials seems to be missing, perhaps you forgot to set Shippo::API.token?') \
              unless token
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    Checks for uses of if/unless modifiers with multiple-lines bodies.

    Example:

    # bad
    {
      result: 'this should not happen'
    } unless cond
    
    # good
    { result: 'ok' } if cond

    Extra empty line detected before the rescue.
    Open

    
            rescue ::RestClient::Unauthorized => e
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cops checks if empty lines exist around the bodies of begin sections. This cop doesn't check empty lines at begin body beginning/end and around method definition body. Style/EmptyLinesAroundBeginBody or Style/EmptyLinesAroundMethodBody can be used for this purpose.

    Example:

    # good
    
    begin
      do_something
    rescue
      do_something2
    else
      do_something3
    ensure
      do_something4
    end
    
    # good
    
    def foo
      do_something
    rescue
      do_something2
    end
    
    # bad
    
    begin
      do_something
    
    rescue
    
      do_something2
    
    else
    
      do_something3
    
    ensure
    
      do_something4
    end
    
    # bad
    
    def foo
      do_something
    
    rescue
    
      do_something2
    end

    Do not suppress exceptions.
    Open

            rescue nil
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cop checks for rescue blocks with no body.

    Example:

    # bad
    
    def some_method
      do_something
    rescue
      # do nothing
    end

    Example:

    # bad
    
    begin
      do_something
    rescue
      # do nothing
    end

    Example:

    # good
    
    def some_method
      do_something
    rescue
      handle_exception
    end

    Example:

    # good
    
    begin
      do_something
    rescue
      handle_exception
    end

    Rescuing from nil will raise a TypeError instead of catching the actual exception.
    Open

            rescue nil
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    Check for arguments to rescue that will result in a TypeError if an exception is raised.

    Example:

    # bad
    begin
      bar
    rescue nil
      baz
    end
    
    # bad
    def foo
      bar
    rescue 1, 'a', "#{b}", 0.0, [], {}
      baz
    end
    
    # good
    begin
      bar
    rescue
      baz
    end
    
    # good
    def foo
      bar
    rescue NameError
      baz
    end

    Extra empty line detected before the rescue.
    Open

    
            rescue ::RestClient::BadRequest => e
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cops checks if empty lines exist around the bodies of begin sections. This cop doesn't check empty lines at begin body beginning/end and around method definition body. Style/EmptyLinesAroundBeginBody or Style/EmptyLinesAroundMethodBody can be used for this purpose.

    Example:

    # good
    
    begin
      do_something
    rescue
      do_something2
    else
      do_something3
    ensure
      do_something4
    end
    
    # good
    
    def foo
      do_something
    rescue
      do_something2
    end
    
    # bad
    
    begin
      do_something
    
    rescue
    
      do_something2
    
    else
    
      do_something3
    
    ensure
    
      do_something4
    end
    
    # bad
    
    def foo
      do_something
    
    rescue
    
      do_something2
    end

    Extra empty line detected before the rescue.
    Open

    
            rescue ::RestClient::Exception => e
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cops checks if empty lines exist around the bodies of begin sections. This cop doesn't check empty lines at begin body beginning/end and around method definition body. Style/EmptyLinesAroundBeginBody or Style/EmptyLinesAroundMethodBody can be used for this purpose.

    Example:

    # good
    
    begin
      do_something
    rescue
      do_something2
    else
      do_something3
    ensure
      do_something4
    end
    
    # good
    
    def foo
      do_something
    rescue
      do_something2
    end
    
    # bad
    
    begin
      do_something
    
    rescue
    
      do_something2
    
    else
    
      do_something3
    
    ensure
    
      do_something4
    end
    
    # bad
    
    def foo
      do_something
    
    rescue
    
      do_something2
    end

    Closing hash brace must be on the same line as the last hash element when opening brace is on the same line as the first hash element.
    Open

            }
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cop checks that the closing brace in a hash literal is either on the same line as the last hash element, or a new line.

    When using the symmetrical (default) style:

    If a hash's opening brace is on the same line as the first element of the hash, then the closing brace should be on the same line as the last element of the hash.

    If a hash's opening brace is on the line above the first element of the hash, then the closing brace should be on the line below the last element of the hash.

    When using the new_line style:

    The closing brace of a multi-line hash literal must be on the line after the last element of the hash.

    When using the same_line style:

    The closing brace of a multi-line hash literal must be on the same line as the last element of the hash.

    Example: EnforcedStyle: symmetrical (default)

    # bad
      { a: 1,
        b: 2
      }
      # bad
      {
        a: 1,
        b: 2 }
    
      # good
      { a: 1,
        b: 2 }
    
      # good
      {
        a: 1,
        b: 2
      }

    Example: EnforcedStyle: new_line

    # bad
      {
        a: 1,
        b: 2 }
    
      # bad
      { a: 1,
        b: 2 }
    
      # good
      { a: 1,
        b: 2
      }
    
      # good
      {
        a: 1,
        b: 2
      }

    Example: EnforcedStyle: same_line

    # bad
      { a: 1,
        b: 2
      }
    
      # bad
      {
        a: 1,
        b: 2
      }
    
      # good
      {
        a: 1,
        b: 2 }
    
      # good
      { a: 1,
        b: 2 }

    Do not shadow rescued Exceptions.
    Open

            rescue ::RestClient::Unauthorized => e
              raise Shippo::Exceptions::AuthenticationError.new(e.message)
    
            rescue ::RestClient::BadRequest => e
              if e.respond_to?(:response) && e.response.is_a?(RestClient::Response)
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cop checks for a rescued exception that get shadowed by a less specific exception being rescued before a more specific exception is rescued.

    Example:

    # bad
    
    begin
      something
    rescue Exception
      handle_exception
    rescue StandardError
      handle_standard_error
    end
    
    # good
    
    begin
      something
    rescue StandardError
      handle_standard_error
    rescue Exception
      handle_exception
    end
    
    # good, however depending on runtime environment.
    #
    # This is a special case for system call errors.
    # System dependent error code depends on runtime environment.
    # For example, whether `Errno::EAGAIN` and `Errno::EWOULDBLOCK` are
    # the same error code or different error code depends on environment.
    # This good case is for `Errno::EAGAIN` and `Errno::EWOULDBLOCK` with
    # the same error code.
    begin
      something
    rescue Errno::EAGAIN, Errno::EWOULDBLOCK
      handle_standard_error
    end

    Extra empty line detected before the rescue.
    Open

    
            rescue StandardError => e
    Severity: Minor
    Found in lib/shippo/api/request.rb by rubocop

    This cops checks if empty lines exist around the bodies of begin sections. This cop doesn't check empty lines at begin body beginning/end and around method definition body. Style/EmptyLinesAroundBeginBody or Style/EmptyLinesAroundMethodBody can be used for this purpose.

    Example:

    # good
    
    begin
      do_something
    rescue
      do_something2
    else
      do_something3
    ensure
      do_something4
    end
    
    # good
    
    def foo
      do_something
    rescue
      do_something2
    end
    
    # bad
    
    begin
      do_something
    
    rescue
    
      do_something2
    
    else
    
      do_something3
    
    ensure
    
      do_something4
    end
    
    # bad
    
    def foo
      do_something
    
    rescue
    
      do_something2
    end

    There are no issues that match your filters.

    Category
    Status