#!/bin/sh # Shell script implementing the Aliens interface for RubyGems. # Copyright 2009 Michael Homer. Released under the GNU GPL 2 or later. getversion() { prog="$1" gem list "$prog" | sed -n -e '/'"$prog"' / { s/.*(\([^),]\+\)[),].*/\1/ p ; q} ' } in_version_range() { lower="$1" ver="$2" upper="$3" [ "$ver" ] || return 1 [ "$ver" != "$lower" -a "$(GuessLatest "$ver" "$lower")" = "$lower" ] && return 1 [ "$upper" ] || return 0 [ "$(GuessLatest "$ver" "$upper")" = "$upper" ] || return 1 [ "$ver" = "$upper" -a "$ver" != "$lower" ] && return 1 return 0 } getinstallversion() { prog="$1" for V in $(gem list --remote "$prog" | sed -n -e '/'"$prog"' / { s/.*(\([^)]\+\))/\1/; s/,//g; p }') do if in_version_range "$2" "$V" "$3" then echo $V return 0 fi done } install() { prog="$1" ver="$2" if [ "$ver" ] then gem install "$prog" --version "$ver" else gem install "$prog" fi } command="$1" prog="$2" case "$command" in --getversion) echo $(getversion "$2") ;; --getinstallversion) echo $(getinstallversion "$2" "$3" "$4") ;; --greater-than) ver=$(getversion "$2") latest=$(GuessLatest "$ver" "$3") [ "$latest" = "$3" ] && exit 1 || exit 0 ;; --met|--within-range|--interval) prog="$2" lower="$3" upper="$4" ver=$(getversion "$prog") in_version_range "$lower" "$ver" "$upper" ;; --have-manager) which gem >/dev/null 2>&1 || exit 1 ;; --get-manager-rule) echo "Ruby >= 1.9" ;; --install) install "$2" "$3" ;; esac # is ridiculous