lib/flipper/middleware/memoizer.rb in flipper-0.10.2 vs lib/flipper/middleware/memoizer.rb in flipper-0.11.0.beta1
- old
+ new
@@ -1,62 +1,46 @@
require 'rack/body_proxy'
module Flipper
module Middleware
class Memoizer
- # Public: Initializes an instance of the Memoizer middleware.
+ # Public: Initializes an instance of the Memoizer middleware. The flipper
+ # instance must be setup in the env of the request. You can do this by
+ # using the Flipper::Middleware::SetupEnv middleware.
#
# app - The app this middleware is included in.
- # flipper_or_block - The Flipper::DSL instance or a block that yields a
- # Flipper::DSL instance to use for all operations.
#
# Examples
#
- # # using with a normal flipper instance
- # flipper = Flipper.new(...)
- # use Flipper::Middleware::Memoizer, flipper
+ # use Flipper::Middleware::Memoizer
#
- # # using with a block that yields a flipper instance
- # use Flipper::Middleware::Memoizer, lambda { Flipper.new(...) }
- #
# # using with preload_all features
- # use Flipper::Middleware::Memoizer, flipper, preload_all: true
+ # use Flipper::Middleware::Memoizer, preload_all: true
#
# # using with preload specific features
- # use Flipper::Middleware::Memoizer, flipper, preload: [:stats, :search, :some_feature]
+ # use Flipper::Middleware::Memoizer, preload: [:stats, :search, :some_feature]
#
- def initialize(app, flipper_or_block, opts = {})
+ def initialize(app, opts = {})
@app = app
@opts = opts
-
- if flipper_or_block.respond_to?(:call)
- @flipper_block = flipper_or_block
- else
- @flipper = flipper_or_block
- end
end
- def flipper
- @flipper ||= @flipper_block.call
- end
-
def call(env)
+ flipper = env.fetch('flipper')
original = flipper.adapter.memoizing?
flipper.adapter.memoize = true
if @opts[:preload_all]
names = flipper.features.map(&:name)
flipper.preload(names)
end
- if @opts[:preload]
- flipper.preload(@opts[:preload])
- end
+ flipper.preload(@opts[:preload]) if @opts[:preload]
response = @app.call(env)
- response[2] = Rack::BodyProxy.new(response[2]) {
+ response[2] = Rack::BodyProxy.new(response[2]) do
flipper.adapter.memoize = original
- }
+ end
response
rescue
flipper.adapter.memoize = original
raise
end