class RubocopChallenger::Rubocop::Challenge

To execute Rubocop Challenge flow

Attributes

command[R]
mode[R]
only_safe_auto_correct[R]
todo_reader[R]
todo_writer[R]

Public Class Methods

exec(file_path:, mode:, only_safe_auto_correct:) click to toggle source
# File lib/rubocop_challenger/rubocop/challenge.rb, line 7
def self.exec(file_path:, mode:, only_safe_auto_correct:)
  new(file_path, mode, only_safe_auto_correct).send(:exec)
end
new(file_path, mode, only_safe_auto_correct) click to toggle source
# File lib/rubocop_challenger/rubocop/challenge.rb, line 15
def initialize(file_path, mode, only_safe_auto_correct)
  @mode = mode
  @only_safe_auto_correct = only_safe_auto_correct
  @command = Rubocop::Command.new
  @todo_reader = Rubocop::TodoReader.new(file_path)
  @todo_writer = Rubocop::TodoWriter.new(file_path)
end

Private Instance Methods

exec() click to toggle source

@raise [Errors::NoAutoCorrectableRule]

# File lib/rubocop_challenger/rubocop/challenge.rb, line 24
def exec
  verify_target_rule
  todo_writer.delete_rule(target_rule)
  command.auto_correct(only_safe_auto_correct: only_safe_auto_correct)
  target_rule
end
target_rule() click to toggle source
# File lib/rubocop_challenger/rubocop/challenge.rb, line 37
def target_rule
  @target_rule ||=
    case mode
    when 'least_occurrence' then todo_reader.least_occurrence_rule
    when 'random'           then todo_reader.any_rule
    when 'most_occurrence'  then todo_reader.most_occurrence_rule
    else raise "`#{mode}` is not supported mode"
    end
end
verify_target_rule() click to toggle source
# File lib/rubocop_challenger/rubocop/challenge.rb, line 31
def verify_target_rule
  return unless target_rule.nil?

  raise Errors::NoAutoCorrectableRule
end