1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
module Flipper
class Railtie < Rails::Railtie
config.before_configuration do
config.flipper = ActiveSupport::OrderedOptions.new.update(
env_key: ENV.fetch('FLIPPER_ENV_KEY', 'flipper'),
memoize: ENV.fetch('FLIPPER_MEMOIZE', 'true').casecmp('true').zero?,
preload: ENV.fetch('FLIPPER_PRELOAD', 'true').casecmp('true').zero?,
instrumenter: ENV.fetch('FLIPPER_INSTRUMENTER', 'ActiveSupport::Notifications').constantize,
log: ENV.fetch('FLIPPER_LOG', 'true').casecmp('true').zero?
)
end
initializer "flipper.identifier" do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.include Flipper::Identifier
end
end
initializer "flipper.default", before: :load_config_initializers do |app|
Flipper.configure do |config|
config.default do
Flipper.new(config.adapter, instrumenter: app.config.flipper.instrumenter)
end
end
end
initializer "flipper.log", after: :load_config_initializers do |app|
flipper = app.config.flipper
if flipper.log && flipper.instrumenter == ActiveSupport::Notifications
require "flipper/instrumentation/log_subscriber"
end
end
initializer "flipper.memoizer", after: :load_config_initializers do |app|
flipper = app.config.flipper
if flipper.memoize
app.middleware.use Flipper::Middleware::Memoizer, {
env_key: flipper.env_key,
preload: flipper.preload,
if: flipper.memoize.respond_to?(:call) ? flipper.memoize : nil
}
end
end
end
end
|