class Launchy::Detect::Runner
Public Class Methods
detect()
click to toggle source
Detect
the current command runner
This will return an instance of the Runner
to be used to do the application launching.
If a runner cannot be detected then raise Runner::NotFoundError
The runner rules are, in order:
1) If you are on windows, you use the Windows
Runner
no matter what 2) If you are using the jruby engine, use the Jruby
Runner
. Unless rule (1) took effect 3) Use Forkable
(barring rules (1) and (2))
# File lib/launchy/detect/runner.rb, line 23 def self.detect host_os_family = Launchy::Detect::HostOsFamily.detect ruby_engine = Launchy::Detect::RubyEngine.detect return Windows.new if host_os_family.windows? if ruby_engine.jruby? then return Jruby.new end return Forkable.new end
Public Instance Methods
commandline_normalize( cmdline )
click to toggle source
# File lib/launchy/detect/runner.rb, line 46 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 )
click to toggle source
# File lib/launchy/detect/runner.rb, line 53 def dry_run( cmd, *args ) shell_commands(cmd, args).join(" ") end
run( cmd, *args )
click to toggle source
# File lib/launchy/detect/runner.rb, line 57 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 )
click to toggle source
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 they whole set is passed to system as *args and in that case system shell escaping rules are not done.
# File lib/launchy/detect/runner.rb, line 40 def shell_commands( cmd, args ) cmdline = [ cmd.to_s.shellsplit ] cmdline << args.flatten.collect{ |a| a.to_s } return commandline_normalize( cmdline ) end