module Rake::AltSystem
Alternate implementations of system() and backticks “ on Windows for ruby-1.8 and earlier.
Constants
- RUNNABLE_EXTS
- RUNNABLE_PATTERN
- WINDOWS
Public Class Methods
define_module_function(name, &block)
click to toggle source
# File lib/rake/alt_system.rb, line 36 def define_module_function(name, &block) define_method(name, &block) module_function(name) end
Public Instance Methods
backticks(cmd)
click to toggle source
# File lib/rake/alt_system.rb, line 98 def backticks(cmd) kernel_backticks(repair_command(cmd)) end
find_runnable(file)
click to toggle source
# File lib/rake/alt_system.rb, line 71 def find_runnable(file) if file =~ RUNNABLE_PATTERN file else RUNNABLE_EXTS.each { |ext| if File.exist?(test = "#{file}.#{ext}") return test end } nil end end
repair_command(cmd)
click to toggle source
# File lib/rake/alt_system.rb, line 51 def repair_command(cmd) "call " + ( if cmd =~ %r!\A\s*\".*?\"! # already quoted cmd elsif match = cmd.match(%r!\A\s*(\S+)!) if match[1] =~ %r!/! # avoid x/y.bat interpretation as x with option /y %Q!"#{match[1]}"! + match.post_match else # a shell command will fail if quoted cmd end else # empty or whitespace cmd end ) end
system(cmd, *args)
click to toggle source
# File lib/rake/alt_system.rb, line 84 def system(cmd, *args) repaired = ( if args.empty? [repair_command(cmd)] elsif runnable = find_runnable(cmd) [File.expand_path(runnable), *args] else # non-existent file [cmd, *args] end ) kernel_system(*repaired) end