Hint #3October 1, 2011
Handle Ruby Versions
RVM it's an extremly usefull tool if you have to work with Ruby, different Ruby projects and specific Ruby Gemsets for your projects. RVM offers the solution for these needs by creating environments bound to a specific Ruby version and a set of Ruby Gems. This possibility avoids Gem version conflicts between your projects and also makes it easy to create test environments.
Now what we want is to bring this into our beloved Emacs. And here comes rvm.el along, an Emacs package by Yves Senn. The rvm.el package integrates Emacs with RVM and gives us a few nifty functions.
One of the great advantages which rvm.el brings is that packages like
inf-ruby and mode-compile automatically benefit from it and use the
precise Ruby version.
Here's how to use it
First you have to install rvm.el; you get the source on Github.
Then you need to put the rvm.el somewhere in your load-path
and add the following to your ~/.emacs file.
;; Load rvm.el
(require 'rvm)
;; use rvm’s default ruby for the current Emacs session
(rvm-use-default)
Done, now you're ready to use rvm.el.
The first function you want to know is rvm-activate-corresponding-ruby,
this interactive function activates the corresponding Ruby version for
the file in the current buffer. What the function does is, to search
for an .rvmrc file and activate the selected Ruby version. If there
is no .rvmrc file, the default ruby will be used instead.
Maybe you want to switch manually to a specific Ruby version, then you
could use the rvm-use function, which is also as an interactive
function available.
If you're working with Ruby on a daily basis and have to rummage through
different Gem source code from time to time, then you will definitely
need the interactive rvm-open-gem function. This function gives you a
list of all the Gems which are installed for the currently activated
Ruby version and shows them in the minibuffer. Now you just have to decide
which one to open.
In addition to that, if you have Perspective installed, rvm-open-gem will
open the chosen Gem directory in a new perspective, labeled with the
Gem's name. Now it's easy to switch back and forth between your project and
the Gem source.
More functions
rvm-autodetect-ruby will add a ruby-mode-hook which will call
rvm-activate-corresponding-ruby to detect the Ruby version.
rvm-autodetect-ruby-stop is the vice-versa function, it will remove
the ruby-mode-hook which calls the rvm-activate-corresponding-ruby function.
rvm-use-default uses the rvm default configured Ruby as the
current Ruby version.
Some customization
You can use rvm.el in your own Emacs scripts easily. Here an
example how rspec-mode uses it:
(defcustom rspec-use-rvm nil
"t when RVM in is in use. (Requires rvm.el)"
:type 'boolean
:group 'rspec-mode)
And in the rspec-compile function it uses the
rvm-activate-corresponding-ruby before it runs the specs.
The following example code is simplified.
(defun rspec-compile ()
;; some code.....
(if rspec-use-rvm
(rvm-activate-corresponding-ruby))
;; more code ..
)
Summary
Rvm.el is a great package and if you're a Ruby programmer it will make your daily adventures with Ruby a lot more exciting.
The source code is available on the rvm.el repository on Github.
blog comments powered by Disqus