Module: Rake::AltSystem
- Defined in:
- lib/rake/alt_system.rb
Overview
Alternate implementations of system() and backticks " on Windows for ruby-1.8 and earlier.
Constant Summary collapse
- WINDOWS =
RbConfig::CONFIG["host_os"] =~ %r!(msdos|mswin|djgpp|mingw|[Ww]indows)!
- RUNNABLE_EXTS =
%w[com exe bat cmd]
- RUNNABLE_PATTERN =
%r!\.(#{RUNNABLE_EXTS.join('|')})\Z!i
Class Method Summary collapse
- .backticks(cmd) ⇒ Object
- .define_module_function(name, &block) ⇒ Object
- .find_runnable(file) ⇒ Object
- .repair_command(cmd) ⇒ Object
- .system(cmd, *args) ⇒ Object
Class Method Details
.backticks(cmd) ⇒ Object
98 99 100 |
# File 'lib/rake/alt_system.rb', line 98 def backticks(cmd) kernel_backticks(repair_command(cmd)) end |
.define_module_function(name, &block) ⇒ Object
36 37 38 39 |
# File 'lib/rake/alt_system.rb', line 36 def define_module_function(name, &block) define_method(name, &block) module_function(name) end |
.find_runnable(file) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 |
# 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) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# 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) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 |
# 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.(runnable), *args] else # non-existent file [cmd, *args] end ) kernel_system(*repaired) end |