lib/roo/base.rb

Summary

Maintainability
D
2 days
Test Coverage

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

class Roo::Base
  include Enumerable
  include Roo::Formatters::Base
  include Roo::Formatters::CSV
  include Roo::Formatters::Matrix
Severity: Major
Found in lib/roo/base.rb - About 7 hrs to fix

    File base.rb has 460 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    require "tmpdir"
    require "stringio"
    require "nokogiri"
    require "roo/utils"
    require "roo/formatters/base"
    Severity: Minor
    Found in lib/roo/base.rb - About 7 hrs to fix

      Method row_with has a Cognitive Complexity of 14 (exceeds 5 allowed). Consider refactoring.
      Open

        def row_with(query, return_headers = false)
          line_no = 0
          closest_mismatched_headers = []
          each do |row|
            line_no += 1
      Severity: Minor
      Found in lib/roo/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 file_type_check has 5 arguments (exceeds 4 allowed). Consider refactoring.
      Open

        def file_type_check(filename, exts, name, warning_level, packed = nil)
      Severity: Minor
      Found in lib/roo/base.rb - About 35 mins to fix

        Method info has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
        Open

          def info
            without_changing_default_sheet do
              result = "File: #{File.basename(@filename)}\n"\
                "Number of sheets: #{sheets.size}\n"\
                "Sheets: #{sheets.join(', ')}\n"
        Severity: Minor
        Found in lib/roo/base.rb - About 35 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 process_zipfile_packed has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
        Open

          def process_zipfile_packed(zip, tmpdir, path = "")
            if zip.file.file? path
              # extract and return filename
              File.open(File.join(tmpdir, path), "wb") do |file|
                file.write(zip.read(path))
        Severity: Minor
        Found in lib/roo/base.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 collect_last_row_col_for_sheet has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
        Open

          def collect_last_row_col_for_sheet(sheet)
            first_row = first_column = MAX_ROW_COL
            last_row = last_column = MIN_ROW_COL
            @cell[sheet].each_pair do |key, value|
              next unless value
        Severity: Minor
        Found in lib/roo/base.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

        Missing magic comment # frozen_string_literal: true.
        Open

        require "tmpdir"
        Severity: Minor
        Found in lib/roo/base.rb by rubocop

        This cop is designed to help upgrade to Ruby 3.0. It will add the comment # frozen_string_literal: true to the top of files to enable frozen string literals. Frozen string literals may be default in Ruby 3.0. The comment will be added below a shebang and encoding comment. The frozen string literal comment is only valid in Ruby 2.3+.

        Example: EnforcedStyle: when_needed (default)

        # The `when_needed` style will add the frozen string literal comment
        # to files only when the `TargetRubyVersion` is set to 2.3+.
        # bad
        module Foo
          # ...
        end
        
        # good
        # frozen_string_literal: true
        
        module Foo
          # ...
        end

        Example: EnforcedStyle: always

        # The `always` style will always add the frozen string literal comment
        # to a file, regardless of the Ruby version or if `freeze` or `<<` are
        # called on a string literal.
        # bad
        module Bar
          # ...
        end
        
        # good
        # frozen_string_literal: true
        
        module Bar
          # ...
        end

        Example: EnforcedStyle: never

        # The `never` will enforce that the frozen string literal comment does
        # not exist in a file.
        # bad
        # frozen_string_literal: true
        
        module Baz
          # ...
        end
        
        # good
        module Baz
          # ...
        end

        There are no issues that match your filters.

        Category
        Status