Module: Shellwords
- Defined in:
- lib/standard/facets/shellwords.rb
Class Method Summary collapse
-
.alt_escape(cmdline) ⇒ Object
Escape special characters used in most unix shells to use it, eg.
-
.dos_escape(cmdline) ⇒ Object
Escape special character used in DOS-based shells.
-
.parse(argv, opts) ⇒ Object
(also: run)
The coolest little arguments parser in all of Rubyland.
Instance Method Summary collapse
-
#alt_escape(cmdline) ⇒ Object
private
Escape special characters used in most unix shells to use it, eg.
-
#dos_escape(cmdline) ⇒ Object
private
Escape special character used in DOS-based shells.
- #escape(cmdline) ⇒ Object
-
#parse(argv, opts) ⇒ Object
private
The coolest little arguments parser in all of Rubyland.
-
#run ⇒ Object
private
Original name for Shellwords#parse.
Class Method Details
.alt_escape(cmdline) ⇒ Object
Escape special characters used in most unix shells to use it, eg. with system().
This differs from Ruby’s #escape in that it does not escape shell variables, e.g. $0.
12 13 14 |
# File 'lib/standard/facets/shellwords.rb', line 12 def alt_escape(cmdline) cmdline.gsub(/([\\\t\| &`<>)('"])/) { |s| '\\' << s } end |
.dos_escape(cmdline) ⇒ Object
Escape special character used in DOS-based shells.
TODO: How to integrate with rest of system?
-
Use platform condition?
-
Use separate dos_xxx methods?
-
Put in separate PowerShellwords module?
CREDIT: Lavir the Whiolet
30 31 32 |
# File 'lib/standard/facets/shellwords.rb', line 30 def dos_escape(cmdline) '"' + cmdline.gsub(/\\(?=\\*\")/, "\\\\\\").gsub(/\"/, "\\\"").gsub(/\\$/, "\\\\\\").gsub("%", "%%") + '"' end |
.parse(argv, opts) ⇒ Object Also known as: run
The coolest little arguments parser in all of Rubyland.
CREDIT: Michel Martens
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/standard/facets/shellwords.rb', line 37 def parse(argv, opts) argv = (String === argv ? shellwords(argv) : argv.to_a.dup) args = [] while argv.any? item = argv.shift flag = opts[item] if flag # Work around lambda semantics in 1.8.7. arity = [flag.arity, 0].max # Raise if there are not enough parameters # available for the flag. if argv.size < arity raise ArgumentError end # Call the lambda with N items from argv, # where N is the lambda's arity. flag.call(*argv.shift(arity)) else # Collect the items that don't correspond to # flags. args << item end end args end |
Instance Method Details
#alt_escape(cmdline) ⇒ Object (private)
Escape special characters used in most unix shells to use it, eg. with system().
This differs from Ruby’s #escape in that it does not escape shell variables, e.g. $0.
12 13 14 |
# File 'lib/standard/facets/shellwords.rb', line 12 def alt_escape(cmdline) cmdline.gsub(/([\\\t\| &`<>)('"])/) { |s| '\\' << s } end |
#dos_escape(cmdline) ⇒ Object (private)
Escape special character used in DOS-based shells.
TODO: How to integrate with rest of system?
-
Use platform condition?
-
Use separate dos_xxx methods?
-
Put in separate PowerShellwords module?
CREDIT: Lavir the Whiolet
30 31 32 |
# File 'lib/standard/facets/shellwords.rb', line 30 def dos_escape(cmdline) '"' + cmdline.gsub(/\\(?=\\*\")/, "\\\\\\").gsub(/\"/, "\\\"").gsub(/\\$/, "\\\\\\").gsub("%", "%%") + '"' end |
#escape(cmdline) ⇒ Object
17 18 19 |
# File 'lib/standard/facets/shellwords.rb', line 17 def escape(cmdline) cmdline.gsub(/([\\\t\| &`<>)('"])\$/) { |s| '\\' << s } end |
#parse(argv, opts) ⇒ Object (private)
The coolest little arguments parser in all of Rubyland.
CREDIT: Michel Martens
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/standard/facets/shellwords.rb', line 37 def parse(argv, opts) argv = (String === argv ? shellwords(argv) : argv.to_a.dup) args = [] while argv.any? item = argv.shift flag = opts[item] if flag # Work around lambda semantics in 1.8.7. arity = [flag.arity, 0].max # Raise if there are not enough parameters # available for the flag. if argv.size < arity raise ArgumentError end # Call the lambda with N items from argv, # where N is the lambda's arity. flag.call(*argv.shift(arity)) else # Collect the items that don't correspond to # flags. args << item end end args end |
#run ⇒ Object (private)
Original name for Shellwords#parse.
64 |
# File 'lib/standard/facets/shellwords.rb', line 64 alias_method :run, :parse |