Skip to content

Commit

Permalink
Updated rails-compile to support a new resource schema.
Browse files Browse the repository at this point in the history
Updated macro `rails/with-current-buffer'.
Updated interactive functions from rails-resources.el to use `rails/current-buffer' buffer local variable.
  • Loading branch information
dmexe committed Dec 14, 2008
1 parent 5223021 commit df3b256
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 82 deletions.
2 changes: 0 additions & 2 deletions bundles/rails-rspec-bundle.el
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
(rails/compile/run-file
root
rails-buffer
"RSpec"
rails/rspec-bundle/command
(concat "%s" (format " %s" rails/rspec-bundle/spec-options))
"_spec\\.rb$"))
Expand All @@ -23,7 +22,6 @@
(rails/compile/run-file
root
rails-buffer
"RSpec"
rails/rspec-bundle/command
(concat "%s" (format " %s -l %s" rails/rspec-bundle/spec-options line))
"_spec\\.rb$")))
Expand Down
2 changes: 0 additions & 2 deletions bundles/rails-test-unit-bundle.el
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
(rails/compile/run-file
root
rails-buffer
"Test::Unit"
rails/ruby/command
"%s"
"_test\\.rb$"))
Expand All @@ -16,7 +15,6 @@
(rails/compile/run-file
root
rails-buffer
"Test::Unit"
rails/ruby/command
(concat "%s --name=" method)
"_test\\.rb$")))
Expand Down
42 changes: 18 additions & 24 deletions rails-compile.el
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@

;;; Code:

(require 'rails-resources)

(defvar rails/compile/single-file-list '())
(defvar rails/compile/current-method-list '())

Expand Down Expand Up @@ -86,35 +88,27 @@
(setq rails/runner/after-stop-func-list
'(rails/runner/popup-buffer-if-failed)))

;; TODO: goto-item
(defun rails/compile/run-file (root rails-buffer bundle-group-name command args-pattern &optional file-pattern)
(let* ((type (when (rails/buffer-p rails-buffer)
(rails/buffer-type rails-buffer)))
(link (when type
(rails/type-link-by-bundle-group-and-layout
bundle-group-name
(rails/buffer-layout rails-buffer)
:tests type))))
(defun rails/compile/run-file (root rails-buffer command args-pattern &optional file-pattern)
(let ((item
(when rails-buffer
(rails/resources/get-associated-test-item-for-buffer root
rails-buffer)))
file)
(cond
((and link type)
(when-bind (func (rails/bundle-func link "goto-item-from-rails-buffer"))
(let ((goto-item (funcall func root
(rails/cut-root (rails/buffer-file rails-buffer))
rails-buffer)))
(when (rails/goto-item-p goto-item)
(rails/compile/run root
command
(format args-pattern
(rails/goto-item-file goto-item)))
t))))
((and file-pattern
(string-ext/string=~ file-pattern (buffer-file-name) t))
(item
(setq file (rails/resource-item-file item))
(rails/compile/run root
command
(format args-pattern
file)))
((and file-pattern
(string-ext/string=~ file-pattern (buffer-file-name) t))
(rails/compile/run root
command
(format args-pattern
(rails/cut-root (buffer-file-name)))))
(t
(rails/notify "Can't run current file." :error)))))
(t
(rails/notify "Can't run current file as a test." :error)))))

(defun rails/compile/single-file ()
(interactive)
Expand Down
8 changes: 4 additions & 4 deletions rails-lib.el
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,10 @@ else return nil"
root)))))

(defmacro rails/with-current-buffer (&rest body)
`(when (rails/resource-buffer-p rails/current-buffer)
(rails/with-root (buffer-file-name)
,@body)))

`(if (rails/resource-buffer-p rails/current-buffer)
(rails/with-root (buffer-file-name)
,@body)
(rails/notify "Curent buffer it's not a rails resource." :error)))

;;; ---------------------------------------------------------
;;; - Rails files functions
Expand Down
2 changes: 0 additions & 2 deletions rails-reloaded.el
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@
(defconst rails/version "0.99"
"emacs-rails version string")

(defvar rails/current-buffer nil)

