class RubocopChallenger::Rubocop::TodoReader

To read `.rubocop_todo.yml` and parse each rules

Attributes

rubocop_todo_file_path[R]

Public Class Methods

new(rubocop_todo_file_path) click to toggle source
# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 7
def initialize(rubocop_todo_file_path)
  @rubocop_todo_file_path = rubocop_todo_file_path
end

Public Instance Methods

all_rules() click to toggle source

@return [Array<Rule>]

Array of rubocop rule instances which ordered by offense count
# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 21
def all_rules
  @all_rules ||=
    file_contents
    .split(/\n{2,}/)
    .map! { |content| Rule.new(content) }
    .reject! { |rule| invalid?(rule) }
    .sort!
end
any_rule() click to toggle source

@return [Rule]

# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 46
def any_rule
  auto_correctable_rules.sample
end
auto_correctable_rules() click to toggle source

@return [Array<Rule>]

# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 31
def auto_correctable_rules
  all_rules.select(&:auto_correctable?)
end
least_occurrence_rule() click to toggle source

@return [Rule]

# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 36
def least_occurrence_rule
  auto_correctable_rules.first
end
most_occurrence_rule() click to toggle source

@return [Rule]

# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 41
def most_occurrence_rule
  auto_correctable_rules.last
end
version() click to toggle source

Returns the version of RuboCop used to create the “.rubocop_todo.yml”

@return [Type] the RuboCop version

# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 14
def version
  file_contents =~ /using RuboCop version (\d{1,}\.\d{1,}\.\d{1,})/
  Regexp.last_match(1)
end

Private Instance Methods

file_contents() click to toggle source

@return [String] the “.rubocop_todo.yml” contents

# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 55
def file_contents
  @file_contents ||= File.read(rubocop_todo_file_path)
end
ignored_rules() click to toggle source

@return [Array<String>] Ignored rule titles

# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 66
def ignored_rules
  @ignored_rules ||= ConfigEditor.new.ignored_rules
end
invalid?(rule) click to toggle source

@param rule [Rule] the target rule @return [Boolean]

# File lib/rubocop_challenger/rubocop/todo_reader.rb, line 61
def invalid?(rule)
  rule.offense_count.zero? || ignored_rules.include?(rule.title)
end