## Backlog - Move breakers.rb configuration file into rack-contrib as a middleware component. - Sample apps: Rack, Rails, Sinatra, Merb, etc. - Use Bacon instead of test/spec - Work with both memcache and memcached gems (memcached hasn't built on MacOS for some time now). - Fast path pass processing. We do a lot more than necessary just to determine that the response should be passed through untouched. - Don't purge/remove cache entries when invalidating. The entries should be marked as stale and be forced revalidated on the next request instead of being removed entirely. - Add missing Expires header if we have a max-age. - Purge/invalidate everything - Invalidate at the URI of the Location or Content-Location response header on POST, PUT, or DELETE that results in a redirect. - Maximum size of cached entity - Last-Modified factor: requests that have a Last-Modified header but no Expires header have a TTL assigned based on the last modified age of the response: TTL = (Age * Factor), or, 1h = (10h * 0.1) - Run under multiple-threads with an option to lock before making requests to the backend. The idea is to be able to serve requests from cache in separate threads. This should probably be implemented as a separate middleware component. - Consider implementing ESI (http://www.w3.org/TR/esi-lang). This should probably be implemented as a separate middleware component. - Sqlite3 (meta store) - stale-while-revalidate - Serve cached copies when down (see: stale-if-error) - e.g., database connection drops and the cache takes over what it can.