Module: Squared::Common::Shell
- Defined in:
- lib/squared/common/shell.rb
Class Method Summary collapse
- .basic_option(flag, val, merge: false) ⇒ Object
- .fill_option(val, double: false) ⇒ Object
- .quote_option(flag, val, double: false) ⇒ Object
- .shell_escape(val, quote: false, force: false, double: false, override: false) ⇒ Object
- .shell_option(flag, val = nil, escape: true, quote: true, force: true, double: false, override: false, merge: false) ⇒ Object
- .shell_quote(val, option: true, force: true, double: false, override: false) ⇒ Object
- .shell_split(val, escape: true, quote: false, join: nil) ⇒ Object
Class Method Details
.basic_option(flag, val, merge: false) ⇒ Object
95 96 97 |
# File 'lib/squared/common/shell.rb', line 95 def basic_option(flag, val, merge: false) shell_option(flag, val, escape: false, force: false, merge: merge) end |
.fill_option(val, double: false) ⇒ Object
85 86 87 88 89 |
# File 'lib/squared/common/shell.rb', line 85 def fill_option(val, double: false) return "-#{val}" if val.match?(/^[a-z]\d*$/i) shell_escape(val.start_with?('-') ? val : "--#{val}", double: double) end |
.quote_option(flag, val, double: false) ⇒ Object
91 92 93 |
# File 'lib/squared/common/shell.rb', line 91 def quote_option(flag, val, double: false) shell_option(flag, val, escape: false, double: double) end |
.shell_escape(val, quote: false, force: false, double: false, override: false) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/squared/common/shell.rb', line 11 def shell_escape(val, quote: false, force: false, double: false, override: false) if (r = /\A(--?)([^= ]+)((=|\s+)(["'])?(.+?)(["'])?)?\z/m.match(val = val.to_s)) return val if !r[3] || (!r[5] && r[6].match?(/\s/)) combine = lambda do |opt| if r[2] =~ /^(["'])(.+)\1$/ double = $1 == '"' r[2] = $2 override = true end r[1] + r[2] + r[4] + shell_quote(opt, double: double, force: force, override: override) end if r[5] == r[7] r[5] ? val : combine.(r[6]) else force = true combine.(r[5] + r[6] + r[7]) end elsif Rake::Win32.windows? quote ? shell_quote(val, double: double, force: force) : val else Shellwords.escape(val) end end |
.shell_option(flag, val = nil, escape: true, quote: true, force: true, double: false, override: false, merge: false) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/squared/common/shell.rb', line 48 def shell_option(flag, val = nil, escape: true, quote: true, force: true, double: false, override: false, merge: false) flag = flag.to_s if flag =~ /^(["'])(.+)\1$/ double = $1 == '"' flag = $2 escape = false override = true end if flag[0] == '-' b = flag[1] == '-' ? '=' : ' ' elsif flag.size == 1 a = '-' b = merge ? '' : ' ' else a = '--' b = '=' end "#{a}#{flag}#{if val "#{b}#{if escape shell_escape(val, quote: quote, double: double, override: override) else quote ? shell_quote(val, force: force, double: double, override: override) : val end}" end}" end |
.shell_quote(val, option: true, force: true, double: false, override: false) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/squared/common/shell.rb', line 36 def shell_quote(val, option: true, force: true, double: false, override: false) val = val.to_s return val if !force && !val.include?(' ') return val if option && val.match?(/(?:\A|\S=|[^=]\s+|#{Rake::Win32.windows? ? '[\\\/]' : '\/'})(["']).+\1\z/m) if double || Rake::Win32.windows? || (ARG[:QUOTE] == '"' && !override) "\"#{val.gsub(/(?<!\\)"/, '\\"')}\"" else "'#{val.gsub("'", "'\\\\''")}'" end end |
.shell_split(val, escape: true, quote: false, join: nil) ⇒ Object
75 76 77 78 79 80 81 82 83 |
# File 'lib/squared/common/shell.rb', line 75 def shell_split(val, escape: true, quote: false, join: nil) ret = Shellwords.split(val) return ret if join == false ret.map! { |opt| shell_escape(opt, quote: quote) } if escape return ret unless join ret.join(join.is_a?(::String) ? join : ' ') end |