lib/flipper/middleware/memoizer.rb in flipper-0.5.0 vs lib/flipper/middleware/memoizer.rb in flipper-0.6.0

- old
+ new

@@ -1,21 +1,46 @@ require 'rack/body_proxy' module Flipper module Middleware class Memoizer - def initialize(app, flipper) + # Public: Initializes an instance of the UI 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 + # + # flipper = Flipper.new(...) + # + # # using with a normal flipper instance + # use Flipper::Middleware::Memoizer, flipper + # + # # using with a block that yields a flipper instance + # use Flipper::Middleware::Memoizer, lambda { Flipper.new(...) } + # + def initialize(app, flipper_or_block) @app = app - @flipper = flipper + + 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) - original = @flipper.adapter.memoizing? - @flipper.adapter.memoize = true + original = flipper.adapter.memoizing? + flipper.adapter.memoize = true response = @app.call(env) response[2] = Rack::BodyProxy.new(response[2]) { - @flipper.adapter.memoize = original + flipper.adapter.memoize = original } response end end end