четверг, 16 августа 2007 г.

rspec for emacs: runer

Уже почти месяц опять пишу на Rails. Нужно срочно возвращаться к emacs-rails но времени пока так мало(( К тому же нужно разбираться что там за год без меня понаписали. Начал делать автоматизацию для rspec.
Вот пока, спекалка файлов. Собственно интересны 3 функции. rails-spec:files, её можно запускать интерактивно и передать список всех файлов (от корня проекта), которые нужно спекать. Вторая rails-spec:this-file, соответственно запускает spec на текущий файл. Третья: rails-spec:all, понятно для чего. Пока сделал последнюю через ./script/spec ./spec, т.к. непонятно как быть с опциями в rake spec...

Собственно сделано это для двух вещей. Во первых - запускать спеки текущего файла одной кнопкой, ни куда не переходя. Во вторых (и в основном из-за этого) теперь можно щелчком мышкой или энтером перейти на то место где косяк. Очень много экономит времени.

В следующем выпуске переход между spec файлами и соответвующими им файлами моделей, контроллеров и вьюшек. Но это я думаю не скоро, т.к. не хочу делать абы как, а сначала вернутся к основной ветке проекта.



Вот собтвенно код:



(defmacro* in-directory ((directory) &rest body)
(let ((before-directory (gensym)))
`(let ((,before-directory default-directory)
(default-directory ,directory))
(cd ,directory)
,@body
(cd ,before-directory))))


(defmacro* rails-project:in-root-with-cd (&rest body)
(let ((root (gensym)))
`(rails-project:with-root (,root)
(in-directory (,root) ,@body))))



(defun rails-project:compile-in-root (command)
(rails-project:in-root-with-cd
(compile command)))


(defun rails-spec:files (files)
(interactive "Mspec files: ")
(rails-project:compile-in-root (concat "./script/spec " files)))


(defadvice rails-spec:this-file
(before save-files activate compile)
(save-buffer))

(defun rails-spec:this-file ()
(interactive)
(rails-spec:files (buffer-file-name (current-buffer))))

(defun rails-spec:all ()
(interactive)
(rails-spec:files "./spec"))



PS: Как особо частые операции я забиндил их на F11 и F12:



(define-keys rails-minor-mode-map
((kbd "<f12>") 'rails-spec:this-file)
((kbd "<f11>") 'rails-spec:all))

Комментариев нет: