Вот пока, спекалка файлов. Собственно интересны 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))
Комментариев нет:
Отправить комментарий