diff --git a/layers/+lang/ruby/README.org b/layers/+lang/ruby/README.org index bfc32136f..9c283b0f9 100644 --- a/layers/+lang/ruby/README.org +++ b/layers/+lang/ruby/README.org @@ -8,9 +8,11 @@ - [[Install][Install]] - [[Prerequisites][Prerequisites]] - [[Ruby version management][Ruby version management]] + - [[Testing frameworks][Testing frameworks]] - [[Key bindings][Key bindings]] - [[Ruby (enh-ruby-mode, robe, inf-ruby, ruby-tools)][Ruby (enh-ruby-mode, robe, inf-ruby, ruby-tools)]] - - [[ruby-test-mode][ruby-test-mode]] + - [[RSpec-mode][RSpec-mode]] + - [[Ruby-test-mode][Ruby-test-mode]] - [[RuboCop][RuboCop]] * Description @@ -68,6 +70,17 @@ To enable it, set the =ruby-version-manager= var in your =~/.spacemacs=: Possible values are =rbenv= and =rvm=. +** Testing frameworks +This layer supports both RSpec and ruby-test. +By default RSpec is used, this is a change in the old behaviour. +To switch to using ruby-test set =ruby-use-ruby-test= to t: + +#+BEGIN_SRC emacs-lisp + (defun dotspacemacs/user-init () + (setq-default ruby-use-ruby-test t) + ) +#+END_SRC + * Key bindings ** Ruby (enh-ruby-mode, robe, inf-ruby, ruby-tools) @@ -88,9 +101,16 @@ Possible values are =rbenv= and =rvm=. | ~SPC m x :~ | Change string to symbol | | ~%~ | [[https://github.com/redguardtoo/evil-matchit][evil-matchit]] jumps between blocks | -** ruby-test-mode -ruby-test-mode comes bundled with spacemacs, but this contribution adds -a couple of useful keybindings: +** RSpec-mode + +| Key binding | Description | +|-------------+----------------------| +| ~SPC m t a~ | run all specs | +| ~SPC m t f~ | run last failed spec | +| ~SPC m t r~ | re-run last spec | +| ~SPC m t t~ | run spec at pointer | + +** Ruby-test-mode | Key binding | Description | |-------------+---------------------| diff --git a/layers/+lang/ruby/config.el b/layers/+lang/ruby/config.el index e8b1de033..2472f85e9 100644 --- a/layers/+lang/ruby/config.el +++ b/layers/+lang/ruby/config.el @@ -22,3 +22,6 @@ Otherwise use Enh Ruby Mode, which is the default.") (defvar ruby-version-manager nil "If non nil defines the Ruby version manager (i.e. rbenv, rvm)") + +(defvar ruby-use-ruby-test nil + "If non-nil, use `ruby-test-mode' package instead of `rspec-mode'.") diff --git a/layers/+lang/ruby/packages.el b/layers/+lang/ruby/packages.el index 148777c3f..e2969fee2 100644 --- a/layers/+lang/ruby/packages.el +++ b/layers/+lang/ruby/packages.el @@ -18,6 +18,7 @@ flycheck robe ruby-test-mode + rspec-mode ruby-tools rubocop )) @@ -26,6 +27,10 @@ (add-to-list 'ruby-packages 'enh-ruby-mode) (add-to-list 'ruby-packages 'ruby-mode)) +(if ruby-use-ruby-test + (add-to-list 'ruby-packages 'ruby-test-mode) + (add-to-list 'ruby-packages 'rspec-mode)) + (when ruby-version-manager (add-to-list 'ruby-packages ruby-version-manager)) @@ -42,9 +47,12 @@ (use-package rvm :defer t :init (rvm-use-default) - :config (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) + :config + (progn + (setq rspec-use-rvm t) + (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) (add-hook hook - (lambda () (rvm-activate-corresponding-ruby)))))) + (lambda () (rvm-activate-corresponding-ruby))))))) (defun ruby/init-ruby-mode () (use-package ruby-mode @@ -145,21 +153,23 @@ "sR" 'ruby-send-region-and-go "ss" 'ruby-switch-to-inf))))) -(defun ruby/init-ruby-test-mode () - "Define keybindings for ruby test mode" - (use-package ruby-test-mode +(defun ruby/init-rspec-mode () + "Define keybindings for rspec mode" + (use-package rspec-mode :defer t :init (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) - (add-hook hook 'ruby-test-mode)) + (add-hook hook 'rspec-mode)) :config (progn - (spacemacs|hide-lighter ruby-test-mode) + (spacemacs|hide-lighter rspec-mode) (dolist (mode '(ruby-mode enh-ruby-mode)) (spacemacs/declare-prefix-for-mode mode "mt" "ruby/test") (spacemacs/set-leader-keys-for-major-mode mode - "tb" 'ruby-test-run) - (spacemacs/set-leader-keys-for-major-mode mode - "tt" 'ruby-test-run-at-point))))) + "ta" 'rspec-verify-all + "tc" 'rspec-verify-matching + "tf" 'rspec-run-last-failed + "tr" 'rspec-rerun + "tt" 'rspec-verify-single))))) (defun ruby/init-rubocop () (use-package rubocop @@ -178,6 +188,20 @@ "rrp" 'rubocop-check-project "rrP" 'rubocop-autocorrect-project))))) +(defun ruby/init-ruby-test-mode () + "Define keybindings for ruby test mode" + (use-package ruby-test-mode) + :defer t + :init (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) + (add-hook hook 'ruby-test-mode)) + :config + (progn + (spacemacs|hide-lighter ruby-test-mode) + (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/declare-prefix-for-mode mode "mt" "ruby/test") + (evil-leader/set-key-for-mode mode "mtb" 'ruby-test-run) + (evil-leader/set-key-for-mode mode "mtt" 'ruby-test-run-at-point)))) + (when (configuration-layer/layer-usedp 'auto-completion) (defun ruby/post-init-company () (spacemacs|add-company-hook ruby-mode)