Class: Launchy::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/launchy/runner.rb

Instance Method Summary collapse

Instance Method Details

#commandline_normalize(cmdline) ⇒ Object



39
40
41
42
43
44
# File 'lib/launchy/runner.rb', line 39

def commandline_normalize( cmdline )
  c = cmdline.flatten!
  c = c.find_all { |a| (not a.nil?) and ( a.size > 0 ) }
  Launchy.log "commandline_normalized => #{c.join(' ')}"
  return c
end

#dry_run(cmd, *args) ⇒ Object



24
25
26
# File 'lib/launchy/runner.rb', line 24

def dry_run( cmd, *args )
  shell_commands(cmd, args).join(" ")
end

#run(cmd, *args) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/launchy/runner.rb', line 4

def run( cmd, *args )
  raise Launchy::CommandNotFoundError, "No command found to run with args '#{args.join(' ')}'. If this is unexpected, #{Launchy.bug_report_message}" unless cmd
  if Launchy.dry_run? then
    $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.



33
34
35
36
37
# File 'lib/launchy/runner.rb', line 33

def shell_commands( cmd, args )
  cmdline = [ cmd.to_s.shellsplit ]
  cmdline << args.flatten.collect{ |a| a.to_s }
  return commandline_normalize( cmdline )
end

#wet_run(cmd, *args) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/launchy/runner.rb', line 13

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