aboutsummaryrefslogtreecommitdiff
path: root/rbpm.sh
diff options
context:
space:
mode:
authorDavid Vazgenovich Shakaryan <dvshakaryan@gmail.com>2025-12-19 22:40:15 -0800
committerDavid Vazgenovich Shakaryan <dvshakaryan@gmail.com>2025-12-19 22:40:15 -0800
commitab5766625df66a33101d96fe8b717a19707e6598 (patch)
treed9da4754b0f57365dac2f38b187a2b75b38e1de5 /rbpm.sh
parentf1301dd07b68370fd839ee9d4f6ff96997336730 (diff)
downloadgbpm-0.4.tar.gz
gbpm-0.4.tar.xz
genericisev0.4
Diffstat (limited to 'rbpm.sh')
-rwxr-xr-xrbpm.sh182
1 files changed, 0 insertions, 182 deletions
diff --git a/rbpm.sh b/rbpm.sh
deleted file mode 100755
index 88077ff..0000000
--- a/rbpm.sh
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright 2014 David Vazgenovich Shakaryan
-# Distributed under the terms of the MIT License.
-#
-# rbpm (ruby path mangler)
-# https://git.potato.am/rbpm.git/
-# Manage multiple Ruby installations with no black magic.
-#
-# In order to prevent environment pollution, the output of this script
-# is a list of commands which must be sourced. This can be achieved
-# through a simple shell function:
-#
-# rbpm() { source <(/path/to/rbpm.sh "${@}"); }
-#
-# Placing the above function inside ~/.bashrc (or equivalent) will load
-# it upon starting your shell.
-
-RBPM_VERSION='0.3'
-
-: ${RUBIES_PATH:="${HOME}/.rubies"}
-
-_echo() {
- echo "echo '${@//\'/\'\\\'\'}'"
-}
-
-_export() {
- echo "export PATH='${PATH//\'/\'\\\'\'}'"
- echo 'hash -r'
-}
-
-_warn() {
- echo "echo 'rbpm: ${@//\'/\'\\\'\'}' 1>&2"
-}
-
-_die() {
- [[ -n "${@}" ]] && _warn "${@}"
-
- echo 'false'
- exit 1
-}
-
-_populate_dirs() {
- [[ -d "${RUBIES_PATH}" ]] \
- || _die "directory ${RUBIES_PATH} does not exist"
-
- mapfile -td $'\0' dirs < <(shopt -s nullglob;
- printf '%s\0' "${RUBIES_PATH}"/* | sort -zV)
-
- [[ -n "${dirs}" ]] || _die "directory ${RUBIES_PATH} is empty"
-}
-
-_populate_selected() {
- local dir dirs
-
- mapfile -td : dirs < <(printf %s "${PATH}")
-
- for dir in "${dirs[@]}"; do
- if [[ "${dir}" == "${RUBIES_PATH}/"* ]]; then
- dir="${dir%/bin}"
- selected+=("${dir##*/}")
- fi
- done
-
- [[ "${#selected[@]}" -ne 0 ]] || return 1
- [[ "${#selected[@]}" -eq 1 ]] \
- || _warn 'warning: multiple managed paths found in PATH'
-}
-
-_clear() {
- local dir dirs cdirs
-
- mapfile -td : dirs < <(printf %s "${PATH}")
-
- for dir in "${dirs[@]}"; do
- if [[ "${dir}" == "${RUBIES_PATH}/"* ]]; then
- _echo "removing ${dir} from PATH"
- else
- cdirs+=("${dir}")
- fi
- done
-
- [[ "${#cdirs[@]}" -ne "${#dirs[@]}" ]] || return 1
-
- PATH="$(IFS=':'; echo "${cdirs[*]}")"
-}
-
-_add() {
- _echo "adding ${1}/bin to PATH"
-
- PATH="${1}/bin:${PATH}"
-}
-
-rbpm_ls() {
- local dir dirs selected str
-
- _populate_dirs
- _populate_selected
-
- for dir in "${dirs[@]}"; do
- str=" ${dir##*/}"
-
- [[ "${dir##*/}" == "${selected}" ]] && str="${str/ /*}"
-
- _echo "${str}"
- done
-}
-
-rbpm_get() {
- local dir selected
-
- _populate_selected || _die 'no managed path found in PATH'
-
- for dir in "${selected[@]}"; do
- _echo "${dir}"
- done
-}
-
-rbpm_set() {
- [[ -n "${1}" ]] || _die 'set command requires an argument'
-
- local dir dirs match match_start
-
- _populate_dirs
-
- for dir in "${dirs[@]}"; do
- [[ "${dir##*/}" == *"${1}"* ]] || continue
-
- match="${dir}"
-
- # match from start of version is preferred. we assume the
- # version is at the beginning of the directory name or
- # immediately following a hyphen. this avoids unintuitive
- # behaviour like `2.1' matching `2.2.1' over `2.1.0'.
- if [[ "${dir##*/}" == "${1}"* ||
- "${dir##*/}" == *-"${1}"* ]]; then
- match_start="${dir}"
- fi
- done
-
- [[ -n "${match}" ]] || _die 'no matching ruby found'
- [[ -n "${match_start}" ]] && match="${match_start}"
-
- _clear
- _add "${match}"
- _export
-}
-
-rbpm_clear() {
- _clear || _die 'no managed path found in PATH'
- _export
-}
-
-rbpm_version() {
- _echo "rbpm ${RBPM_VERSION}"
-}
-
-rbpm_help() {
- _echo 'Usage: rbpm <command> [args]'
- _echo
- _echo 'Commands:'
- _echo ' ls List all available rubies'
- _echo ' get Display currently selected ruby'
- _echo ' set Select specified ruby'
- _echo ' clear Unselect any selected rubies'
- _echo ' version Display rbpm version'
-}
-
-case "${1}" in
- 'ls')
- rbpm_ls ;;
- 'get')
- rbpm_get ;;
- 'set')
- rbpm_set "${2}" ;;
- 'clear')
- rbpm_clear ;;
- 'version')
- rbpm_version ;;
- *)
- rbpm_help ;;
-esac