murb/workbook

View on GitHub
lib/workbook/readers/xlsx_reader.rb

Summary

Maintainability
B
6 hrs
Test Coverage

Module has too many lines. [164/100]
Open

    module XlsxReader
      include Workbook::Readers::XlsShared

      def load_xlsm file_obj, options = {}
        load_xlsx file_obj, options
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.rb by rubocop

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

You can set literals you want to fold with CountAsOne. Available are: 'array', 'hash', and 'heredoc'. Each literal will be counted as one line regardless of its actual size.

Example: CountAsOne: ['array', 'heredoc']

module M
  ARRAY = [         # +1
    1,
    2
  ]

  HASH = {          # +3
    key: 'value'
  }

  MSG = <<~HEREDOC  # +1
    Heredoc
    content.
  HEREDOC
end                 # 5 points

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

      def load_xlsx file_obj, options = {}
        file_obj = file_obj.path if file_obj.is_a? File
        sheets = {}
        shared_string_file = ""
        styles = ""
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.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.

You can set literals you want to fold with CountAsOne. Available are: 'array', 'hash', and 'heredoc'. Each literal 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 IgnoredMethods instead.

Example: CountAsOne: ['array', 'heredoc']

def m
  array = [       # +1
    1,
    2
  ]

  hash = {        # +3
    key: 'value'
  }

  <<~HEREDOC      # +1
    Heredoc
    content.
  HEREDOC
end               # 5 points

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

      def parse_xlsx_cell cell
        type = cell.attr("t")
        format_index = cell.attr("s").to_i
        position = cell.attr("r")
        formula = cell.css("f").text
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.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.

You can set literals you want to fold with CountAsOne. Available are: 'array', 'hash', and 'heredoc'. Each literal 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 IgnoredMethods instead.

Example: CountAsOne: ['array', 'heredoc']

def m
  array = [       # +1
    1,
    2
  ]

  hash = {        # +3
    key: 'value'
  }

  <<~HEREDOC      # +1
    Heredoc
    content.
  HEREDOC
end               # 5 points

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

      def parse_xlsx_styles(styles)
        styles = Nokogiri::XML(styles)

        fonts = parse_xlsx_fonts(styles)
        backgrounds = extract_xlsx_backgrounds(styles)
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.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.

You can set literals you want to fold with CountAsOne. Available are: 'array', 'hash', and 'heredoc'. Each literal 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 IgnoredMethods instead.

Example: CountAsOne: ['array', 'heredoc']

def m
  array = [       # +1
    1,
    2
  ]

  hash = {        # +3
    key: 'value'
  }

  <<~HEREDOC      # +1
    Heredoc
    content.
  HEREDOC
end               # 5 points

Perceived complexity for parse_xlsx_cell is too high. [16/8]
Open

      def parse_xlsx_cell cell
        type = cell.attr("t")
        format_index = cell.attr("s").to_i
        position = cell.attr("r")
        formula = cell.css("f").text
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.rb by rubocop

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

Cyclomatic complexity for load_xlsx is too high. [13/7]
Open

      def load_xlsx file_obj, options = {}
        file_obj = file_obj.path if file_obj.is_a? File
        sheets = {}
        shared_string_file = ""
        styles = ""
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.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. 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 load_xlsx is too high. [14/8]
Open

      def load_xlsx file_obj, options = {}
        file_obj = file_obj.path if file_obj.is_a? File
        sheets = {}
        shared_string_file = ""
        styles = ""
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.rb by rubocop

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

Cyclomatic complexity for parse_xlsx_cell is too high. [13/7]
Open

      def parse_xlsx_cell cell
        type = cell.attr("t")
        format_index = cell.attr("s").to_i
        position = cell.attr("r")
        formula = cell.css("f").text
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.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. 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

