module RSpec::Core::ShellEscape

@private Deals with the fact that ‘shellwords` only works on POSIX systems.

Constants

SHELLS_ALLOWING_UNQUOTED_IDS

Known shells that require quoting: zsh, csh, tcsh.

Feel free to add other shells to this list that are known to allow ‘rspec ./some_spec.rb` syntax without quoting the id.

@private

Public Instance Methods

# File rspec-core/lib/rspec/core/shell_escape.rb, line 32
def conditionally_quote(id)
  return id if shell_allows_unquoted_ids?
  quote(id)
end

:nocov:

Alias for: quote
# File rspec-core/lib/rspec/core/shell_escape.rb, line 8
def quote(argument)
  "'#{argument.to_s.gsub("'", "\\\\'")}'"
end
Also aliased as: escape
# File rspec-core/lib/rspec/core/shell_escape.rb, line 37
def shell_allows_unquoted_ids?
  # Note: ENV['SHELL'] isn't necessarily the shell the user is currently running.
  # According to http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html:
  # "This variable shall represent a pathname of the user's preferred command language interpreter."
  #
  # It's the best we can easily do, though. We err on the side of safety (quoting
  # the id when not actually needed) so it's not a big deal if the user is actually
  # using a different shell.
  SHELLS_ALLOWING_UNQUOTED_IDS.include?(ENV['SHELL'].to_s.split('/').last)
end