Class: Flipper::Middleware::Memoizer
- Inherits:
-
Object
- Object
- Flipper::Middleware::Memoizer
- Defined in:
- lib/flipper/middleware/memoizer.rb
Instance Method Summary collapse
- #call(env) ⇒ Object
- #flipper ⇒ Object
-
#initialize(app, flipper_or_block, opts = {}) ⇒ Memoizer
constructor
Public: Initializes an instance of the Memoizer middleware.
Constructor Details
#initialize(app, flipper_or_block, opts = {}) ⇒ Memoizer
Public: Initializes an instance of the Memoizer 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
# 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
# using with preload specific features
use Flipper::Middleware::Memoizer, flipper, preload: [:stats, :search, :some_feature]
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/flipper/middleware/memoizer.rb', line 27 def initialize(app, flipper_or_block, opts = {}) @app = app @opts = opts if flipper_or_block.respond_to?(:call) @flipper_block = flipper_or_block else @flipper = flipper_or_block end end |
Instance Method Details
#call(env) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/flipper/middleware/memoizer.rb', line 42 def call(env) 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 response = @app.call(env) response[2] = Rack::BodyProxy.new(response[2]) { flipper.adapter.memoize = original } response rescue flipper.adapter.memoize = original raise end |
#flipper ⇒ Object
38 39 40 |
# File 'lib/flipper/middleware/memoizer.rb', line 38 def flipper @flipper ||= @flipper_block.call end |