diff options
Diffstat (limited to 'lib/feature.rb')
-rw-r--r-- | lib/feature.rb | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/feature.rb b/lib/feature.rb index cee6f633e78..7df692ec552 100644 --- a/lib/feature.rb +++ b/lib/feature.rb @@ -30,6 +30,20 @@ module Feature superclass.table_name = 'feature_gates' end + # Generates the same flipper_id when in a request + # If not in a request, it generates a unique flipper_id every time + class FlipperRequest + def id + Gitlab::SafeRequestStore.fetch("flipper_request_id") do + SecureRandom.uuid + end + end + + def flipper_id + "FlipperRequest:#{id}" + end + end + # To enable EE overrides class ActiveSupportCacheStoreAdapter < Flipper::Adapters::ActiveSupportCacheStore end @@ -189,7 +203,7 @@ module Feature @flipper = nil end - # This method is called from config/initializers/flipper.rb and can be used + # This method is called from config/initializers/0_inject_feature_flags.rb and can be used # to register Flipper groups. # See https://docs.gitlab.com/ee/development/feature_flags/index.html # @@ -206,6 +220,14 @@ module Feature Feature::Definition.register_hot_reloader! end + def current_request + if Gitlab::SafeRequestStore.active? + Gitlab::SafeRequestStore[:flipper_request] ||= FlipperRequest.new + else + @flipper_request ||= FlipperRequest.new + end + end + def logger @logger ||= Feature::Logger.build end |