# File lib/foreman_maintain/reporter.rb, line 21 def after_execution_finishes(_execution); end
# File lib/foreman_maintain/reporter.rb, line 23 def after_scenario_finishes(_scenario); end
# File lib/foreman_maintain/reporter.rb, line 42 def ask(_message); end
simple yes/no question, returns :yes, :no or :quit
# File lib/foreman_maintain/reporter.rb, line 49 def ask_decision(message, options = {}) options.validate_options!(:assumeyes) assumeyes = options.fetch(:assumeyes, assumeyes?) if assumeyes print("#{message} (assuming yes)") return :yes end until_valid_decision do filter_decision(ask("#{message}, [y(yes), n(no), q(quit)]")) end end
# File lib/foreman_maintain/reporter.rb, line 61 def assumeyes=(assume) @assumeyes = !!assume end
# File lib/foreman_maintain/reporter.rb, line 44 def assumeyes? @assumeyes end
# File lib/foreman_maintain/reporter.rb, line 19 def before_execution_starts(_execution); end
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
# File lib/foreman_maintain/reporter.rb, line 25 def on_next_steps(steps) return if steps.empty? if steps.size > 1 multiple_steps_decision(steps) else single_step_decision(steps.first) end end
# File lib/foreman_maintain/reporter.rb, line 38 def print(_message); end
# File lib/foreman_maintain/reporter.rb, line 40 def puts(_message); end
# File lib/foreman_maintain/reporter.rb, line 34 def with_spinner(_message, &_block) yield DummySpinner.new end
rubocop:disable Metrics/MethodLength
# File lib/foreman_maintain/reporter.rb, line 93 def ask_to_select(message, steps) if assumeyes? puts('(assuming first option)') return steps.first end until_valid_decision do answer = ask("#{message}, [n(next), q(quit)]") 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
# File lib/foreman_maintain/reporter.rb, line 84 def filter_decision(answer) decision = nil DECISION_MAPPER.each do |options, decision_label| decision = decision_label if options.include?(answer) end decision end
# File lib/foreman_maintain/reporter.rb, line 76 def multiple_steps_decision(steps) 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, &:description) end
# File lib/foreman_maintain/reporter.rb, line 67 def single_step_decision(step) answer = ask_decision("Continue with step [#{step.description}]?") if answer == :yes step else answer end end
loop over the block until it returns some non-false value
# File lib/foreman_maintain/reporter.rb, line 115 def until_valid_decision decision = nil decision = yield until decision decision end