lib/flipper/middleware/memoizer.rb in flipper-0.11.0.beta3 vs lib/flipper/middleware/memoizer.rb in flipper-0.11.0.beta4

- old
+ new

@@ -30,19 +30,34 @@ @app = app @opts = opts end def call(env) + request = Rack::Request.new(env) + + if skip_memoize?(request) + @app.call(env) + else + memoized_call(env) + end + end + + private + + def skip_memoize?(request) + @opts[:unless] && @opts[:unless].call(request) + end + + def memoized_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 + flipper.preload_all if @opts[:preload_all] - flipper.preload(@opts[:preload]) if @opts[:preload] + if (preload = @opts[:preload]) + flipper.preload(preload) + end response = @app.call(env) response[2] = Rack::BodyProxy.new(response[2]) do flipper.adapter.memoize = original end