|
101 | 101 | (define-prefix-command 'rspec-verifiable-mode-keymap) |
102 | 102 | (defvar rspec-mode-keymap) |
103 | 103 | (define-prefix-command 'rspec-mode-keymap) |
| 104 | +(defvar rspec-verifiable-tags-mode-keymap) |
| 105 | +(define-prefix-command 'rspec-verifiable-tags-mode-keymap) |
104 | 106 |
|
105 | 107 | (define-key rspec-verifiable-mode-keymap (kbd "v") 'rspec-verify) |
106 | 108 | (define-key rspec-verifiable-mode-keymap (kbd "a") 'rspec-verify-all) |
|
115 | 117 | (define-key rspec-verifiable-mode-keymap (kbd "s") 'rspec-verify-method) |
116 | 118 | (define-key rspec-verifiable-mode-keymap (kbd "f") 'rspec-run-last-failed) |
117 | 119 |
|
| 120 | +(define-key rspec-verifiable-mode-keymap (kbd "g") rspec-verifiable-tags-mode-keymap) |
| 121 | +(define-key rspec-verifiable-tags-mode-keymap (kbd "v") 'rspec-verify-tags) |
| 122 | +(define-key rspec-verifiable-tags-mode-keymap (kbd "a") 'rspec-verify-tags-all) |
| 123 | + |
118 | 124 | (set-keymap-parent rspec-mode-keymap rspec-verifiable-mode-keymap) |
119 | 125 |
|
120 | 126 | (define-key rspec-mode-keymap (kbd "s") 'rspec-verify-single) |
121 | 127 | (define-key rspec-mode-keymap (kbd "d") 'rspec-toggle-example-pendingness) |
122 | 128 |
|
123 | 129 | (defvar rspec-dired-mode-keymap) |
124 | 130 | (define-prefix-command 'rspec-dired-mode-keymap) |
| 131 | +(defvar rspec-dired-tags-mode-keymap) |
| 132 | +(define-prefix-command 'rspec-dired-tags-mode-keymap) |
| 133 | + |
125 | 134 | (define-key rspec-dired-mode-keymap (kbd "v") 'rspec-dired-verify) |
126 | 135 | (define-key rspec-dired-mode-keymap (kbd "s") 'rspec-dired-verify-single) |
127 | 136 | (define-key rspec-dired-mode-keymap (kbd "a") 'rspec-verify-all) |
128 | 137 | (define-key rspec-dired-mode-keymap (kbd "r") 'rspec-rerun) |
129 | 138 |
|
| 139 | +(define-key rspec-dired-mode-keymap (kbd "g") rspec-dired-tags-mode-keymap) |
| 140 | +(define-key rspec-dired-tags-mode-keymap (kbd "v") 'rspec-dired-verify-tags) |
| 141 | +(define-key rspec-dired-tags-mode-keymap (kbd "a") 'rspec-verify-tags-all) |
| 142 | +(define-key rspec-dired-tags-mode-keymap (kbd "s") 'rspec-dired-verify-tags-single) |
| 143 | + |
130 | 144 | (defgroup rspec-mode nil |
131 | 145 | "RSpec minor mode." |
132 | 146 | :group 'languages) |
@@ -466,6 +480,19 @@ buffers concurrently" |
466 | 480 | (rspec-run-single-file (rspec-spec-file-for (buffer-file-name)) |
467 | 481 | (rspec-core-options))) |
468 | 482 |
|
| 483 | +(defvar rspec-tags-history nil |
| 484 | + "History of tags used in rspec-verify-tags functions.") |
| 485 | + |
| 486 | +(defun rspec-verify-tags () |
| 487 | + "Run current spec file, filtered by one or multiple tags." |
| 488 | + (interactive) |
| 489 | + (rspec--autosave-buffer-maybe) |
| 490 | + (let* ((tags (completing-read-multiple "Select tags (separated by comma): " rspec-tags-history nil nil nil 'rspec-tags-history))) |
| 491 | + (rspec-run-single-file (rspec-spec-file-for (buffer-file-name)) |
| 492 | + (concat (mapconcat #'(lambda (tag) (format " --tag %s" tag)) tags " ") |
| 493 | + " " |
| 494 | + (rspec-core-options))))) |
| 495 | + |
469 | 496 | (defun rspec-verify-matching () |
470 | 497 | "Run the specs related to the current buffer. |
471 | 498 | This is more fuzzy that a simple verify." |
@@ -517,17 +544,44 @@ in long-running test suites." |
517 | 544 | (interactive) |
518 | 545 | (rspec-run-single-file (dired-current-directory) (rspec-core-options))) |
519 | 546 |
|
| 547 | +(defun rspec-dired-verify-tags () |
| 548 | + "Run all specs in the current directory, filtered by one or multiple tags." |
| 549 | + (interactive) |
| 550 | + (let* ((tags (completing-read-multiple "Select tags (separated by comma): " rspec-tags-history nil nil nil 'rspec-tags-history)) |
| 551 | + (rspec-command-options (concat (mapconcat #'(lambda (tag) (format " --tag %s" tag)) tags " ") |
| 552 | + " " |
| 553 | + (rspec-core-options)))) |
| 554 | + (rspec-dired-verify))) |
| 555 | + |
520 | 556 | (defun rspec-dired-verify-single () |
521 | 557 | "Run marked specs or spec at point (works with directories too)." |
522 | 558 | (interactive) |
523 | 559 | (rspec-compile (dired-get-marked-files) |
524 | 560 | (rspec-core-options))) |
525 | 561 |
|
| 562 | +(defun rspec-dired-verify-tags-single () |
| 563 | + "Run marked specs/spec at point, filtered by one or multiple tags." |
| 564 | + (interactive) |
| 565 | + (let* ((tags (completing-read-multiple "Select tags (separated by comma): " rspec-tags-history nil nil nil 'rspec-tags-history)) |
| 566 | + (rspec-command-options (concat (mapconcat #'(lambda (tag) (format " --tag %s" tag)) tags " ") |
| 567 | + " " |
| 568 | + (rspec-core-options)))) |
| 569 | + (rspec-dired-verify-single))) |
| 570 | + |
526 | 571 | (defun rspec-verify-all () |
527 | 572 | "Run the `spec' rake task for the project of the current file." |
528 | 573 | (interactive) |
529 | 574 | (rspec-run (rspec-core-options))) |
530 | 575 |
|
| 576 | +(defun rspec-verify-tags-all () |
| 577 | + "Run project specs, filtered by one or multiple tags." |
| 578 | + (interactive) |
| 579 | + (let* ((tags (completing-read-multiple "Select tags (separated by comma): " rspec-tags-history nil nil nil 'rspec-tags-history)) |
| 580 | + (rspec-command-options (concat (mapconcat #'(lambda (tag) (format " --tag %s" tag)) tags " ") |
| 581 | + " " |
| 582 | + (rspec-core-options)))) |
| 583 | + (rspec-verify-all))) |
| 584 | + |
531 | 585 | (defun rspec-toggle-spec-and-target () |
532 | 586 | "Switch to the spec or the target file for the current buffer. |
533 | 587 | If the current buffer is visiting a spec file, switches to the |
|
0 commit comments