class TrailGuide::Experiments::Config
Constants
- CALLBACK_KEYS
- DEFAULT_KEYS
Attributes
experiment[R]
Public Class Methods
new(experiment, *args, **opts, &block)
click to toggle source
Calls superclass method
# File lib/trail_guide/experiments/config.rb, line 33 def initialize(experiment, *args, **opts, &block) @experiment = experiment opts = default_config.merge(opts) ancestor = opts.delete(:inherit) if ancestor.present? keys = opts.keys.dup.concat(args).concat(DEFAULT_KEYS).concat(CALLBACK_KEYS).uniq opts = opts.merge(ancestor.to_h.slice(*keys)) opts[:name] = nil opts[:goals] = ancestor.goals.dup opts[:combined] = ancestor.combined.dup opts[:variants] = ancestor.variants.dup(experiment) opts = opts.merge(ancestor.callbacks.map { |k,v| [k,[v].flatten.compact] }.to_h) end super(*args, **opts, &block) end
Public Instance Methods
algorithm()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 89 def algorithm if self[:algorithm].is_a?(Array) && self[:algorithm].last.respond_to?(:call) @algorithm ||= TrailGuide::Algorithms.algorithm(self[:algorithm].first).new(&self[:algorithm].last) else @algorithm ||= TrailGuide::Algorithms.algorithm(self[:algorithm]) end end
allow_conversion(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 294 def allow_conversion(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:allow_conversion] ||= [] self[:allow_conversion] << (meth || block) end
allow_multiple_conversions?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 61 def allow_multiple_conversions? !!allow_multiple_conversions end
allow_multiple_goals?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 65 def allow_multiple_goals? !!allow_multiple_goals end
allow_participation(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 288 def allow_participation(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:allow_participation] ||= [] self[:allow_participation] << (meth || block) end
callback_config()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 25 def callback_config CALLBACK_KEYS.map do |key| [key, []] end.to_h end
callbacks()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 212 def callbacks to_h.slice(*CALLBACK_KEYS).map { |k,v| [k, [v].flatten.compact] }.to_h end
can_resume?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 77 def can_resume? !!can_resume end
combined()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 200 def combined self[:combined] ||= [] end
combined?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 204 def combined? !combined.empty? end
control()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 110 def control return variants.find { |var| var.control? } || variants.first end
control=(name)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 114 def control=(name) variants.each(&:variant!) var_idx = variants.index { |var| var == name } if var_idx.nil? variant = Variant.new(experiment, name, control: true) variants.push(variant) else variant = variants[var_idx] variant.control! end variant end
default_config()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 19 def default_config DEFAULT_KEYS.map do |key| [key, nil] end.to_h.merge(callback_config) end
enable_calibration?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 81 def enable_calibration? !!enable_calibration end
goal(name, **config, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 155 def goal(name, **config, &block) goals << Metrics::Goal.new(experiment, name, **config, &block) end
Also aliased as: funnel
goal=(name)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 160 def goal=(name) goals << Metrics::Goal.new(experiment, name) end
Also aliased as: funnel=
goals(*names, **config, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 170 def goals(*names, **config, &block) self[:goals] ||= [] self[:goals] = self[:goals].map { |g| g.is_a?(Metrics::Goal) ? g : Metrics::Goal.new(experiment, g) } unless names.empty? self[:goals] = self[:goals].concat([names].flatten.map { |g| Metrics::Goal.new(experiment, g, **config, &block) }) end self[:goals] end
Also aliased as: funnels
goals=(*names)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 165 def goals=(*names) self[:goals] = [names].flatten.map { |g| Metrics::Goal.new(experiment, g) } end
Also aliased as: funnels=
group(grp=nil)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 142 def group(grp=nil) unless grp.nil? groups << grp.to_s.underscore.to_sym return groups.last end groups.first end
group=(grp)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 150 def group=(grp) groups.unshift(grp.to_s.underscore.to_sym) groups.first end
groups(*grps)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 129 def groups(*grps) self[:groups] ||= [] self[:groups] = self[:groups].map { |g| g.to_s.underscore.to_sym } unless grps.empty? self[:groups] = self[:groups].concat([grps].flatten.map { |g| g.to_s.underscore.to_sym }) end self[:groups] end
groups=(*grps)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 138 def groups=(*grps) self[:groups] = [grps].flatten.map { |g| g.to_s.underscore.to_sym } end
metric(name, **config, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 180 def metric(name, **config, &block) group(name) goal(name, **config, &block) end
metric=(name)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 185 def metric=(name) self.group = name self.goal = name end
metrics(*names, **config, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 190 def metrics(*names, **config, &block) groups(*names) goals(*names, **config, &block) end
metrics=(*names)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 195 def metrics=(*names) self.send(:groups=, *names.flatten) self.send(:goals=, *names.flatten) end
name()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 85 def name @name ||= (self[:name] || experiment.name).try(:to_s).try(:underscore).try(:to_sym) end
on_choose(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 216 def on_choose(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_choose] ||= [] self[:on_choose] << (meth || block) end
on_convert(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 228 def on_convert(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_convert] ||= [] self[:on_convert] << (meth || block) end
on_delete(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 276 def on_delete(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_delete] ||= [] self[:on_delete] << (meth || block) end
on_pause(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 252 def on_pause(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_pause] ||= [] self[:on_pause] << (meth || block) end
on_redis_failover(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 282 def on_redis_failover(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_redis_failover] ||= [] self[:on_redis_failover] << (meth || block) end
on_reset(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 270 def on_reset(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_reset] ||= [] self[:on_reset] << (meth || block) end
on_resume(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 258 def on_resume(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_resume] ||= [] self[:on_resume] << (meth || block) end
on_schedule(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 240 def on_schedule(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_schedule] ||= [] self[:on_schedule] << (meth || block) end
on_start(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 234 def on_start(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_start] ||= [] self[:on_start] << (meth || block) end
on_stop(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 246 def on_stop(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_stop] ||= [] self[:on_stop] << (meth || block) end
on_use(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 222 def on_use(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_use] ||= [] self[:on_use] << (meth || block) end
on_winner(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 264 def on_winner(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:on_winner] ||= [] self[:on_winner] << (meth || block) end
preview_url?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 208 def preview_url? !!preview_url end
reset_manually?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 53 def reset_manually? !!reset_manually end
rollout_winner(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 306 def rollout_winner(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:rollout_winner] ||= [] self[:rollout_winner] << (meth || block) end
skip_request_filter?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 73 def skip_request_filter? !!skip_request_filter end
start_manually?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 49 def start_manually? !!start_manually end
sticky_assignment?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 57 def sticky_assignment? !!sticky_assignment end
track_participation(meth=nil, &block)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 300 def track_participation(meth=nil, &block) raise ArgumentError if meth.nil? && !block_given? self[:track_participation] ||= [] self[:track_participation] << (meth || block) end
track_winner_conversions?()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 69 def track_winner_conversions? !!track_winner_conversions end
variant(varname, metadata: {}, weight: 1, control: false)
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 101 def variant(varname, metadata: {}, weight: 1, control: false) raise ArgumentError, "The variant `#{varname}` already exists in the experiment `#{name}`" if variants.any? { |var| var == varname } control = true if variants.empty? variants.each(&:variant!) if control variant = Variant.new(experiment, varname, metadata: metadata, weight: weight, control: control) variants << variant variant end
variants()
click to toggle source
# File lib/trail_guide/experiments/config.rb, line 97 def variants self[:variants] ||= TrailGuide::Variants.new end