Atom + ruby-testでchrubyを使う

環境

  • Atom: 1.4.1
  • ruby-test: 0.9.17
  • chruby: 0.3.9

bashの場合

chruby/share/chruby/chruby.shchruby/share/chruby/auto.sh.bashrc などで読み込んでいれば特に設定はいらない。

zshの場合

chruby/share/chruby/chruby.shchruby/share/chruby/auto.sh.zshrc などで読み込んだだけではダメで、各テストコマンドの前に chruby_auto && をつける必要がある。

RSpec について設定した config.cson はこんな感じ。

  "ruby-test":
    rspecAllCommand: "chruby_auto && rspec --tty spec"
    rspecFileCommand: "chruby_auto && rspec --tty {relative_path}"
    rspecSingleCommand: "chruby_auto && rspec --tty {relative_path}:{line_number}"
    shell: "zsh"
    specFramework: "rspec"

なぜ chruby_auto && が必要なのか

chruby_autochruby/share/chruby/auto.sh で定義されている関数で、ディレクトリを親方向にたどって .ruby-version が見つかったら、chruby でそのバージョンのrubyを使うようにする。
zshの場合は定義するとともに $preexec_functions にも登録するので、各コマンドの実行前に自動で実行される*1

ruby-test はテストコマンドをシェルを立ち上げて実行しているが、本来ならば実行されてほしい chruby_auto が実行されていない。
$preexec_functionschruby_auto が登録されていることは確認できたのだが、どうやら肝心の $preexec_functions 自体が実行されていないっぽい。

というところまでわかったのだが、これ以上はzsh力が足りなくて調べるのを断念した。

参照