summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/rake-fast/README.md22
-rw-r--r--plugins/rake-fast/rake-fast.plugin.zsh42
2 files changed, 39 insertions, 25 deletions
diff --git a/plugins/rake-fast/README.md b/plugins/rake-fast/README.md
index f56142f69..1417befa1 100644
--- a/plugins/rake-fast/README.md
+++ b/plugins/rake-fast/README.md
@@ -2,22 +2,34 @@
Fast rake autocompletion plugin.
-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.
+This plugin 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 time to see if it needs to regenerate the cache
+file.
-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/).
+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/).
Think about that. 2006.
+----------
+
+Since August of 2016, it also checks if it's in a Rails project and looks at
+rake files inside `lib/tasks` and their modification time to know if the
+cache file needs to be regenerated.
+
## Installation
Just add the plugin to your `.zshrc`:
-```bash
-plugins=(foo bar rake-fast)
+```zsh
+plugins=(... rake-fast)
```
You might consider adding `.rake_tasks` to your [global .gitignore](https://help.github.com/articles/ignoring-files#global-gitignore)
## Usage
-`rake`, then press tab
+Type `rake`, then press tab.
+
+If you want to force the regeneration of the `.rake_tasks` file, run `rake_refresh`.
diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh
index 57d699abc..ca80d86e1 100644
--- a/plugins/rake-fast/rake-fast.plugin.zsh
+++ b/plugins/rake-fast/rake-fast.plugin.zsh
@@ -1,26 +1,22 @@
-_rake_refresh () {
- if [ -f .rake_tasks ]; then
- rm .rake_tasks
- fi
- echo "Generating .rake_tasks..." > /dev/stderr
- _rake_generate
- cat .rake_tasks
-}
-
_rake_does_task_list_need_generating () {
- [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || (_is_rails_app && _tasks_changed)
+ [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || { _is_rails_app && _tasks_changed }
}
_is_rails_app () {
- [[ -e "bin/rails" ]] || [ -e "script/rails" ]
+ [[ -e "bin/rails" ]] || [[ -e "script/rails" ]]
}
_tasks_changed () {
- local is_changed=1
- for file in lib/tasks/**/*.rake; do
- if [[ $file -nt .rake_tasks ]]; then is_changed=0; fi
+ local -a files
+ files=(lib/tasks lib/tasks/**/*(N))
+
+ for file in $files; do
+ if [[ "$file" -nt .rake_tasks ]]; then
+ return 0
+ fi
done
- return is_changed
+
+ return 1
}
_rake_generate () {
@@ -28,14 +24,20 @@ _rake_generate () {
}
_rake () {
- if [ -f Rakefile ]; then
+ if [[ -f Rakefile ]]; then
if _rake_does_task_list_need_generating; then
- echo "\nGenerating .rake_tasks..." > /dev/stderr
+ echo "\nGenerating .rake_tasks..." >&2
_rake_generate
fi
- compadd `cat .rake_tasks`
+ compadd $(cat .rake_tasks)
fi
}
-
compdef _rake rake
-alias rake_refresh='_rake_refresh'
+
+rake_refresh () {
+ [[ -f .rake_tasks ]] && rm -f .rake_tasks
+
+ echo "Generating .rake_tasks..." >&2
+ _rake_generate
+ cat .rake_tasks
+}