summaryrefslogtreecommitdiff
path: root/config/initializers/fix_local_cache_middleware.rb
blob: cb37f9ed22c3ac4b4b05867f1514f3fd141ca148 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module LocalCacheRegistryCleanupWithEnsure
  LocalCacheRegistry =
    ActiveSupport::Cache::Strategy::LocalCache::LocalCacheRegistry
  LocalStore =
    ActiveSupport::Cache::Strategy::LocalCache::LocalStore

  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
    cleanup_after_response = true # ADDED THIS LINE
    response
  rescue Rack::Utils::InvalidParameterError
    [400, {}, []]
  ensure # ADDED ensure CLAUSE to cleanup when something is thrown
    LocalCacheRegistry.set_cache_for(local_cache_key, nil) unless
      cleanup_after_response
  end
end

ActiveSupport::Cache::Strategy::LocalCache::Middleware
  .prepend(LocalCacheRegistryCleanupWithEnsure)