From 2277967ecf7656fa2fc03b8ae5f23a3cf92beb33 Mon Sep 17 00:00:00 2001
From: Aleksey Ivanov <ialexxei@gmail.com>
Date: Sun, 21 Aug 2016 19:50:44 +0200
Subject: [PATCH 1/4] Fix _tasks_changed algorithm in rake-fast plugin

---
 plugins/rake-fast/rake-fast.plugin.zsh | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh
index 57d699abc..411d25726 100644
--- a/plugins/rake-fast/rake-fast.plugin.zsh
+++ b/plugins/rake-fast/rake-fast.plugin.zsh
@@ -16,11 +16,16 @@ _is_rails_app () {
 }
 
 _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 paths
+  paths=(lib/tasks lib/tasks/**/*(N))
+
+  for path in $paths; do
+    if [[ "$path" -nt .rake_tasks ]]; then
+      return 0
+    fi
   done
-  return is_changed
+
+  return 1
 }
 
 _rake_generate () {

From 81ca3182a126025638d61d590df2f58cb6c5dc37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc=20Cornell=C3=A0?= <marc.cornella@live.com>
Date: Sun, 21 Aug 2016 19:51:08 +0200
Subject: [PATCH 2/4] Fix syntax and formatting of rake-fast plugin

---
 plugins/rake-fast/rake-fast.plugin.zsh | 29 ++++++++++++--------------
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh
index 411d25726..a594ca923 100644
--- a/plugins/rake-fast/rake-fast.plugin.zsh
+++ b/plugins/rake-fast/rake-fast.plugin.zsh
@@ -1,18 +1,9 @@
-_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 () {
@@ -33,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
+}

From 59fdb2b505bc415738dc92f6188453e54bf0c45c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc=20Cornell=C3=A0?= <marc.cornella@live.com>
Date: Sun, 21 Aug 2016 20:02:55 +0200
Subject: [PATCH 3/4] Reword rake-fast README, add `lib/tasks` information

---
 plugins/rake-fast/README.md | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 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`.

From abf73bb626cbe645e23f205583631330c9fbabd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc=20Cornell=C3=A0?= <marc.cornella@live.com>
Date: Mon, 29 Aug 2016 08:37:09 +0200
Subject: [PATCH 4/4] rake-fast: change variable name from `$path' to `$file'

This solves a problem of using the variable name `$path' which then
smashes the environment variable `$PATH' and messes up the session.

See https://github.com/robbyrussell/oh-my-zsh/pull/5343#issuecomment-243043098
---
 plugins/rake-fast/rake-fast.plugin.zsh | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh
index a594ca923..ca80d86e1 100644
--- a/plugins/rake-fast/rake-fast.plugin.zsh
+++ b/plugins/rake-fast/rake-fast.plugin.zsh
@@ -7,11 +7,11 @@ _is_rails_app () {
 }
 
 _tasks_changed () {
-  local -a paths
-  paths=(lib/tasks lib/tasks/**/*(N))
+  local -a files
+  files=(lib/tasks lib/tasks/**/*(N))
 
-  for path in $paths; do
-    if [[ "$path" -nt .rake_tasks ]]; then
+  for file in $files; do
+    if [[ "$file" -nt .rake_tasks ]]; then
       return 0
     fi
   done