Rote adds the following methods to the Rake module. All this cool stuff was contributed by Jonathan Paisley (<jp-www at dcs gla ac uk>)

Methods
Classes and Modules
Class Rake::Application
Class Rake::Task
Public Class methods
cache_dir()
    # File lib/rote/cache.rb, line 30
30:     def cache_dir; @cache_dir ||= ".rake_cache"; end
cache_dir=(val)

Directory for storing Rake dependency cache

    # File lib/rote/cache.rb, line 29
29:     def cache_dir=(val); @cache_dir = val; end
cache_enabled=(b)

Enable or disable dependency caching.

    # File lib/rote/cache.rb, line 48
48:     def cache_enabled=(b); @cache_enabled = b; end
cache_enabled?()

Determine whether dependency caching is enabled

    # File lib/rote/cache.rb, line 39
39:     def cache_enabled?
40:       if @cache_enabled.nil?
41:         @cache_enabled = !ENV['NO_RAKE_CACHE']
42:       else 
43:         @cache_enabled
44:       end
45:     end
cached_dependencies()

Hash of current cached dependencies

    # File lib/rote/cache.rb, line 33
33:     def cached_dependencies; @cached_dependencies ||= {}; end
current_task()

Reference to current task being executed

    # File lib/rote/cache.rb, line 37
37:     def current_task; task_stack.last; end
dependencies_file()
    # File lib/rote/cache.rb, line 31
31:     def dependencies_file; File.join(cache_dir,"dependencies.yaml"); end
register_dependency(deps, task = nil)

Use this method to dynamically register one or more files as dependencies of the currently executing task (or the specified task if non-nil).

    # File lib/rote/cache.rb, line 53
53:     def register_dependency(deps, task = nil)
54:       task = (current_task.name if current_task) unless task
55:       if task then
56:         file task => deps
57:         (cached_dependencies[task] ||= []) << deps
58:       end
59:     end
task_stack()

Array representing current tasks being executed

    # File lib/rote/cache.rb, line 35
35:     def task_stack; @tasks ||= []; end
Protected Class methods
load_cached_dependencies()

Load cached dependencies, unless they‘re already loaded. This method is called during task invocation, with the effect that cached deps are loaded from yaml on the first invoke.

An at_exit handler is installed to save the dependencies when rake exits.

     # File lib/rote/cache.rb, line 126
126:   def self.load_cached_dependencies
127:     return unless !$CACHEDEPS_LOADED and Rake.cache_enabled?    
128:     
129:     at_exit { self.save_cached_dependencies }
130: 
131:     return unless File.exists?(dependencies_file)
132:     YAML.load(File.read(dependencies_file)).each do |task,deps|
133:       deps.each do |dep|
134:         register_dependency(dep, task)
135:       end
136:     end
137:     
138:     $CACHEDEPS_LOADED = true
139:   end
save_cached_dependencies()
     # File lib/rote/cache.rb, line 141
141:   def self.save_cached_dependencies
142:     return if cached_dependencies.empty? || !Rake.cache_enabled?
143:     
144:     mkdir_p cache_dir unless File.exists?(cache_dir)
145:     deps = {}
146:     cached_dependencies.each do |k,v|
147:       deps[k] = v.flatten.uniq
148:     end
149:     File.open(dependencies_file,"w") { |fp| fp.write YAML.dump(deps) }
150:   end