Skip to content

Commit a6f4763

Browse files
committed
Adjust version matching
Addresses #318 * Breaks out ruby selection into function for testing. * Removes `*"$1"*` matching and adds `ruby-"$1"*` and `"$1"*` matching.
1 parent c519a12 commit a6f4763

File tree

2 files changed

+68
-10
lines changed

2 files changed

+68
-10
lines changed

share/chruby/chruby.sh

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,20 @@ EOF
5858
fi
5959
}
6060

61+
function chruby_ruby_select()
62+
{
63+
local dir
64+
for dir in "${RUBIES[@]}"; do
65+
dir="${dir%%/}"
66+
case "${dir##*/}" in
67+
"$1") matched_ruby="$dir" && break;;
68+
ruby-"$1"*) matched_ruby="$dir";;
69+
"$1"*) matched_ruby="$dir";;
70+
esac
71+
done
72+
}
73+
74+
6175
function chruby()
6276
{
6377
case "$1" in
@@ -80,22 +94,16 @@ function chruby()
8094
;;
8195
system) chruby_reset ;;
8296
*)
83-
local dir match
84-
for dir in "${RUBIES[@]}"; do
85-
dir="${dir%%/}"
86-
case "${dir##*/}" in
87-
"$1") match="$dir" && break ;;
88-
*"$1"*) match="$dir" ;;
89-
esac
90-
done
97+
local matched_ruby
98+
chruby_ruby_select "$1"
9199

92-
if [[ -z "$match" ]]; then
100+
if [[ -z "$matched_ruby" ]]; then
93101
echo "chruby: unknown Ruby: $1" >&2
94102
return 1
95103
fi
96104

97105
shift
98-
chruby_use "$match" "$*"
106+
chruby_use "$matched_ruby" "$*"
99107
;;
100108
esac
101109
}

test/chruby_test.sh

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,54 @@ function test_chruby_invalid_ruby()
6868
assertEquals "did not return 1" 1 $?
6969
}
7070

71+
function test_chruby_ruby_select_by_major_minor()
72+
{
73+
RUBIES=(
74+
/opt/rubies/ruby-2.0.0-p100
75+
/opt/rubies/ruby-2.1.0
76+
/opt/rubies/ruby-2.2.0
77+
/opt/rubies/ruby-2.2.1
78+
)
79+
80+
chruby_ruby_select "2.0"
81+
assertEquals "did not match major.minor" "/opt/rubies/ruby-2.0.0-p100" "$matched_ruby"
82+
83+
chruby_ruby_select "2.1"
84+
assertEquals "did not match major.minor" "/opt/rubies/ruby-2.1.0" "$matched_ruby"
85+
}
86+
87+
function test_chruby_ruby_select_by_implementation()
88+
{
89+
RUBIES=(
90+
/opt/rubies/ruby-2.2.10
91+
/opt/rubies/rbx-2.2.10
92+
)
93+
94+
chruby_ruby_select "rbx"
95+
assertEquals "did not match by implementation" "/opt/rubies/rbx-2.2.10" "$matched_ruby"
96+
}
97+
98+
function test_chruby_ruby_select_exact()
99+
{
100+
RUBIES=(
101+
/opt/rubies/2.1.0
102+
/opt/rubies/ruby-2.1.0
103+
/opt/rubies/ruby-2.1.1
104+
)
105+
106+
chruby_ruby_select "ruby-2.1.0"
107+
assertEquals "did not match exact" "/opt/rubies/ruby-2.1.0" "$matched_ruby"
108+
}
109+
110+
function test_chruby_ruby_select_last()
111+
{
112+
RUBIES=(
113+
/opt/rubies/ruby-1.9.3-p100
114+
/opt/rubies/ruby-1.9.3-p200
115+
)
116+
117+
chruby_ruby_select "1.9.3"
118+
assertEquals "did not match last version listed" "/opt/rubies/ruby-1.9.3-p200" "$matched_ruby"
119+
}
120+
71121
SHUNIT_PARENT=$0 . $SHUNIT2

0 commit comments

Comments
 (0)