summaryrefslogtreecommitdiff
path: root/plugins/rake-fast/rake-fast.plugin.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/rake-fast/rake-fast.plugin.zsh')
-rw-r--r--plugins/rake-fast/rake-fast.plugin.zsh42
1 files changed, 28 insertions, 14 deletions
diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh
index d305eb1f0..ca80d86e1 100644
--- a/plugins/rake-fast/rake-fast.plugin.zsh
+++ b/plugins/rake-fast/rake-fast.plugin.zsh
@@ -1,14 +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 }
}
-_rake_does_task_list_need_generating () {
- [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]]
+_is_rails_app () {
+ [[ -e "bin/rails" ]] || [[ -e "script/rails" ]]
+}
+
+_tasks_changed () {
+ 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 1
}
_rake_generate () {
@@ -16,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
+}