Method parse_xlsx_cell has a Cognitive Complexity of 17 (exceeds 5 allowed). Consider refactoring.
Open

      def parse_xlsx_cell cell
        type = cell.attr("t")
        format_index = cell.attr("s").to_i
        position = cell.attr("r")
        formula = cell.css("f").text
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.rb - About 2 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 load_xlsx has 43 lines of code (exceeds 25 allowed). Consider refactoring.
Open

      def load_xlsx file_obj, options = {}
        file_obj = file_obj.path if file_obj.is_a? File
        sheets = {}
        shared_string_file = ""
        styles = ""
Severity: Minor
Found in lib/workbook/readers/xlsx_reader.rb - About 1 hr to fix

    Method parse_xlsx_cell has 30 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

          def parse_xlsx_cell cell
            type = cell.attr("t")
            format_index = cell.attr("s").to_i
            position = cell.attr("r")
            formula = cell.css("f").text
    Severity: Minor
    Found in lib/workbook/readers/xlsx_reader.rb - About 1 hr to fix

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

            def load_xlsx file_obj, options = {}
              file_obj = file_obj.path if file_obj.is_a? File
              sheets = {}
              shared_string_file = ""
              styles = ""
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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 parse_xlsx_styles has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
      Open

            def parse_xlsx_styles(styles)
              styles = Nokogiri::XML(styles)
      
              fonts = parse_xlsx_fonts(styles)
              backgrounds = extract_xlsx_backgrounds(styles)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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

      Assignment Branch Condition size for parse_xlsx_styles is too high. [<10, 22, 6> 24.9/17]
      Open

            def parse_xlsx_styles(styles)
              styles = Nokogiri::XML(styles)
      
              fonts = parse_xlsx_fonts(styles)
              backgrounds = extract_xlsx_backgrounds(styles)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric and https://en.wikipedia.org/wiki/ABC_Software_Metric.

      Interpreting ABC size:

      • <= 17 satisfactory
      • 18..30 unsatisfactory
      • > 30 dangerous

      You can have repeated "attributes" calls count as a single "branch". For this purpose, attributes are any method with no argument; no attempt is meant to distinguish actual attr_reader from other methods.

      Example: CountRepeatedAttributes: false (default is true)

      # `model` and `current_user`, refenced 3 times each,
       # are each counted as only 1 branch each if
       # `CountRepeatedAttributes` is set to 'false'
      
       def search
         @posts = model.active.visible_by(current_user)
                   .search(params[:q])
         @posts = model.some_process(@posts, current_user)
         @posts = model.another_process(@posts, current_user)
      
         render 'pages/search/page'
       end

      This cop also takes into account IgnoredMethods (defaults to [])

      Assignment Branch Condition size for parse_xlsx_cell is too high. [<16, 24, 22> 36.28/17]
      Open

            def parse_xlsx_cell cell
              type = cell.attr("t")
              format_index = cell.attr("s").to_i
              position = cell.attr("r")
              formula = cell.css("f").text
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric and https://en.wikipedia.org/wiki/ABC_Software_Metric.

      Interpreting ABC size:

      • <= 17 satisfactory
      • 18..30 unsatisfactory
      • > 30 dangerous

      You can have repeated "attributes" calls count as a single "branch". For this purpose, attributes are any method with no argument; no attempt is meant to distinguish actual attr_reader from other methods.

      Example: CountRepeatedAttributes: false (default is true)

      # `model` and `current_user`, refenced 3 times each,
       # are each counted as only 1 branch each if
       # `CountRepeatedAttributes` is set to 'false'
      
       def search
         @posts = model.active.visible_by(current_user)
                   .search(params[:q])
         @posts = model.some_process(@posts, current_user)
         @posts = model.another_process(@posts, current_user)
      
         render 'pages/search/page'
       end

      This cop also takes into account IgnoredMethods (defaults to [])

      Assignment Branch Condition size for load_xlsx is too high. [<26, 51, 13> 58.7/17]
      Open

            def load_xlsx file_obj, options = {}
              file_obj = file_obj.path if file_obj.is_a? File
              sheets = {}
              shared_string_file = ""
              styles = ""
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric and https://en.wikipedia.org/wiki/ABC_Software_Metric.

      Interpreting ABC size:

      • <= 17 satisfactory
      • 18..30 unsatisfactory
      • > 30 dangerous

      You can have repeated "attributes" calls count as a single "branch". For this purpose, attributes are any method with no argument; no attempt is meant to distinguish actual attr_reader from other methods.

      Example: CountRepeatedAttributes: false (default is true)

      # `model` and `current_user`, refenced 3 times each,
       # are each counted as only 1 branch each if
       # `CountRepeatedAttributes` is set to 'false'
      
       def search
         @posts = model.active.visible_by(current_user)
                   .search(params[:q])
         @posts = model.some_process(@posts, current_user)
         @posts = model.another_process(@posts, current_user)
      
         render 'pages/search/page'
       end

      This cop also takes into account IgnoredMethods (defaults to [])

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

                    sheets[file.name.sub(/^xl\//, "")] = zipfile.read(file.name)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                state = sheet.attr("state")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              if (type == "n") || type.nil?
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      end at 88, 10 is not aligned with if at 84, 32.
      Open

                end
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks whether the end keywords are aligned properly.

      Three modes are supported through the EnforcedStyleAlignWith configuration parameter:

      If it's set to keyword (which is the default), the end shall be aligned with the start of the keyword (if, class, etc.).

      If it's set to variable the end shall be aligned with the left-hand-side of the variable assignment, if there is one.

      If it's set to start_of_line, the end shall be aligned with the start of the line where the matching keyword appears.

      This Layout/EndAlignment cop aligns with keywords (e.g. if, while, case) by default. On the other hand, Layout/BeginEndAlignment cop aligns with EnforcedStyleAlignWith: start_of_line by default due to ||= begin tends to align with the start of the line. These style can be configured by each cop.

      Example: EnforcedStyleAlignWith: keyword (default)

      # bad
      
      variable = if true
          end
      
      # good
      
      variable = if true
                 end
      
      variable =
        if true
        end

      Example: EnforcedStyleAlignWith: variable

      # bad
      
      variable = if true
          end
      
      # good
      
      variable = if true
      end
      
      variable =
        if true
        end

      Example: EnforcedStyleAlignWith: startofline

      # bad
      
      variable = if true
          end
      
      puts(if true
           end)
      
      # good
      
      variable = if true
      end
      
      puts(if true
      end)
      
      variable =
        if true
        end

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

                if value.to_s == "0"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Use def with parentheses when there are parameters.
      Open

            def parse_xlsx_fonts styles
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

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

                hash[:font_size] = font.css("sz").first.attr("val").to_i if font.css("name")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              styles.css("numFmts numFmt").each do |fmt|
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              rows = noko_xml.css("sheetData row").collect { |row| parse_xlsx_row(row) }
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                elsif value.to_s == "1"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              elsif type == "s"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Unused method argument - options. If it's necessary, use _ or _options as an argument name to indicate that it won't be used.
      Open

            def load_xlsx file_obj, options = {}
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for unused method arguments.

      Example:

      # bad
      def some_method(used, unused, _unused_but_allowed)
        puts used
      end
      
      # good
      def some_method(used, _unused, _unused_but_allowed)
        puts used
      end

      Example: AllowUnusedKeywordArguments: false (default)

      # bad
      def do_something(used, unused: 42)
        used
      end

      Example: AllowUnusedKeywordArguments: true

      # good
      def do_something(used, unused: 42)
        used
      end

      Example: IgnoreEmptyMethods: true (default)

      # good
      def do_something(unused)
      end

      Example: IgnoreEmptyMethods: false

      # bad
      def do_something(unused)
      end

      Example: IgnoreNotImplementedMethods: true (default)

      # good
      def do_something(unused)
        raise NotImplementedError
      end
      
      def do_something_else(unused)
        fail "TODO"
      end

      Example: IgnoreNotImplementedMethods: false

      # bad
      def do_something(unused)
        raise NotImplementedError
      end
      
      def do_something_else(unused)
        fail "TODO"
      end

      Convert if-elsif to case-when.
      Open

                  if /^xl\/worksheets\/(.*)\.xml$/.match?(file.name)
                    sheets[file.name.sub(/^xl\//, "")] = zipfile.read(file.name)
                  elsif /xl\/sharedStrings.xml$/.match?(file.name)
                    shared_string_file = zipfile.read(file.name)
                  elsif /xl\/workbook.xml$/.match?(file.name)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop identifies places where if-elsif constructions can be replaced with case-when.

      Safety:

      This cop is unsafe. case statements use === for equality, so if the original conditional used a different equality operator, the behaviour may be different.

      Example:

      # bad
      if status == :active
        perform_action
      elsif status == :inactive || status == :hibernating
        check_timeout
      else
        final_action
      end
      
      # good
      case status
      when :active
        perform_action
      when :inactive, :hibernating
        check_timeout
      else
        final_action
      end

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

              Nokogiri::XML(workbook).css("sheets sheet").each do |sheet|
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                name = sheet.attr("name")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                hash[:font_family] = font.css("name").first.attr("val") if font.css("name")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                parsed_format_string = ms_formatting_to_strftime(fmt.attr("formatCode"))
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                pattern_fill = fill.css("patternFill").first
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              format_index = cell.attr("s").to_i
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Use def with parentheses when there are parameters.
      Open

            def parse_xlsx_cell cell
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

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

              columns = noko_xml.css("cols col").collect { |col| parse_xlsx_column(col) }
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              cells_with_pos = row.css("c").collect { |a| parse_xlsx_cell(a) }
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              shared_string_file = ""
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                hash[:background] = pattern_fill.attr("patternType") if pattern_fill
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              Nokogiri::XML(file).css("sst si").collect { |a| a.text }
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Use def with parentheses when there are parameters.
      Open

            def parse_shared_string_file file
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Use next to skip iteration.
      Open

                if state != "hidden"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      Use next to skip iteration instead of a condition at the end.

      Example: EnforcedStyle: skipmodifierifs (default)

      # bad
      [1, 2].each do |a|
        if a == 1
          puts a
        end
      end
      
      # good
      [1, 2].each do |a|
        next unless a == 1
        puts a
      end
      
      # good
      [1, 2].each do |a|
        puts a if a == 1
      end

      Example: EnforcedStyle: always

      # With `always` all conditions at the end of an iteration needs to be
      # replaced by next - with `skip_modifier_ifs` the modifier if like
      # this one are ignored: `[1, 2].each { |a| puts a if a == 1 }`
      
      # bad
      [1, 2].each do |a|
        puts a if a == 1
      end
      
      # bad
      [1, 2].each do |a|
        if a == 1
          puts a
        end
      end
      
      # good
      [1, 2].each do |a|
        next unless a == 1
        puts a
      end

      Use %r around regular expression.
      Open

                  elsif /xl\/styles.xml$/.match?(file.name)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop enforces using // or %r around regular expressions.

      Example: EnforcedStyle: slashes (default)

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = %r{
        foo
        (bar)
        (baz)
      }x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = /
        foo
        (bar)
        (baz)
      /x

      Example: EnforcedStyle: percent_r

      # bad
      snake_case = /^[\dA-Z_]+$/
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = %r{^[\dA-Z_]+$}
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: EnforcedStyle: mixed

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: AllowInnerSlashes: false (default)

      # If `false`, the cop will always recommend using `%r` if one or more
      # slashes are found in the regexp string.
      
      # bad
      x =~ /home\//
      
      # good
      x =~ %r{home/}

      Example: AllowInnerSlashes: true

      # good
      x =~ /home\//

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

              styles = ""
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                filename = relation_file[sheet.attr("r:id")]
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Use 2 (not -20) spaces for indentation.
      Open

                  custom_number_formats[id]
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for indentation that doesn't use the specified number of spaces.

      See also the IndentationConsistency cop which is the companion to this one.

      Example:

      # bad
      class A
       def test
        puts 'hello'
       end
      end
      
      # good
      class A
        def test
          puts 'hello'
        end
      end

      Example: IgnoredPatterns: ['^\s*module']

      # bad
      module A
      class B
        def test
        puts 'hello'
        end
      end
      end
      
      # good
      module A
      class B
        def test
          puts 'hello'
        end
      end
      end

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

              styles.css("cellXfs xf").each do |cellformat|
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                hash[:font_size] = font.css("sz").first.attr("val").to_i if font.css("name")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Use def with parentheses when there are parameters.
      Open

            def parse_xlsx_sheet sheet_xml
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Pass &:text as an argument to collect instead of a block.
      Open

              Nokogiri::XML(file).css("sst si").collect { |a| a.text }
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      Use symbols as procs when possible.

      If you prefer a style that allows block for method with arguments, please set true to AllowMethodsWithArguments.

      Safety:

      This cop is unsafe because procs and blocks work differently when additional arguments are passed in. A block will silently ignore additional arguments, but a proc will raise an ArgumentError.

      For example:

      class Foo
        def bar
          :bar
        end
      end
      
      def call(options = {}, &block)
        block.call(Foo.new, options)
      end
      
      call { |x| x.bar }
      #=> :bar
      call(&:bar)
      # ArgumentError: wrong number of arguments (given 1, expected 0)

      Example:

      # bad
      something.map { |s| s.upcase }
      something.map { _1.upcase }
      
      # good
      something.map(&:upcase)

      Example: AllowMethodsWithArguments: false (default)

      # bad
      something.do_something(foo) { |o| o.bar }
      
      # good
      something.do_something(foo, &:bar)

      Example: AllowMethodsWithArguments: true

      # good
      something.do_something(foo) { |o| o.bar }

      Use %r around regular expression.
      Open

                  elsif /xl\/sharedStrings.xml$/.match?(file.name)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop enforces using // or %r around regular expressions.

      Example: EnforcedStyle: slashes (default)

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = %r{
        foo
        (bar)
        (baz)
      }x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = /
        foo
        (bar)
        (baz)
      /x

      Example: EnforcedStyle: percent_r

      # bad
      snake_case = /^[\dA-Z_]+$/
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = %r{^[\dA-Z_]+$}
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: EnforcedStyle: mixed

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: AllowInnerSlashes: false (default)

      # If `false`, the cop will always recommend using `%r` if one or more
      # slashes are found in the regexp string.
      
      # bad
      x =~ /home\//
      
      # good
      x =~ %r{home/}

      Example: AllowInnerSlashes: true

      # good
      x =~ /home\//

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

      require "workbook/readers/xls_shared"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              workbook_rels = ""
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              styles.css("fonts font").collect do |font|
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              styles.css("fills fill").collect do |fill|
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                format_id = fmt.attr("numFmtId").to_i
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              elsif type == "b"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Use def with parentheses when there are parameters.
      Open

            def load_xlsm file_obj, options = {}
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

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

                hash[:font_family] = font.css("name").first.attr("val") if font.css("name")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Use def with parentheses when there are parameters.
      Open

            def load_xlsx file_obj, options = {}
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

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

              Nokogiri::XML(workbook_rels).css("Relationships Relationship").each do |relship|
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              position = cell.attr("r")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Convert if-elsif to case-when.
      Open

                if value.to_s == "0"
                  value = false
                elsif value.to_s == "1"
                  value = true
                end
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop identifies places where if-elsif constructions can be replaced with case-when.

      Safety:

      This cop is unsafe. case statements use === for equality, so if the original conditional used a different equality operator, the behaviour may be different.

      Example:

      # bad
      if status == :active
        perform_action
      elsif status == :inactive || status == :hibernating
        check_timeout
      else
        final_action
      end
      
      # good
      case status
      when :active
        perform_action
      when :inactive, :hibernating
        check_timeout
      else
        final_action
      end

      Put empty method definitions on a single line.
      Open

            def parse_xlsx
            end
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for the formatting of empty method definitions. By default it enforces empty method definitions to go on a single line (compact style), but it can be configured to enforce the end to go on its own line (expanded style).

      NOTE: A method definition is not considered empty if it contains comments.

      Example: EnforcedStyle: compact (default)

      # bad
      def foo(bar)
      end
      
      def self.foo(bar)
      end
      
      # good
      def foo(bar); end
      
      def foo(bar)
        # baz
      end
      
      def self.foo(bar); end

      Example: EnforcedStyle: expanded

      # bad
      def foo(bar); end
      
      def self.foo(bar); end
      
      # good
      def foo(bar)
      end
      
      def self.foo(bar)
      end

      Missing top-level documentation comment for module Workbook::Readers::XlsxReader.
      Open

          module XlsxReader
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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, constant definitions or constant visibility declarations.

      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
      
      module Math
      end
      
      # good
      # Description/Explanation of Person class
      class Person
        # ...
      end
      
      # allowed
        # Class without body
        class Person
        end
      
        # Namespace - A namespace can be a class or a module
        # Containing a class
        module Namespace
          # Description/Explanation of Person class
          class Person
            # ...
          end
        end
      
        # Containing constant visibility declaration
        module Namespace
          class Private
          end
      
          private_constant :Private
        end
      
        # Containing constant definition
        module Namespace
          Public = Class.new
        end
      
        # Macro calls
        module Namespace
          extend Foo
        end

      Example: AllowedConstants: ['ClassMethods']

      # good
       module A
         module ClassMethods
           # ...
         end
        end

      Use def with parentheses when there are parameters.
      Open

            def extract_xlsx_backgrounds styles
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Use def with parentheses when there are parameters.
      Open

            def parse_xlsx_row row
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Use %r around regular expression.
      Open

                  if /^xl\/worksheets\/(.*)\.xml$/.match?(file.name)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop enforces using // or %r around regular expressions.

      Example: EnforcedStyle: slashes (default)

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = %r{
        foo
        (bar)
        (baz)
      }x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = /
        foo
        (bar)
        (baz)
      /x

      Example: EnforcedStyle: percent_r

      # bad
      snake_case = /^[\dA-Z_]+$/
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = %r{^[\dA-Z_]+$}
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: EnforcedStyle: mixed

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: AllowInnerSlashes: false (default)

      # If `false`, the cop will always recommend using `%r` if one or more
      # slashes are found in the regexp string.
      
      # bad
      x =~ /home\//
      
      # good
      x =~ %r{home/}

      Example: AllowInnerSlashes: true

      # good
      x =~ /home\//

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

                relation_file[relship.attr("Id")] = relship.attr("Target")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                if state != "hidden"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                hash[:font_size] = font.css("sz").first.attr("val").to_i if font.css("name")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Use def with parentheses when there are parameters.
      Open

            def extract_xlsx_number_formats styles
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Use def with parentheses when there are parameters.
      Open

            def parse_xlsx_column column
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

      This cop does not consider endless methods, since parentheses are always required for them.

      Example: EnforcedStyle: require_parentheses (default)

      # The `require_parentheses` style requires method definitions
      # to always use parentheses
      
      # bad
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Example: EnforcedStyle: requirenoparentheses

      # The `require_no_parentheses` style requires method definitions
      # to never use parentheses
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end

      Example: EnforcedStyle: requirenoparenthesesexceptmultiline

      # The `require_no_parentheses_except_multiline` style prefers no
      # parentheses when method definition arguments fit on single line,
      # but prefers parentheses when arguments span multiple lines.
      
      # bad
      def bar(num1, num2)
        num1 + num2
      end
      
      def foo descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name
        do_something
      end
      
      # good
      def bar num1, num2
        num1 + num2
      end
      
      def foo(descriptive_var_name,
              another_descriptive_var_name,
              last_descriptive_var_name)
        do_something
      end

      Use %r around regular expression.
      Open

                  elsif /xl\/_rels\/workbook.xml.rels$/.match?(file.name)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop enforces using // or %r around regular expressions.

      Example: EnforcedStyle: slashes (default)

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = %r{
        foo
        (bar)
        (baz)
      }x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = /
        foo
        (bar)
        (baz)
      /x

      Example: EnforcedStyle: percent_r

      # bad
      snake_case = /^[\dA-Z_]+$/
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = %r{^[\dA-Z_]+$}
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: EnforcedStyle: mixed

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: AllowInnerSlashes: false (default)

      # If `false`, the cop will always recommend using `%r` if one or more
      # slashes are found in the regexp string.
      
      # bad
      x =~ /home\//
      
      # good
      x =~ %r{home/}

      Example: AllowInnerSlashes: true

      # good
      x =~ /home\//

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

              workbook = ""
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                relation_file[relship.attr("Id")] = relship.attr("Target")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                id = cellformat.attr("numFmtId").to_i
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Space inside { missing.
      Open

              {cell: cell, position: position}
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

      Example: EnforcedStyle: space (default)

      # The `space` style enforces that hash literals have
      # surrounding space.
      
      # bad
      h = {a: 1, b: 2}
      
      # good
      h = { a: 1, b: 2 }

      Example: EnforcedStyle: no_space

      # The `no_space` style enforces that hash literals have
      # no surrounding space.
      
      # bad
      h = { a: 1, b: 2 }
      
      # good
      h = {a: 1, b: 2}

      Example: EnforcedStyle: compact

      # The `compact` style normally requires a space inside
      # hash braces, with the exception that successive left
      # braces or right braces are collapsed together in nested hashes.
      
      # bad
      h = { a: { b: 2 } }
      foo = { { a: 1 } => { b: { c: 2 } } }
      
      # good
      h = { a: { b: 2 }}
      foo = {{ a: 1 } => { b: { c: 2 }}}

      Example: EnforcedStyleForEmptyBraces: no_space (default)

      # The `no_space` EnforcedStyleForEmptyBraces style enforces that
      # empty hash braces do not contain spaces.
      
      # bad
      foo = { }
      bar = {    }
      
      # good
      foo = {}
      bar = {}

      Example: EnforcedStyleForEmptyBraces: space

      # The `space` EnforcedStyleForEmptyBraces style enforces that
      # empty hash braces contain space.
      
      # bad
      foo = {}
      
      # good
      foo = { }
      foo = {  }
      foo = {     }

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

                hash[:font_family] = font.css("name").first.attr("val") if font.css("name")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Space inside } missing.
      Open

              {cell: cell, position: position}
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

      Example: EnforcedStyle: space (default)

      # The `space` style enforces that hash literals have
      # surrounding space.
      
      # bad
      h = {a: 1, b: 2}
      
      # good
      h = { a: 1, b: 2 }

      Example: EnforcedStyle: no_space

      # The `no_space` style enforces that hash literals have
      # no surrounding space.
      
      # bad
      h = { a: 1, b: 2 }
      
      # good
      h = {a: 1, b: 2}

      Example: EnforcedStyle: compact

      # The `compact` style normally requires a space inside
      # hash braces, with the exception that successive left
      # braces or right braces are collapsed together in nested hashes.
      
      # bad
      h = { a: { b: 2 } }
      foo = { { a: 1 } => { b: { c: 2 } } }
      
      # good
      h = { a: { b: 2 }}
      foo = {{ a: 1 } => { b: { c: 2 }}}

      Example: EnforcedStyleForEmptyBraces: no_space (default)

      # The `no_space` EnforcedStyleForEmptyBraces style enforces that
      # empty hash braces do not contain spaces.
      
      # bad
      foo = { }
      bar = {    }
      
      # good
      foo = {}
      bar = {}

      Example: EnforcedStyleForEmptyBraces: space

      # The `space` EnforcedStyleForEmptyBraces style enforces that
      # empty hash braces contain space.
      
      # bad
      foo = {}
      
      # good
      foo = { }
      foo = {  }
      foo = {     }

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

                elsif formula == "FALSE()"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              col.width = column.attr("width").to_f
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              type = cell.attr("t")
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

              formula = cell.css("f").text
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                elsif formula == "TRUE()"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Align else with if.
      Open

                else
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop checks the alignment of else keywords. Normally they should be aligned with an if/unless/while/until/begin/def/rescue keyword, but there are special cases when they should follow the same rules as the alignment of end.

      Example:

      # bad
      if something
        code
       else
        code
      end
      
      # bad
      if something
        code
       elsif something
        code
      end
      
      # good
      if something
        code
      else
        code
      end

      Use %r around regular expression.
      Open

                    sheets[file.name.sub(/^xl\//, "")] = zipfile.read(file.name)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop enforces using // or %r around regular expressions.

      Example: EnforcedStyle: slashes (default)

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = %r{
        foo
        (bar)
        (baz)
      }x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = /
        foo
        (bar)
        (baz)
      /x

      Example: EnforcedStyle: percent_r

      # bad
      snake_case = /^[\dA-Z_]+$/
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = %r{^[\dA-Z_]+$}
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: EnforcedStyle: mixed

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: AllowInnerSlashes: false (default)

      # If `false`, the cop will always recommend using `%r` if one or more
      # slashes are found in the regexp string.
      
      # bad
      x =~ /home\//
      
      # good
      x =~ %r{home/}

      Example: AllowInnerSlashes: true

      # good
      x =~ /home\//

      Use %r around regular expression.
      Open

                  elsif /xl\/workbook.xml$/.match?(file.name)
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      This cop enforces using // or %r around regular expressions.

      Example: EnforcedStyle: slashes (default)

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = %r{
        foo
        (bar)
        (baz)
      }x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = /
        foo
        (bar)
        (baz)
      /x

      Example: EnforcedStyle: percent_r

      # bad
      snake_case = /^[\dA-Z_]+$/
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = %r{^[\dA-Z_]+$}
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: EnforcedStyle: mixed

      # bad
      snake_case = %r{^[\dA-Z_]+$}
      
      # bad
      regex = /
        foo
        (bar)
        (baz)
      /x
      
      # good
      snake_case = /^[\dA-Z_]+$/
      
      # good
      regex = %r{
        foo
        (bar)
        (baz)
      }x

      Example: AllowInnerSlashes: false (default)

      # If `false`, the cop will always recommend using `%r` if one or more
      # slashes are found in the regexp string.
      
      # bad
      x =~ /home\//
      
      # good
      x =~ %r{home/}

      Example: AllowInnerSlashes: true

      # good
      x =~ /home\//

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

                background_hash = backgrounds[cellformat.attr("applyFill").to_i]
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                font_hash = fonts[cellformat.attr("applyFill").to_i]
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

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

                elsif type == "n"
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.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"

      Pass &:trim! as an argument to each instead of a block.
      Open

                sheet.each do |table|
                  table.trim!
                end
      Severity: Minor
      Found in lib/workbook/readers/xlsx_reader.rb by rubocop

      Use symbols as procs when possible.

      If you prefer a style that allows block for method with arguments, please set true to AllowMethodsWithArguments.

      Safety:

      This cop is unsafe because procs and blocks work differently when additional arguments are passed in. A block will silently ignore additional arguments, but a proc will raise an ArgumentError.

      For example:

      class Foo
        def bar
          :bar
        end
      end
      
      def call(options = {}, &block)
        block.call(Foo.new, options)
      end
      
      call { |x| x.bar }
      #=> :bar
      call(&:bar)
      # ArgumentError: wrong number of arguments (given 1, expected 0)

      Example:

      # bad
      something.map { |s| s.upcase }
      something.map { _1.upcase }
      
      # good
      something.map(&:upcase)

      Example: AllowMethodsWithArguments: false (default)

      # bad
      something.do_something(foo) { |o| o.bar }
      
      # good
      something.do_something(foo, &:bar)

      Example: AllowMethodsWithArguments: true

      # good
      something.do_something(foo) { |o| o.bar }

      There are no issues that match your filters.

      Category
      Status