Diff
1diff --git a/plugins/rake-fast/README.md b/plugins/rake-fast/README.md
2index f56142f6953260546a1856f7e91d8f961328fa23..1417befa15cef23b3ca3184fbbd7e950331f38b7 100644
3--- a/plugins/rake-fast/README.md
4+++ b/plugins/rake-fast/README.md
5@@ -2,22 +2,34 @@
6
7 Fast rake autocompletion plugin.
8
9-This script caches the output for later usage and significantly speeds it up. It generates a .rake_tasks cache file in parallel to the Rakefile. It also checks the file modification dates to see if it needs to regenerate the cache file.
10+This plugin caches the output for later usage and significantly speeds it up.
11+It generates a `.rake_tasks` cache file in parallel to the Rakefile. It also
12+checks the file modification time to see if it needs to regenerate the cache
13+file.
14
15-This is entirely based on [this pull request by Ullrich Schäfer](https://github.com/robb/.dotfiles/pull/10/), which is inspired by [this Ruby on Rails trick from 2006](http://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh/).
16+This is entirely based on [this pull request by Ullrich Schäfer](https://github.com/robb/.dotfiles/pull/10/),
17+which is inspired by [this Ruby on Rails trick from 2006](http://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh/).
18
19 Think about that. 2006.
20
21+----------
22+
23+Since August of 2016, it also checks if it's in a Rails project and looks at
24+rake files inside `lib/tasks` and their modification time to know if the
25+cache file needs to be regenerated.
26+
27 ## Installation
28
29 Just add the plugin to your `.zshrc`:
30
31-```bash
32-plugins=(foo bar rake-fast)
33+```zsh
34+plugins=(... rake-fast)
35 ```
36
37 You might consider adding `.rake_tasks` to your [global .gitignore](https://help.github.com/articles/ignoring-files#global-gitignore)
38
39 ## Usage
40
41-`rake`, then press tab
42+Type `rake`, then press tab.
43+
44+If you want to force the regeneration of the `.rake_tasks` file, run `rake_refresh`.
45diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh
46index 57d699abcddc4562ecb50b4e7b244f571ddf4968..ca80d86e129649073612aca6587b29662864fba9 100644
47--- a/plugins/rake-fast/rake-fast.plugin.zsh
48+++ b/plugins/rake-fast/rake-fast.plugin.zsh
49@@ -1,26 +1,22 @@
50-_rake_refresh () {
51- if [ -f .rake_tasks ]; then
52- rm .rake_tasks
53- fi
54- echo "Generating .rake_tasks..." > /dev/stderr
55- _rake_generate
56- cat .rake_tasks
57-}
58-
59 _rake_does_task_list_need_generating () {
60- [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || (_is_rails_app && _tasks_changed)
61+ [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || { _is_rails_app && _tasks_changed }
62 }
63
64 _is_rails_app () {
65- [[ -e "bin/rails" ]] || [ -e "script/rails" ]
66+ [[ -e "bin/rails" ]] || [[ -e "script/rails" ]]
67 }
68
69 _tasks_changed () {
70- local is_changed=1
71- for file in lib/tasks/**/*.rake; do
72- if [[ $file -nt .rake_tasks ]]; then is_changed=0; fi
73+ local -a files
74+ files=(lib/tasks lib/tasks/**/*(N))
75+
76+ for file in $files; do
77+ if [[ "$file" -nt .rake_tasks ]]; then
78+ return 0
79+ fi
80 done
81- return is_changed
82+
83+ return 1
84 }
85
86 _rake_generate () {
87@@ -28,14 +24,20 @@ _rake_generate () {
88 }
89
90 _rake () {
91- if [ -f Rakefile ]; then
92+ if [[ -f Rakefile ]]; then
93 if _rake_does_task_list_need_generating; then
94- echo "\nGenerating .rake_tasks..." > /dev/stderr
95+ echo "\nGenerating .rake_tasks..." >&2
96 _rake_generate
97 fi
98- compadd `cat .rake_tasks`
99+ compadd $(cat .rake_tasks)
100 fi
101 }
102-
103 compdef _rake rake
104-alias rake_refresh='_rake_refresh'
105+
106+rake_refresh () {
107+ [[ -f .rake_tasks ]] && rm -f .rake_tasks
108+
109+ echo "Generating .rake_tasks..." >&2
110+ _rake_generate
111+ cat .rake_tasks
112+}