(defvar rails/notify-func-list '(rails/notify-growl))

;;; ---------------------------------------------------------
Expand Down
137 changes: 89 additions & 48 deletions rails-resources.el
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
(require 'inflections)
(require 'rails-lib)

(defvar rails/current-buffer nil)

(defstruct rails/resource type ;; symbol, required
display-name ;; string, required
menu-group ;; string required
Expand Down Expand Up @@ -183,7 +185,7 @@
(add-to-list 'result its t))))
result))

(defun rails/resources/get-associated-items-by-resource (root rails-buffer resource)
(defun rails/resources/get-associated-items-by-resource (root rails-buffer resource &optional no-buffer-filter)
(let ((file (rails/resource-buffer-resource-name rails-buffer))
(file-func (rails/resource-resource-files-func resource))
result name)
Expand All @@ -207,9 +209,11 @@
(setq file (concat file file-ext)))
(when (rails/file-exist-p root file)
(list (cons name file))))))
(rails/resources/filter-buffer-in-items
rails-buffer
(rails/resources/resource-files-to-items resource result))))
(setq result
(rails/resources/resource-files-to-items resource result))
(if no-buffer-filter
result
(rails/resources/filter-buffer-in-items rails-buffer result))))

(defun rails/resources/get-associated-items(root rails-buffer)
(rails/resources/filter-dublicated-files-in-items
Expand Down Expand Up @@ -278,19 +282,19 @@

(defun rails/resources/toggle (&optional force-ido)
(interactive)
(let* ((root (rails/root))
(rails-buffer (rails/resources/get-buffer-for-file root (rails/cut-root (buffer-file-name))))
(resource (rails/resources/find (rails/resource-buffer-type rails-buffer)))
items menu file)
(setq items
(if (rails/resource-link-to resource)
(rails/resources/linked-to-items-of-buffer root rails-buffer)
(rails/resources/linked-items-of-buffer root rails-buffer)))
(setq menu (rails/resources/items-to-menu menu items))
(setq file (if (< 1 (length menu))
(rails/display-menu "Select" menu force-ido)
(cdr (car menu))))
(rails/resources/find-file-by-item root file)))
(rails/with-current-buffer
(let* ((root (rails/root))
(resource (rails/resources/find (rails/resource-buffer-type rails/current-buffer)))
items menu file)
(setq items
(if (rails/resource-link-to resource)
(rails/resources/linked-to-items-of-buffer root rails/current-buffer)
(rails/resources/linked-items-of-buffer root rails-buffer)))
(setq menu (rails/resources/items-to-menu menu items))
(setq file (if (< 1 (length menu))
(rails/display-menu "Select" menu force-ido)
(cdr (car menu))))
(rails/resources/find-file-by-item root file))))

;;; ---------------------------------------------------------
;;; - Lookup resource for test
Expand All @@ -302,7 +306,10 @@
(or
;; direct link
(when-bind (test-res (rails/resources/find (rails/resource-test-to resource)))
(when-bind (its (rails/resources/get-associated-items-by-resource root rails-buffer test-res))
(when-bind (its (rails/resources/get-associated-items-by-resource
root
rails-buffer
test-res))
(car its)))
;; test link from linked resource
(loop for lay-name in (rails/resource-link-to resource)
Expand All @@ -312,7 +319,10 @@
when test-link
return
(car
(rails/resources/get-associated-items-by-resource root rails-buffer test-link))))))
(rails/resources/get-associated-items-by-resource
root
rails-buffer
test-link))))))

(defun rails/resources/linked-to-test-item-of-buffer (root rails-buffer)
(let* ((type (rails/resource-buffer-type rails-buffer))
Expand All @@ -338,22 +348,44 @@
rails-buffer
test-res)))))

(defun rails/resources/test-buffer-p (root rails-buffer)
"Return resource contains :test-to link, otherwise return nil."
(let ((resource (rails/resources/find
(rails/resource-buffer-type rails-buffer))))
(or
;; direct link
(and (rails/resource-test-to resource) resource)
;; link from parent
(loop for lay-name in (rails/resource-link-to resource)
for lay = (rails/resources/find lay-name)
when (rails/resource-test-to lay)
return lay))))

