diff --git a/doc/man/chruby.1.md b/doc/man/chruby.1.md index 15a21962..56bd0b79 100644 --- a/doc/man/chruby.1.md +++ b/doc/man/chruby.1.md @@ -17,9 +17,6 @@ ## OPTIONS -`--reload` - Reloads the list of available Rubies - `-h`, `--help` `-v`, `--version` diff --git a/share/chruby/chruby.sh b/share/chruby/chruby.sh index eba5886f..b9fd8075 100644 --- a/share/chruby/chruby.sh +++ b/share/chruby/chruby.sh @@ -1,29 +1,32 @@ CHRUBY_VERSION="1.0.0" CHRUBY_DIRS=("$PREFIX/opt/rubies" "$HOME/.rubies") -function chruby_init() +function chruby_list() { - local dir + local rubies_dir ruby_dir - CHRUBY_RUBIES=() - for dir in "${CHRUBY_DIRS[@]}"; do - if [[ -d "$dir" ]] && [[ -n "$(ls -A "$dir")" ]]; then - CHRUBY_RUBIES+=("$dir"/*) - fi + for rubies_dir in "${CHRUBY_DIRS[@]}"; do + for ruby_dir in "${rubies_dir}"/*; do + if [[ -d "$ruby_dir" ]]; then + echo "$ruby_dir" + fi + done done } function chruby_find() { - local dir ruby match + local ruby_dir ruby_name match + + while IFS= read ruby_dir; do + ruby_dir="${ruby_dir%%/}" + ruby_name="${ruby_dir##*/}" - for dir in "${CHRUBY_RUBIES[@]}"; do - dir="${dir%%/}"; ruby="${dir##*/}" - case "$ruby" in - "$1") match="$dir" && break ;; - *"$1"*) match="$dir" ;; + case "$ruby_name" in + "$1") match="$ruby_dir" && break ;; + *"$1"*) match="$ruby_dir" ;; esac - done + done <<< $(chruby_list) echo -n "$match" } @@ -91,23 +94,24 @@ function chruby() { case "$1" in -h|--help) - echo "usage: chruby [--reload | RUBY|VERSION [RUBYOPT...] | system]" + echo "usage: chruby [RUBY|VERSION [RUBYOPT...] | system]" ;; -V|--version) echo "chruby: $CHRUBY_VERSION" ;; - --reload) chruby_init ;; "") - local dir ruby + local ruby_dir ruby_name - for dir in "${CHRUBY_RUBIES[@]}"; do - dir="${dir%%/}"; ruby="${dir##*/}" - if [[ "$dir" == "$RUBY_ROOT" ]]; then - echo " * ${ruby}${RUBYOPT:+ $RUBYOPT}" + while IFS= read ruby_dir; do + ruby_dir="${ruby_dir%%/}" + ruby_name="${ruby_dir##*/}" + + if [[ "$ruby_dir" == "$RUBY_ROOT" ]]; then + echo " * ${ruby_name}${RUBYOPT:+ $RUBYOPT}" else - echo " ${ruby}" + echo " ${ruby_name}" fi - done + done <<< $(chruby_list) ;; system) chruby_reset ;; *) @@ -124,5 +128,3 @@ function chruby() ;; esac } - -chruby_init diff --git a/test/unit/chruby_find_test.sh b/test/unit/chruby_find_test.sh index 8db65f53..2bf9d188 100755 --- a/test/unit/chruby_find_test.sh +++ b/test/unit/chruby_find_test.sh @@ -2,15 +2,19 @@ function setUp() { - test_ruby_path1="/path/to/ruby1" - test_ruby_path2="/path/to/ruby2" + test_ruby1="ruby1" + test_ruby2="ruby2" - CHRUBY_RUBIES=("$test_ruby_path1" "$test_ruby_path2") + test_ruby_path1="${test_root_dir}/opt/rubies/${test_ruby1}" + test_ruby_path2="${test_home_dir}/.rubies/${test_ruby2}" + + mkdir -p "$test_ruby_path1" + mkdir -p "$test_ruby_path2" } function test_chruby_find_with_exact_name() { - local exact_match="${test_ruby_path2##*/}" + local exact_match="${test_ruby2}" local result="$(chruby_find "$exact_match")" assertEquals "did not return the correct ruby dir" \ @@ -19,17 +23,16 @@ function test_chruby_find_with_exact_name() function test_chruby_find_with_exact_name_but_there_are_multiple_matches() { - CHRUBY_RUBIES=( - "$test_ruby_path1" - "${test_ruby_path1}-foo" - "$test_ruby_path2" - "${test_ruby_path2}-bar" - ) + mkdir -p "${test_root_dir}${test_ruby_path1}-foo" + mkdir -p "${test_home_dir}${test_ruby_path2}-bar" - local result="$(chruby_find "${test_ruby_path2##*/}")" + local result="$(chruby_find "$test_ruby2")" assertEquals "did not use the exact match first" \ "$test_ruby_path2" "$result" + + rmdir "${test_root_dir}${test_ruby_path1}-foo" + rmdir "${test_home_dir}${test_ruby_path2}-bar" } function test_chruby_find_with_a_substring() @@ -54,4 +57,10 @@ function test_chruby_find_when_cannot_find_match() assertEquals "did not return an empty string" "" "$result" } +function tearDown() +{ + rmdir "${test_ruby_path1}" + rmdir "${test_ruby_path2}" +} + SHUNIT_PARENT=$0 . $SHUNIT2 diff --git a/test/unit/chruby_init_test.sh b/test/unit/chruby_init_test.sh deleted file mode 100755 index e0e2c4e2..00000000 --- a/test/unit/chruby_init_test.sh +++ /dev/null @@ -1,37 +0,0 @@ -. ./test/unit/helper.sh - -function test_chruby_init_with_clean_env() -{ - unset CHRUBY_RUBIES - chruby_init - - assertEquals "did not reset CHRUBY_RUBIES" 1 ${#CHRUBY_RUBIES[@]} - - if [[ -n "$ZSH_VERSION" ]]; then - assertEquals "did not detect rubies in \$PREFIX/opt/rubies" \ - "$test_ruby_root" "${CHRUBY_RUBIES[1]}" - else - assertEquals "did not detect rubies in \$PREFIX/opt/rubies" \ - "$test_ruby_root" "${CHRUBY_RUBIES[0]}" - fi -} - -function test_chruby_init_with_modified_env() -{ - local new_path="/path/to/new/ruby" - - chruby_init - CHRUBY_RUBIES+=("$new_path") - - chruby_init - - if [[ -n "$ZSH_VERSION" ]]; then - assertEquals "did not reset CHRUBY_RUBIES" \ - "" "${CHRUBY_RUBIES[2]}" - else - assertEquals "did not reset CHRUBY_RUBIES" \ - "" "${CHRUBY_RUBIES[1]}" - fi -} - -SHUNIT_PARENT=$0 . $SHUNIT2 diff --git a/test/unit/chruby_test.sh b/test/unit/chruby_test.sh index 897cab0b..1124ec31 100755 --- a/test/unit/chruby_test.sh +++ b/test/unit/chruby_test.sh @@ -1,16 +1,11 @@ . ./test/unit/helper.sh -function setUp() -{ - original_rubies=("${CHRUBY_RUBIES[@]}") -} - function test_chruby_list_rubies() { local expected=" ${test_ruby_engine}-${test_ruby_version}" local output="$(chruby)" - assertEquals "did not correctly list CHRUBY_RUBIES" \ + assertEquals "did not correctly list the rubies in CHRUBY_DIRS" \ "$expected" "$output" } @@ -21,20 +16,27 @@ function test_chruby_list_rubies_when_a_ruby_is_active() local expected=" * ${test_ruby_engine}-${test_ruby_version}" local output="$(chruby)" - assertEquals "did not correctly list CHRUBY_RUBIES" \ + assertEquals "did not correctly list the rubies in CHRUBY_DIRS" \ "$expected" "$output" } function test_chruby_list_rubies_when_one_contains_a_space() { - local ruby_name="ruby" - local path_with_spaces="/path/with spaces/$ruby_name" + local ruby_name="ruby with spaces" + local ruby_dir="$test_home_dir/.rubies/$ruby_name" + mkdir -p "$ruby_dir" - CHRUBY_RUBIES=("$path_with_spaces") local output="$(chruby)" + local expected="$(cat <