demarches-normaliennes/config/initializers/flipper.rb

68 lines
1.9 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2019-07-04 12:36:17 +02:00
# This setup is primarily for first deployment, because consequently
# we can add new features from the Web UI. However when the new DB is created
# this will immediately migrate the default features to be controlled.
#
require 'flipper/adapters/active_record'
require 'flipper/adapters/active_support_cache_store'
2019-07-04 12:36:17 +02:00
def setup_features(features)
existing = Flipper.preload_all.map { _1.name.to_sym }
missing = features - existing
missing.each do |feature|
# Feature is disabled by default
Flipper.add(feature.to_s)
2019-07-04 12:36:17 +02:00
end
end
# A list of features to be deployed on first push
features = [
:administrateur_web_hook,
:api_particulier,
:attestation_v2,
:blocking_pending_correction,
:cojo_type_de_champ,
2021-03-03 18:20:34 +01:00
:dossier_pdf_vide,
:engagement_juridique_type_de_champ,
:export_order_by_revision,
2024-04-09 15:12:21 +02:00
:export_template,
:expression_reguliere_type_de_champ,
:gallery_demande,
2023-06-14 12:35:43 +02:00
:groupe_instructeur_api_hack,
:hide_instructeur_email,
:sva,
:switch_domain
2019-07-04 12:36:17 +02:00
]
2019-09-11 12:21:21 +02:00
def database_exists?
ActiveRecord::Base.connection
true
rescue ActiveRecord::ConnectionNotEstablished, ActiveRecord::NoDatabaseError, PG::ConnectionBad
2019-09-11 12:21:21 +02:00
false
end
Flipper.configure do |config|
config.adapter do
Flipper::Adapters::ActiveSupportCacheStore.new(
Flipper::Adapters::ActiveRecord.new,
ActiveSupport::Cache::MemoryStore.new,
10.seconds
)
end
end
ActiveSupport.on_load(:active_record) do
if database_exists? && ActiveRecord::Base.connection.data_source_exists?('flipper_features')
setup_features(features)
end
end
Rails.application.configure do
config.flipper.actor_limit = 500 # default is 100 but hide_instructeur_email feature has ~478
# don't preload features for /assets/* but do for everything else
config.flipper.preload = -> (request) { !request.path.start_with?('/assets/', '/ping') }
config.flipper.strict = Rails.env.development?
end