class Gitlab::Experiment::Context
Constants
- DNT_REGEXP
Public Class Methods
new(experiment, **initial_value)
click to toggle source
# File lib/gitlab/experiment/context.rb, line 12 def initialize(experiment, **initial_value) @experiment = experiment @value = {} @migrations = { merged: [], unmerged: [] } value(initial_value) end
Public Instance Methods
freeze()
click to toggle source
Calls superclass method
# File lib/gitlab/experiment/context.rb, line 44 def freeze signature # finalize before freezing super end
key(key = nil)
click to toggle source
# File lib/gitlab/experiment/context.rb, line 34 def key(key = nil) return @key || @experiment.key_for(value) if key.nil? @key = key end
method_missing(method_name, *)
click to toggle source
Calls superclass method
# File lib/gitlab/experiment/context.rb, line 53 def method_missing(method_name, *) @value.include?(method_name.to_sym) ? @value[method_name.to_sym] : super end
reinitialize(request)
click to toggle source
# File lib/gitlab/experiment/context.rb, line 20 def reinitialize(request) @signature = nil # clear memoization @request = request if request.respond_to?(:headers) && request.respond_to?(:cookie_jar) end
respond_to_missing?(method_name, *)
click to toggle source
Calls superclass method
# File lib/gitlab/experiment/context.rb, line 57 def respond_to_missing?(method_name, *) @value.include?(method_name.to_sym) ? true : super end
signature()
click to toggle source
# File lib/gitlab/experiment/context.rb, line 49 def signature @signature ||= { key: key, migration_keys: migration_keys }.compact end
trackable?()
click to toggle source
# File lib/gitlab/experiment/context.rb, line 40 def trackable? !(@request && @request.headers['DNT'].to_s.match?(DNT_REGEXP)) end
value(value = nil)
click to toggle source
# File lib/gitlab/experiment/context.rb, line 25 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
Private Instance Methods
add_merged_migration(value = {})
click to toggle source
# File lib/gitlab/experiment/context.rb, line 74 def add_merged_migration(value = {}) @migrations[:merged] << value if value.is_a?(Hash) end
add_unmerged_migration(value = {})
click to toggle source
# File lib/gitlab/experiment/context.rb, line 70 def add_unmerged_migration(value = {}) @migrations[:unmerged] << value if value.is_a?(Hash) end
migration_keys()
click to toggle source
# File lib/gitlab/experiment/context.rb, line 78 def migration_keys return nil if @migrations[:unmerged].empty? && @migrations[:merged].empty? @migrations[:unmerged].map { |m| @experiment.key_for(m) } + @migrations[:merged].map { |m| @experiment.key_for(@value.merge(m)) } end
process_migrations(value)
click to toggle source
# File lib/gitlab/experiment/context.rb, line 63 def process_migrations(value) add_unmerged_migration(value.delete(:migrated_from)) add_merged_migration(value.delete(:migrated_with)) migrate_cookie(value, "#{@experiment.name}_id") end