Class: Gitlab::Experiment::Context
- Inherits:
-
Object
- Object
- Gitlab::Experiment::Context
- Includes:
- Cookies
- Defined in:
- lib/gitlab/experiment/context.rb
Constant Summary collapse
- DNT_REGEXP =
/^(true|t|yes|y|1|on)$/i.freeze
Instance Method Summary collapse
- #freeze ⇒ Object
-
#initialize(experiment, **initial_value) ⇒ Context
constructor
A new instance of Context.
- #reinitialize(request) ⇒ Object
- #signature ⇒ Object
- #trackable? ⇒ Boolean
- #value(value = nil) ⇒ Object
Constructor Details
#initialize(experiment, **initial_value) ⇒ Context
Returns a new instance of Context.
10 11 12 13 14 15 16 |
# File 'lib/gitlab/experiment/context.rb', line 10 def initialize(experiment, **initial_value) @experiment = experiment @value = {} @migrations = { merged: [], unmerged: [] } value(initial_value) end |
Instance Method Details
#freeze ⇒ Object
36 37 38 39 |
# File 'lib/gitlab/experiment/context.rb', line 36 def freeze signature # finalize before freezing super end |
#reinitialize(request) ⇒ Object
18 19 20 21 |
# File 'lib/gitlab/experiment/context.rb', line 18 def reinitialize(request) @signature = nil # clear memoization @request = request if request.respond_to?(:headers) && request.respond_to?(:cookie_jar) end |
#signature ⇒ Object
41 42 43 |
# File 'lib/gitlab/experiment/context.rb', line 41 def signature @signature ||= { key: @experiment.key_for(@value), migration_keys: migration_keys }.compact end |
#trackable? ⇒ Boolean
32 33 34 |
# File 'lib/gitlab/experiment/context.rb', line 32 def trackable? !(@request && @request.headers['DNT'].to_s.match?(DNT_REGEXP)) end |
#value(value = nil) ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'lib/gitlab/experiment/context.rb', line 23 def value(value = nil) return @value if value.nil? value = value.dup # dup so we don't mutate reinitialize(value.delete(:request)) @value.merge!(process_migrations(value)) end |