#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x

print_set_version() {
  echo "<version> should be a string matching a Ruby version known by rbenv."

  local versions="$(rbenv-versions --bare)"
  if [ -z "$versions" ]; then
    echo "There are currently no Ruby versions installed for rbenv."
  else
    echo "The currently installed Ruby versions are:"
    echo "$versions" | sed 's/^/  /'
  fi

  echo
  echo "The special version string 'system' will use your default system Ruby."
}

case "$1" in
"") echo "usage: rbenv <command> [<args>]

Some useful rbenv commands are:
   commands      List all rbenv commands
   rehash        Rehash rbenv shims (run this after installing binaries)
   global        Set or show the global Ruby version
   local         Set or show the local directory-specific Ruby version
   shell         Set or show the shell-specific Ruby version
   version       Show the current Ruby version
   versions      List all Ruby versions known by rbenv
   which         Show the full path for the given Ruby command
   whence        List all Ruby versions with the given command

See 'rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/sstephenson/rbenv#readme"
;;
global) echo "usage: rbenv global <version>

Sets the global Ruby version. You can override the global version at
any time by setting a directory-specific version with \`rbenv local'
or by setting the RBENV_VERSION environment variable.

$(print_set_version)"
;;
local) echo "usage: rbenv local <version>
       rbenv local --unset

Sets the local directory-specific Ruby version by writing the version
name to a file named '.rbenv-version'.

When you run a Ruby command, rbenv will look for an '.rbenv-version'
file in the current directory and each parent directory. If no such
file is found in the tree, rbenv will use the global Ruby version
specified with \`rbenv global', or the version specified in the
RBENV_VERSION environment variable.

$(print_set_version)"
;;
shell) echo "usage: rbenv shell <version>
       rbenv shell --unset

Sets a shell-specific Ruby version by setting the 'RBENV_VERSION'
environment variable in your shell. This version overrides both
project-specific versions and the global version.

$(print_set_version)"
;;
which) echo "usage: rbenv which <command>

Displays the full path to the binary that rbenv will execute when you
run the given command."
;;
whence) echo "usage: rbenv whence <command>

Lists all Ruby versions with the given command installed."
;;
*)
  command_path="$(command -v "rbenv-$1" || true)"
  if [ -n "$command_path" ]; then
    echo "Sorry, the \`$1' command isn't documented yet."
    echo
    echo "You can view the command's source here:"
    echo "$command_path"
    echo
  else
    echo "rbenv: no such command \`$1'"
  fi
esac
