class ForemanMaintain::Reporter

Constants

DECISION_MAPPER

Public Instance Methods

after_execution_finishes(_execution) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 23
def after_execution_finishes(_execution)
end
after_scenario_finishes(_scenario) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 26
def after_scenario_finishes(_scenario)
end
ask(_message) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 49
def ask(_message)
end
ask_decision(message, actions_msg: 'y(yes), n(no), q(quit)', assumeyes: assumeyes?, run_strategy: :fail_fast) click to toggle source

simple yes/no question, returns :yes, :no or :quit rubocop:disable Metrics/LineLength

# File lib/foreman_maintain/reporter.rb, line 62
def ask_decision(message, actions_msg: 'y(yes), n(no), q(quit)', assumeyes: assumeyes?, run_strategy: :fail_fast)
  actions_msg = 'y(yes), n(no)' if run_strategy == :fail_slow
  if assumeyes
    print("#{message} (assuming yes)")
    return :yes
  end

  until_valid_decision do
    filter_decision(ask("#{message}\n[#{actions_msg}]"))
  end
end
assumeyes=(assume) click to toggle source

rubocop:enable Metrics/LineLength

# File lib/foreman_maintain/reporter.rb, line 75
def assumeyes=(assume)
  @assumeyes = !!assume
end
assumeyes?() click to toggle source
# File lib/foreman_maintain/reporter.rb, line 52
def assumeyes?
  @assumeyes
end
before_execution_starts(_execution) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 20
def before_execution_starts(_execution)
end
before_scenario_starts(_scenario, _last_scenario = nil) click to toggle source

Each public method is a hook called by executor at the specific point

# File lib/foreman_maintain/reporter.rb, line 17
def before_scenario_starts(_scenario, _last_scenario = nil)
end
on_next_steps(steps, run_strategy = :fail_fast) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 29
def on_next_steps(steps, run_strategy = :fail_fast)
  return if steps.empty?

  if steps.size > 1
    multiple_steps_decision(steps, run_strategy)
  else
    single_step_decision(steps.first, run_strategy)
  end
end
plaintext=(plaintext) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 79
def plaintext=(plaintext)
  @plaintext = !!plaintext
end
plaintext?() click to toggle source
# File lib/foreman_maintain/reporter.rb, line 56
def plaintext?
  @plaintext
end
print(_message) click to toggle source
puts(_message) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 46
def puts(_message)
end
with_spinner(_message) { |dummy_spinner| ... } click to toggle source
# File lib/foreman_maintain/reporter.rb, line 39
def with_spinner(_message, &_block)
  yield DummySpinner.new
end

Private Instance Methods

ask_to_select(message, steps, run_strategy) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 110
def ask_to_select(message, steps, run_strategy)
  if assumeyes?
    puts('(assuming first option)')
    return steps.first
  end
  until_valid_decision do
    actions = (run_strategy == :fail_slow) ? 'n(next)' : 'n(next), q(quit)'

    answer = ask("#{message}, [#{actions}]")
    if answer =~ /^\d+$/ && (answer.to_i - 1) < steps.size
      steps[answer.to_i - 1]
    else
      decision = filter_decision(answer)
      if decision == :yes
        steps.first
      else
        decision
      end
    end
  end
end
filter_decision(answer) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 102
def filter_decision(answer)
  decision = nil
  DECISION_MAPPER.each do |options, decision_label|
    decision = decision_label if options.include?(answer)
  end
  decision
end
multiple_steps_decision(steps, run_strategy) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 94
def multiple_steps_decision(steps, run_strategy)
  puts 'There are multiple steps to proceed:'
  steps.each_with_index do |step, index|
    puts "#{index + 1}) #{step.description}"
  end
  ask_to_select('Select step to continue', steps, run_strategy)
end
single_step_decision(step, run_strategy) click to toggle source
# File lib/foreman_maintain/reporter.rb, line 85
def single_step_decision(step, run_strategy)
  answer = ask_decision("Continue with step [#{step.description}]?", run_strategy: run_strategy)
  if answer == :yes
    step
  else
    answer
  end
end
until_valid_decision() { |until decision| ... } click to toggle source

loop over the block until it returns some non-false value

# File lib/foreman_maintain/reporter.rb, line 133
def until_valid_decision
  decision = nil
  decision = yield until decision
  decision
end