# Ruby contribution layer for Spacemacs
![logo](img/ruby.gif)
**Table of Contents**
- [Ruby contribution layer for Spacemacs](#ruby-contribution-layer-for-spacemacs)
- [Description](#description)
- [Install](#install)
- [Ruby version manager](#ruby-version-manager)
- [Prerequisites](#prerequisites)
- [Ruby version management](#ruby-version-management)
- [Rails support](#rails-support)
- [Key bindings](#key-bindings)
- [enh-ruby-mode](#enh-ruby-mode)
- [ruby-test-mode](#ruby-test-mode)
## Description
This layer aims at providing support for the Ruby language using
[enh-ruby-mode][] and [robe-mode][].
## Install
To use this contribution add it to your `~/.spacemacs`
```elisp
(setq-default dotspacemacs-configuration-layers '(ruby))
```
### Prerequisites
Some of the advanced features supported by this layer depend on external gems
that need to be installed in the context of your project (see below for guidance
based on your version manager):
* `pry` and `pry-doc` are required for *jump to definition* and *code documentation* (`robe-mode`)
* `ruby_parser` is required for *goto-step_definition* in `feature-mode`
You can install the gems in the context of your current project by
adding them to the `Gemfile`, e.g.:
```ruby
gem 'pry'
```
or on the command line (please refer to your ruby version manager
specific documentation for details and caveats):
```shell
$ gem install pry
```
### Ruby version management
This layer supports the use of [RVM][] and [Rbenv][].
To enable it, set the `ruby-version-manager` var in your `~/.spacemacs`:
```elisp
(defun dotspacemacs/init ()
(setq-default ruby-version-manager 'rbenv)
)
```
Possible values are `rbenv` and `rvm`.
### Rails support
Rails support is available through [projectile-rails][].
To enable it, set the `ruby-enable-ruby-on-rails-support` var in your
`~/.spacemacs`:
```elisp
(defun dotspacemacs/init ()
(setq-default ruby-enable-ruby-on-rails-support t)
)
```
This will also add [haml-mode][] (for templates written in [haml language][]
and [feature-mode][] for [Cucumber][] support.
## Key bindings
### Ruby (enh-ruby-mode, robe, inf-ruby)
Key binding | Description
---------------------|------------
SPC m g g | go to definition (robe-jump)
SPC m h d | go to Documentation
SPC m s f | send function definition
SPC m s F | send function definition and switch to REPL
SPC m s i | start REPL
SPC m s r | send region
SPC m s R | send region and switch to REPL
SPC m s s | switch to REPL
### ruby-test-mode
ruby-test-mode comes bundled with spacemacs, but this contribution adds
a couple of useful keybindings:
Key binding | Description
---------------------|------------
SPC m t b | run test file
SPC m t t | run test at pointer
### Rails (projectile-rails)
#### Code Navigation
Key binding | Description
-----------------------|------------
SPC m r f a | find localization file
SPC m r f c | find controller
SPC m r f e | find environment file
SPC m r f f | find feature
SPC m r f h | find helper
SPC m r f i | find initializer
SPC m r f j | find javascript file
SPC m r f l | find library
SPC m r f m | find model
SPC m r f n | find migration
SPC m r f o | find log
SPC m r f p | find spec file
SPC m r f r | find rake task
SPC m r f s | find stylesheet file
SPC m r f t | find test
SPC m r f u | find fixture
SPC m r f v | find view
SPC m r f y | find layout
SPC m r f @ | find mailer
SPC m r g c | go to current controller
SPC m r g d | go to DB schema
SPC m r g e | go to DB seeds
SPC m r g h | go to current helper
SPC m r g j | go to current javascript
SPC m r g g | go to Gemfile
SPC m r g m | go to current model
SPC m r g n | go to current migration
SPC m r g p | go to current spec
SPC m r g r | go to routes
SPC m r g s | go to current stylesheet
SPC m r g t | go to current test
SPC m r g u | go to current fixture
SPC m r g v | go to current view
SPC m r g z | go to spec helper
SPC m r g . | go to file at point (faster but less powerful than SPC m g g)
#### Refactoring
Key binding | Description
-----------------------|------------
SPC m r R x | extract region into partial
#### RUN commands
Key binding | Description
-----------------------|------------
SPC m r c c | run rails generator
SPC m r i | start rails console
SPC m r s r | reload Rails project
SPC m r r : | run rake task
SPC m r x s | start rails server
[enh-ruby-mode]: https://github.com/zenspider/enhanced-ruby-mode
[robe-mode]: https://github.com/dgutov/robe
[Rbenv]: https://github.com/sstephenson/rbenv
[RVM]: https://rvm.io/
[projectile-rails]: https://github.com/asok/projectile-rails
[haml-mode]: https://github.com/nex3/haml-mode
[feature-mode]: https://github.com/michaelklishin/cucumber.el
[rspec-mode]: https://github.com/pezra/rspec-mode
[Cucumber]: http://cukes.info
[haml language]: http://haml.info