Module Shellwords
In: lib/facets/standard/facets/shellwords.rb

Methods

alt_escape   dos_escape   escape   run  

Public Instance methods

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.

[Source]

# File lib/facets/standard/facets/shellwords.rb, line 12
  def alt_escape(cmdline)
    cmdline.gsub(/([\\\t\| &`<>)('"])/) { |s| '\\' << s }
  end

Escape special character used in DOS-based shells.

TODO: How to integrate with rest of system?

  1. Use platform condition?
  2. Use separate dos_xxx methods?
  3. Put in separate PowerShellwords module?

CREDIT: Lavir the Whiolet

[Source]

# File lib/facets/standard/facets/shellwords.rb, line 30
  def dos_escape(cmdline)
    '"' + cmdline.gsub(/\\(?=\\*\")/, "\\\\\\").gsub(/\"/, "\\\"").gsub(/\\$/, "\\\\\\").gsub("%", "%%") + '"'
  end

[Source]

# File lib/facets/standard/facets/shellwords.rb, line 17
    def escape(cmdline)
      cmdline.gsub(/([\\\t\| &`<>)('"])/) { |s| '\\' << s }
    end

The coolest little arguments parser in all of Rubyland.

CREDIT: Michel Martens

[Source]

# File lib/facets/standard/facets/shellwords.rb, line 37
  def run(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

[Validate]