Class: FastlaneCore::Shell
- Inherits:
-
Object
- Object
- FastlaneCore::Shell
- Defined in:
- lib/fastlane/plugin/wpmreleasetoolkit/helper/interactive_prompt_reminder.rb
Overview
NOTE: FastlaneCore::UI delegates to the FastlaneCore::Shell implementation when output is the terminal
Constant Summary collapse
- DEFAULT_PROMPT_REMINDER_MESSAGE =
'An interactive prompt is waiting for you in the Terminal!'.freeze
- DEFAULT_PROMPT_REMINDER_DELAYS =
[30, 180, 600].freeze
Class Method Summary collapse
-
.monkey_patch_interactive_prompts_with_reminder(after: DEFAULT_PROMPT_REMINDER_DELAYS, message: DEFAULT_PROMPT_REMINDER_MESSAGE) ⇒ Object
Monkey-Patch fastlane’s
UI.input,UI.confirm,UI.selectandUI.passwordinteractive methods (which delegate toFastlaneCore::Shellwhen output is the terminal). -
.with_reminder(after: DEFAULT_PROMPT_REMINDER_DELAYS, message: DEFAULT_PROMPT_REMINDER_MESSAGE) ⇒ Object
Calls the block given and remind the user with a vocal message if the block does not return after specific delays.
Class Method Details
.monkey_patch_interactive_prompts_with_reminder(after: DEFAULT_PROMPT_REMINDER_DELAYS, message: DEFAULT_PROMPT_REMINDER_MESSAGE) ⇒ Object
Monkey-Patch fastlane’s UI.input, UI.confirm, UI.select and UI.password interactive methods (which delegate to FastlaneCore::Shell when output is the terminal)
Once you call this method, any invocation of UI.input, UI.confirm, UI.select or UI.password anywhere in Fastlane (by your Fastfile, an action, …) will be wrapped in a call to with_reminder automatically.
73 74 75 76 77 78 79 80 81 |
# File 'lib/fastlane/plugin/wpmreleasetoolkit/helper/interactive_prompt_reminder.rb', line 73 def self.monkey_patch_interactive_prompts_with_reminder(after: DEFAULT_PROMPT_REMINDER_DELAYS, message: DEFAULT_PROMPT_REMINDER_MESSAGE) i[input confirm select password].each do |method_name| old_method = instance_method(method_name) define_method(method_name) do |*args| FastlaneCore::Shell.with_reminder(after: after, message: ) { old_method.bind(self).call(*args) } end end end |
.with_reminder(after: DEFAULT_PROMPT_REMINDER_DELAYS, message: DEFAULT_PROMPT_REMINDER_MESSAGE) ⇒ Object
Calls the block given and remind the user with a vocal message if the block does not return after specific delays.
Especially useful when using a block which calls methods that are interactive, in order to remind the user to answer the interactive prompt if they forgot about it after some delays.
Example usage:
text = with_reminder do
puts "Enter some text:"
$stdout.getch
end
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/fastlane/plugin/wpmreleasetoolkit/helper/interactive_prompt_reminder.rb', line 50 def self.with_reminder(after: DEFAULT_PROMPT_REMINDER_DELAYS, message: DEFAULT_PROMPT_REMINDER_MESSAGE) delays_list = Array(after.dup) thread = Thread.new do until delays_list.empty? sleep(delays_list.shift) $stdout.beep system('say', ) unless .nil? end end # execute the interactive code res = yield # if we replied before the timeout, kill the thread so message won't be triggered thread.kill # If the block given returned a value, pass it return res end |