Module: TwirlCLI
- Defined in:
- lib/ruby-progress/cli/twirl_cli.rb,
lib/ruby-progress/cli/twirl_options.rb
Overview
Twirl CLI (extracted from bin/prg)
Defined Under Namespace
Modules: Options
Class Method Summary collapse
- .parse_cli_options ⇒ Object
-
.resolve_pid_file(options, name_key) ⇒ Object
runtime methods moved to TwirlRunner.
- .run ⇒ Object
Class Method Details
.parse_cli_options ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/ruby-progress/cli/twirl_cli.rb', line 56 def self. = {} OptionParser.new do |opts| opts. = 'Usage: prg twirl [options]' opts.separator '' opts.separator 'Animation Options:' opts.on('-s', '--speed SPEED', 'Animation speed (1-10, fast/medium/slow, or f/m/s)') do |speed| [:speed] = speed end opts.on('-m', '--message MESSAGE', 'Message to display before spinner') do || [:message] = end opts.on('--style STYLE', 'Spinner style (see --show-styles for options)') do |style| [:style] = style end opts.on('--ends CHARS', 'Start/end characters (even number of chars, split in half)') do |chars| [:ends] = chars end opts.separator '' opts.separator 'Command Execution:' opts.on('-c', '--command COMMAND', 'Command to run (optional - runs indefinitely without)') do |command| [:command] = command end opts.on('--success MESSAGE', 'Success message to display') do |text| [:success] = text end opts.on('--error MESSAGE', 'Error message to display') do |text| [:error] = text end opts.on('--checkmark', 'Show checkmarks (✅ success, 🛑 failure)') do [:checkmark] = true end opts.on('--stdout', 'Output captured command result to STDOUT') do |_text| [:stdout] = true end opts.separator '' opts.separator 'Daemon Mode:' opts.on('--daemon', 'Run in background daemon mode') do [:daemon] = true end opts.on('--daemon-as NAME', 'Run in daemon mode with custom name (creates /tmp/ruby-progress/NAME.pid)') do |name| [:daemon] = true [:daemon_name] = name end opts.on('--pid-file FILE', 'Write process ID to file (default: /tmp/ruby-progress/progress.pid)') do |file| [:pid_file] = file end opts.on('--stop', 'Stop daemon (uses default PID file unless --pid-file specified)') do [:stop] = true end opts.on('--stop-id NAME', 'Stop daemon by name (automatically implies --stop)') do |name| [:stop] = true [:stop_name] = name end opts.on('--status', 'Show daemon status (uses default PID file unless --pid-file specified)') do [:status] = true end opts.on('--status-id NAME', 'Show daemon status by name') do |name| [:status] = true [:status_name] = name end opts.on('--stop-success MESSAGE', 'Stop daemon with success message (automatically implies --stop)') do |msg| [:stop] = true [:stop_success] = msg end opts.on('--stop-error MESSAGE', 'Stop daemon with error message (automatically implies --stop)') do |msg| [:stop] = true [:stop_error] = msg end opts.on('--stop-checkmark', 'When stopping, include a success checkmark') { [:stop_checkmark] = true } opts.separator '' opts.separator 'Daemon notes:' opts.separator ' - Do not append &; prg detaches itself and returns immediately.' opts.separator ' - Use --daemon-as NAME for named daemons, or --stop-id/--status-id for named control.' opts.separator '' opts.separator 'General:' opts.on('--show-styles', 'Show available twirl styles with visual previews') do PrgCLI.show_twirl_styles exit end opts.on('--stop-all', 'Stop all prg twirl processes') do success = PrgCLI.stop_subcommand_processes('twirl') exit(success ? 0 : 1) end opts.on('-v', '--version', 'Show version') do puts "Twirl version #{RubyProgress::VERSION}" exit end opts.on('-h', '--help', 'Show this help') do puts opts exit end end.parse! rescue OptionParser::InvalidOption => e puts "Invalid option: #{e.args.first}" puts '' puts 'Usage: prg twirl [options]' puts "Run 'prg twirl --help' for more information." exit 1 end |
.resolve_pid_file(options, name_key) ⇒ Object
runtime methods moved to TwirlRunner
46 47 48 49 50 51 52 53 54 |
# File 'lib/ruby-progress/cli/twirl_cli.rb', line 46 def self.resolve_pid_file(, name_key) return [:pid_file] if [:pid_file] if [name_key] "/tmp/ruby-progress/#{[name_key]}.pid" else RubyProgress::Daemon.default_pid_file end end |
.run ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/ruby-progress/cli/twirl_cli.rb', line 10 def self.run trap('INT') do RubyProgress::Utils.show_cursor exit end = TwirlCLI::Options. if [:status] pid_file = resolve_pid_file(, :status_name) RubyProgress::Daemon.show_status(pid_file) exit elsif [:stop] pid_file = resolve_pid_file(, :stop_name) stop_msg = [:stop_error] || [:stop_success] is_error = ![:stop_error].nil? RubyProgress::Daemon.stop_daemon_by_pid_file( pid_file, message: stop_msg, checkmark: [:stop_checkmark], error: is_error ) exit elsif [:daemon] # Background without detaching so spinner remains visible in current terminal PrgCLI.backgroundize TwirlRunner.run_daemon_mode() elsif [:command] TwirlRunner.run_with_command() else TwirlRunner.run_indefinitely() end end |