Module: WormCLI::Options
- Defined in:
- lib/ruby-progress/cli/worm_options.rb
Overview
Option parsing helpers for the Worm subcommand.
Keeps the CLI option definitions for ‘prg worm` extracted from the main dispatcher to keep the CLI module small and focused.
Class Method Summary collapse
-
.parse_cli_options ⇒ Hash
Parse CLI options for the worm subcommand.
Class Method Details
.parse_cli_options ⇒ Hash
Parse CLI options for the worm subcommand.
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 44 45 46 47 48 49 50 51 52 53 54 55 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 180 181 182 183 184 |
# File 'lib/ruby-progress/cli/worm_options.rb', line 14 def self. = { output_position: :above, output_lines: 3 } begin OptionParser.new do |opts| opts. = 'Usage: prg worm [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 animation') do || [:message] = end opts.on('-l', '--length LENGTH', Integer, 'Number of dots to display') do |length| [:length] = length end opts.on('--style STYLE', 'Animation style (circles/blocks/geometric, c/b/g, or custom=abc)') do |style| [:style] = style end opts.on('-d', '--direction DIRECTION', 'Animation direction (forward/bidirectional or f/b)') do |direction| [:direction] = direction =~ /^f/i ? :forward_only : :bidirectional 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('--output-position POSITION', 'Position to render captured output: above or below (default: above)') do |pos| [:output_position] = pos.to_sym end opts.on('--output-lines N', Integer, 'Number of output lines to reserve for captured output (default: 3)') do |n| [:output_lines] = n end opts.on('--success MESSAGE', 'Success message to display') do |text| [:success] = text end opts.on('--success-icon ICON', 'Custom success icon to show with completion messages') do |ic| [:success_icon] = ic end opts.on('--error-icon ICON', 'Custom error icon to show with failure messages') do |ic| [:error_icon] = ic 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 [:stdout] = true end opts.on('--stdout-live', 'Stream captured output to STDOUT as it arrives (non-blocking)') do [:stdout_live] = 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 # Accept --daemon-name as an alias for --daemon-as for compatibility opts.on('--daemon-name NAME', 'Alias for --daemon-as (compat)') 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.on('--stop-all', 'Stop all prg worm processes') do success = PrgCLI.stop_subcommand_processes('worm') exit(success ? 0 : 1) end opts.on('--stop-pid FILE', 'Stop daemon by reading PID from file (deprecated: use --stop [--pid-file])') do |file| RubyProgress::Daemon.stop_daemon_by_pid_file(file) exit end 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 worm styles with visual previews') do PrgCLI.show_worm_styles exit end opts.on('--stop-all', 'Stop all prg worm processes') do success = PrgCLI.stop_subcommand_processes('worm') exit(success ? 0 : 1) end opts.on('-v', '--version', 'Show version') do puts "Worm 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 worm [options]' puts "Run 'prg worm --help' for more information." exit 1 end end |