Permalink
Browse files

Merge pull request #14179 from arthurnn/14171_backport

[backport] Extract local cache middleware
  • Loading branch information...
guilleiguaran committed Feb 24, 2014
2 parents 11e00f1 + b2d19a5 commit 417ee00af8ff8c8da0fa62c5e811c6983f92c4d5
@@ -1,6 +1,5 @@
require 'active_support/core_ext/object/duplicable'
require 'active_support/core_ext/string/inflections'
require 'rack/body_proxy'
module ActiveSupport
module Cache
@@ -9,6 +8,8 @@ module Strategy
# duration of a block. Repeated calls to the cache for the same key will hit the
# in-memory cache for faster access.
module LocalCache
autoload :Middleware, 'active_support/cache/strategy/local_cache_middleware'
# Class for storing and registering the local caches.
class LocalCacheRegistry # :nodoc:
extend ActiveSupport::PerThreadRegistry
@@ -64,37 +65,6 @@ def delete_entry(key, options)
def with_local_cache
use_temporary_local_cache(LocalStore.new) { yield }
end
#--
# This class wraps up local storage for middlewares. Only the middleware method should
# construct them.
class Middleware # :nodoc:
attr_reader :name, :local_cache_key
def initialize(name, local_cache_key)
@name = name
@local_cache_key = local_cache_key
@app = nil
end
def new(app)
@app = app
self
end
def call(env)
LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)
response = @app.call(env)
response[2] = ::Rack::BodyProxy.new(response[2]) do
LocalCacheRegistry.set_cache_for(local_cache_key, nil)
end
response
rescue Exception
LocalCacheRegistry.set_cache_for(local_cache_key, nil)
raise
end
end
# Middleware class can be inserted as a Rack handler to be local cache for the
# duration of request.
def middleware
@@ -0,0 +1,39 @@
require 'rack/body_proxy'
module ActiveSupport
module Cache
module Strategy
module LocalCache
#--
# This class wraps up local storage for middlewares. Only the middleware method should
# construct them.
class Middleware # :nodoc:
attr_reader :name, :local_cache_key
def initialize(name, local_cache_key)
@name = name
@local_cache_key = local_cache_key
@app = nil
end
def new(app)
@app = app
self
end
def call(env)
LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)
response = @app.call(env)
response[2] = ::Rack::BodyProxy.new(response[2]) do
LocalCacheRegistry.set_cache_for(local_cache_key, nil)
end
response
rescue Exception
LocalCacheRegistry.set_cache_for(local_cache_key, nil)
raise
end
end
end
end
end
end

0 comments on commit 417ee00

Please sign in to comment.