Sha256: e1b1f235ccb71a1b4e72c0142b3f5d3fe9acfc050e4af32b6dc09b37689ef3fb
Contents?: true
Size: 1.77 KB
Versions: 1
Compression:
Stored size: 1.77 KB
Contents
require 'rack/body_proxy' module Flipper module Middleware class Memoizer # 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. # opts - The Hash of options. # :preload_all - Boolean of whether or not to preload all features. # :preload - Array of Symbol feature names to preload. # # Examples # # use Flipper::Middleware::Memoizer # # # using with preload_all features # use Flipper::Middleware::Memoizer, preload_all: true # # # using with preload specific features # use Flipper::Middleware::Memoizer, preload: [:stats, :search, :some_feature] # def initialize(app, opts = {}) if opts.is_a?(Flipper::DSL) || opts.is_a?(Proc) raise 'Flipper::Middleware::Memoizer no longer initializes with a flipper instance or block. Read more at: https://git.io/vSo31.' # rubocop:disable LineLength end @app = app @opts = opts 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 flipper.preload(@opts[:preload]) if @opts[:preload] response = @app.call(env) response[2] = Rack::BodyProxy.new(response[2]) do flipper.adapter.memoize = original end response rescue flipper.adapter.memoize = original raise end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
flipper-0.11.0.beta3 | lib/flipper/middleware/memoizer.rb |