#!/usr/bin/env bash add() { token=${1:-""} eval "${token}_flag=1" shift if [[ -n "$format" ]] then [[ ${previous_is_format_var:-0} == 1 ]] && eval "${token}_prefix_flag=1" format="${format}\$${token}" else format="\$${token}" fi previous_is_format_var=1 } add_raw_token() { previous_is_format_var=0 token=${1:-""} format="${format:-""}${token}" } rvm_gemset_separator="${rvm_gemset_separator:-"@"}" if [[ "${GEM_HOME:-}" == *rvm* && "$ruby_string" != "$rvm_path/bin/ruby" ]] then unset format while (( $# )) do case "$1" in i|interpreter) add "interpreter" ;; v|version) add "version" ;; p|patchlevel) add "patchlevel" ;; r|revision) add "revision" ;; a|architecture) add "architecture" ;; g|gemset) add "gemset" ;; u|unicode) add "unicode" ;; s|system) ;; #skip when in ruby -d|--no-default) no_default=1 ;; *) add_raw_token "$1" ;; esac shift done if [[ -z "${format:-""}" && -z "$no_default" ]] then for default in interpreter version patchlevel gemset do add "$default" done fi gemset="" ruby_string="${GEM_HOME:-""}" ruby_string="${ruby_string##*/}" case "${GEM_HOME:-""}" in (*${rvm_gemset_separator:-"@"}*) if (( ${gemset_flag:-0} )) then gemset="${rvm_gemset_separator:-"@"}${ruby_string##*${rvm_gemset_separator:-"@"}}" fi ruby_string="${ruby_string%%${rvm_gemset_separator:-"@"}*}" ;; esac if [[ -n "$no_default" && -n "${format:-""}" ]] then # Do not display anything if no default flag was provided # and we are using the default ruby # Only people who explicitly ask for this will have the # slight performance penalty associated. [[ "$(rvm tools identifier)" != "$(rvm alias show default)" ]] || exit 0 fi strings=(${ruby_string//-/ }) if (( ${interpreter_flag:-0} )) || [[ -n "$unicode_flag" ]] then interpreter=${strings[0]} (( ${interpreter_prefix_flag:-0} )) && interpreter="-${interpreter}" fi if (( ${version_flag:-0} )) || [[ -n "$unicode_flag" ]] then version=${strings[1]} (( ${version_prefix_flag:-0} )) && version="-${version}" fi if (( ${#strings[@]} > 2 )) then if (( ${patchlevel_flag:-0} )) then patchlevel=${strings[2]} (( ${patchlevel_prefix_flag:-0} )) && patchlevel="-${patchlevel}" fi fi if (( ${architecture_flag:-0} )) then architecture="$(echo "$(ruby -v)" | sed 's/^.*\[//' | sed 's/\].*$//')" (( ${architecture_prefix_flag:-0} )) && architecture="-${architecture}" fi if (( ${unicode_flag:-0} )) then case "$interpreter" in (jruby) unicode="☯" ;; (rbx) unicode="❖" ;; (ree) unicode="✈" ;; (macruby) unicode="⌘" ;; (maglev) unicode="㎖" ;; (ironruby) unicode="♭" ;; (system) unicode="★" ;; (topaz) unicode="🐍" ;; # TODO: what is this? can we use something more fonts support? (truffleruby) unicode="🚀" ;; (opal) unicode="⬢" ;; (ruby) case ${version:-""} in (1.8.6) unicode="➇❻" ;; (1.8.7) unicode="➇❼" ;; (1.8*) unicode="➇" ;; (1.9.1) unicode="➈❶" ;; (1.9.2) unicode="➈❷" ;; (1.9.3) unicode="➈❸" ;; (2.0.0) unicode="➋" ;; (2.1.*) unicode="➋➀" ;; (2.2.*) unicode="➋➁" ;; (2.3.*) unicode="➋➂" ;; (2.4.*) unicode="➋➃" ;; (*) unicode="⦿" ;; esac ;; (*) unicode="⦿" ;; esac if echo "$ruby_string" | GREP_OPTIONS="" \grep '-head' >/dev/null 2>&1 then unicode="${unicode}⚡" fi (( ${unicode_prefix_flag:-0} )) && unicode="-${unicode}" fi eval "echo \"$format\"" else while (( $# )) do case "$1" in s|system) echo "system" ;; esac shift done fi