(defun rails/resources/get-associated-test-item-for-buffer (root rails-buffer)
(let ((test-res (rails/resources/test-buffer-p root rails-buffer)))
(if test-res
;; it's the test, run it
(rails/resources/get-associated-items-by-resource root
rails-buffer
test-res)
;; it's have the link to test
(rails/resources/linked-to-test-item-of-buffer root
rails-buffer))))

(defun rails/resources/toggle-test ()
(interactive)
(let* ((root (rails/root))
(rails-buffer (rails/resources/get-buffer-for-file root (rails/cut-root (buffer-file-name))))
(resource (rails/resources/find (rails/resource-buffer-type rails-buffer)))
item)
(rails/with-current-buffer
(let* ((root (rails/root))
item)
(setq item
(if (or (rails/resource-test-to resource)
(loop for lay-name in (rails/resource-link-to resource)
for lay = (rails/resources/find lay-name)
when (rails/resource-test-to lay)
return t))
(rails/resources/linked-from-test-item-of-buffer root rails-buffer)
(rails/resources/linked-to-test-item-of-buffer root rails-buffer)))
(rails/resources/find-file-by-item root item)))
(if (rails/resources/test-buffer-p root rails/current-buffer)
(rails/resources/linked-from-test-item-of-buffer
root
rails/current-buffer)
(rails/resources/linked-to-test-item-of-buffer
root
rails/current-buffer)))
(rails/resources/find-file-by-item root item))))

;;; ---------------------------------------------------------
;;; - Menu for associated resources
Expand All @@ -364,9 +396,10 @@
(setq items
(rails/resources/get-associated-items root rails-buffer))
(setq items
(list-ext/group-by items
'(lambda(i) (rails/resource-item-resource-menu-group (car i)))
'string<))
(list-ext/group-by
items
'(lambda(i) (rails/resource-item-resource-menu-group (car i)))
'string<))
(dolist (group items)
(let ((group-name (car group))
(group-items (cadr group)))
Expand All @@ -377,7 +410,10 @@
(rails/resource-item-resource-type
(car i))))
(setq menu (rails/resources/items-to-menu menu i))
(add-to-list 'menu (cons (rails/resource-item-resource-display-name (car i)) (car i)) t))))
(add-to-list 'menu
(cons (rails/resource-item-resource-display-name (car i))
(car i))
t))))
(setq last-p t))
(setq resource (rails/resources/find (rails/resource-buffer-type rails-buffer)))
(setq file (rails/display-menu-using-popup
Expand All @@ -389,27 +425,32 @@
(defun rails/resources/goto-associated-using-ido (root rails-buffer)
(let (items resource file)
(setq resource
(rails/display-menu-using-ido "Go to"
(mapcar '(lambda(i) (cons (symbol-name (rails/resource-type i)) i))
(rails/resources/get-associated-resources root rails-buffer))))
(rails/display-menu-using-ido
"Go to"
(mapcar '(lambda(i) (cons (symbol-name (rails/resource-type i)) i))
(rails/resources/get-associated-resources root
rails-buffer))))
(setq items
(rails/resources/get-associated-items-by-resource root rails-buffer resource))
(rails/resources/get-associated-items-by-resource root
rails-buffer
resource))
(if (< 1 (length items))
(setq file
(rails/display-menu-using-ido (format "%s" (rails/resource-display-name resource))
(rails/resources/items-to-menu '() items)))
(rails/display-menu-using-ido
(format "%s" (rails/resource-display-name resource))
(rails/resources/items-to-menu '() items)))
(setq file (car items)))
(rails/resources/find-file-by-item root file)
file))

(defun rails/resources/goto-associated (&optional force-ido)
(interactive)
(let* ((root (rails/root))
(rails-buffer (rails/resources/get-buffer-for-file root (rails/cut-root (buffer-file-name)))))
(if (and window-system
(not force-ido)
(eq rails/display-menu-method 'popup))
(rails/resources/goto-associated-using-menu root rails-buffer)
(rails/resources/goto-associated-using-ido root rails-buffer))))
(rails/with-current-buffer
(let ((root (rails/root)))
(if (and window-system
(not force-ido)
(eq rails/display-menu-method 'popup))
(rails/resources/goto-associated-using-menu root rails/current-buffer)
(rails/resources/goto-associated-using-ido root rails/current-buffer)))))

(provide 'rails-resources)

0 comments on commit df3b256

Please sign in to comment.