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. – TODO: Remove in Rake 11
Constant Summary collapse
- WINDOWS =
:nodoc: all
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
99 100 101 |
# File 'lib/rake/alt_system.rb', line 99 def backticks(cmd) kernel_backticks(repair_command(cmd)) end |
.define_module_function(name, &block) ⇒ Object
38 39 40 41 |
# File 'lib/rake/alt_system.rb', line 38 def define_module_function(name, &block) define_method(name, &block) module_function(name) end |
.find_runnable(file) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/rake/alt_system.rb', line 73 def find_runnable(file) if file =~ RUNNABLE_PATTERN file else RUNNABLE_EXTS.each { |ext| test = "#{file}.#{ext}" return test if File.exist?(test) } nil end end |
.repair_command(cmd) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rake/alt_system.rb', line 53 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
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/rake/alt_system.rb', line 85 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 |