Class: Launchy::Runner
- Inherits:
-
Object
- Object
- Launchy::Runner
- Defined in:
- lib/launchy/runner.rb
Overview
Internal: Run a command in a child process
Instance Method Summary collapse
- #commandline_normalize(cmdline) ⇒ Object
- #dry_run(cmd, *args) ⇒ Object
- #run(cmd, *args) ⇒ Object
-
#shell_commands(cmd, args) ⇒ Object
cut it down to just the shell commands that will be passed to exec or posix_spawn.
- #wet_run(cmd, *args) ⇒ Object
Instance Method Details
#commandline_normalize(cmdline) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/launchy/runner.rb', line 47 def commandline_normalize(cmdline) c = cmdline.flatten! c = c.find_all { |a| !a.nil? and a.size.positive? } Launchy.log "commandline_normalized => #{c.join(' ')}" c end |
#dry_run(cmd, *args) ⇒ Object
32 33 34 |
# File 'lib/launchy/runner.rb', line 32 def dry_run(cmd, *args) shell_commands(cmd, args).join(" ") end |
#run(cmd, *args) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/launchy/runner.rb', line 8 def run(cmd, *args) unless cmd raise Launchy::CommandNotFoundError, "No command found to run with args '#{args.join(' ')}'. If this is unexpected, #{Launchy.}" end if Launchy.dry_run? $stdout.puts dry_run(cmd, *args) else wet_run(cmd, *args) end end |
#shell_commands(cmd, args) ⇒ Object
cut it down to just the shell commands that will be passed to exec or posix_spawn. The cmd argument is split according to shell rules and the args are not escaped because the whole set is passed to system as *args and in that case system shell escaping rules are not done.
41 42 43 44 45 |
# File 'lib/launchy/runner.rb', line 41 def shell_commands(cmd, args) cmdline = [cmd.to_s.shellsplit] cmdline << args.flatten.collect(&:to_s) commandline_normalize(cmdline) end |
#wet_run(cmd, *args) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/launchy/runner.rb', line 21 def wet_run(cmd, *args) argv = [cmd, *args].flatten Launchy.log "ChildProcess: argv => #{argv.inspect}" process = ChildProcess.build(*argv) process.io.inherit! process.leader = true process.detach = true process.start end |