Class: TrailGuide::ExperimentConfig
- Inherits:
-
Canfig::Config
- Object
- Canfig::Config
- TrailGuide::ExperimentConfig
- Defined in:
- lib/trail_guide/experiment_config.rb
Constant Summary collapse
- ENGINE_CONFIG_KEYS =
[ :start_manually, :reset_manually, :store_override, :track_override, :algorithm, :allow_multiple_conversions, :allow_multiple_goals ].freeze
Instance Attribute Summary collapse
-
#experiment ⇒ Object
readonly
Returns the value of attribute experiment.
Class Method Summary collapse
Instance Method Summary collapse
- #algorithm ⇒ Object
- #allow_multiple_conversions? ⇒ Boolean
- #allow_multiple_goals? ⇒ Boolean
- #control ⇒ Object
- #control=(name) ⇒ Object
- #goal(name) ⇒ Object (also: #funnel)
- #goals ⇒ Object (also: #funnels)
-
#initialize(experiment, *args, **opts, &block) ⇒ ExperimentConfig
constructor
A new instance of ExperimentConfig.
- #metric ⇒ Object
- #name ⇒ Object
- #on_choose(meth = nil, &block) ⇒ Object
- #on_convert(meth = nil, &block) ⇒ Object
- #on_delete(meth = nil, &block) ⇒ Object
- #on_reset(meth = nil, &block) ⇒ Object
- #on_start(meth = nil, &block) ⇒ Object
- #on_stop(meth = nil, &block) ⇒ Object
- #on_use(meth = nil, &block) ⇒ Object
- #resettable? ⇒ Boolean
- #variant(varname, metadata: {}, weight: 1, control: false) ⇒ Object
Constructor Details
#initialize(experiment, *args, **opts, &block) ⇒ ExperimentConfig
Returns a new instance of ExperimentConfig.
34 35 36 37 38 39 40 |
# File 'lib/trail_guide/experiment_config.rb', line 34 def initialize(experiment, *args, **opts, &block) @experiment = experiment opts = opts.merge(self.class.engine_config) opts = opts.merge(self.class.default_config) opts = opts.merge(self.class.callbacks_config) super(*args, **opts, &block) end |
Instance Attribute Details
#experiment ⇒ Object (readonly)
Returns the value of attribute experiment.
32 33 34 |
# File 'lib/trail_guide/experiment_config.rb', line 32 def experiment @experiment end |
Class Method Details
.callbacks_config ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/trail_guide/experiment_config.rb', line 18 def self.callbacks_config { callbacks: { on_choose: [TrailGuide.configuration.on_experiment_choose].flatten.compact, on_use: [TrailGuide.configuration.on_experiment_use].flatten.compact, on_convert: [TrailGuide.configuration.on_experiment_convert].flatten.compact, on_start: [TrailGuide.configuration.on_experiment_start].flatten.compact, on_stop: [TrailGuide.configuration.on_experiment_stop].flatten.compact, on_reset: [TrailGuide.configuration.on_experiment_reset].flatten.compact, on_delete: [TrailGuide.configuration.on_experiment_delete].flatten.compact, } } end |
.default_config ⇒ Object
14 15 16 |
# File 'lib/trail_guide/experiment_config.rb', line 14 def self.default_config { name: nil, metric: nil, variants: [], goals: [] } end |
.engine_config ⇒ Object
8 9 10 11 12 |
# File 'lib/trail_guide/experiment_config.rb', line 8 def self.engine_config ENGINE_CONFIG_KEYS.map do |key| [key, TrailGuide.configuration.send(key.to_sym)] end.to_h end |
Instance Method Details
#algorithm ⇒ Object
62 63 64 |
# File 'lib/trail_guide/experiment_config.rb', line 62 def algorithm @algorithm ||= TrailGuide::Algorithms.algorithm(self[:algorithm]) end |
#allow_multiple_conversions? ⇒ Boolean
46 47 48 |
# File 'lib/trail_guide/experiment_config.rb', line 46 def allow_multiple_conversions? allow_multiple_conversions end |
#allow_multiple_goals? ⇒ Boolean
50 51 52 |
# File 'lib/trail_guide/experiment_config.rb', line 50 def allow_multiple_goals? allow_multiple_goals end |
#control ⇒ Object
75 76 77 |
# File 'lib/trail_guide/experiment_config.rb', line 75 def control return variants.find { |var| var.control? } || variants.first end |
#control=(name) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/trail_guide/experiment_config.rb', line 79 def control=(name) variants.each(&:variant!) var_idx = variants.index { |var| var == name } if var_idx.nil? variant = Variant.new(experiment, name, control: true) else variant = variants.slice!(var_idx, 1)[0] variant.control! end variants.unshift(variant) variant end |
#goal(name) ⇒ Object Also known as: funnel
94 95 96 |
# File 'lib/trail_guide/experiment_config.rb', line 94 def goal(name) goals << name.to_s.underscore.to_sym end |
#goals ⇒ Object Also known as: funnels
99 100 101 |
# File 'lib/trail_guide/experiment_config.rb', line 99 def goals self[:goals] end |
#metric ⇒ Object
58 59 60 |
# File 'lib/trail_guide/experiment_config.rb', line 58 def metric @metric ||= (self[:metric] || name).try(:to_s).try(:underscore).try(:to_sym) end |
#name ⇒ Object
54 55 56 |
# File 'lib/trail_guide/experiment_config.rb', line 54 def name @name ||= (self[:name] || experiment.name).try(:to_s).try(:underscore).try(:to_sym) end |
#on_choose(meth = nil, &block) ⇒ Object
104 105 106 |
# File 'lib/trail_guide/experiment_config.rb', line 104 def on_choose(meth=nil, &block) callbacks[:on_choose] << (meth || block) end |
#on_convert(meth = nil, &block) ⇒ Object
112 113 114 |
# File 'lib/trail_guide/experiment_config.rb', line 112 def on_convert(meth=nil, &block) callbacks[:on_convert] << (meth || block) end |
#on_delete(meth = nil, &block) ⇒ Object
128 129 130 |
# File 'lib/trail_guide/experiment_config.rb', line 128 def on_delete(meth=nil, &block) callbacks[:on_delete] << (meth || block) end |
#on_reset(meth = nil, &block) ⇒ Object
124 125 126 |
# File 'lib/trail_guide/experiment_config.rb', line 124 def on_reset(meth=nil, &block) callbacks[:on_reset] << (meth || block) end |
#on_start(meth = nil, &block) ⇒ Object
116 117 118 |
# File 'lib/trail_guide/experiment_config.rb', line 116 def on_start(meth=nil, &block) callbacks[:on_start] << (meth || block) end |
#on_stop(meth = nil, &block) ⇒ Object
120 121 122 |
# File 'lib/trail_guide/experiment_config.rb', line 120 def on_stop(meth=nil, &block) callbacks[:on_stop] << (meth || block) end |
#on_use(meth = nil, &block) ⇒ Object
108 109 110 |
# File 'lib/trail_guide/experiment_config.rb', line 108 def on_use(meth=nil, &block) callbacks[:on_use] << (meth || block) end |
#resettable? ⇒ Boolean
42 43 44 |
# File 'lib/trail_guide/experiment_config.rb', line 42 def resettable? !reset_manually end |
#variant(varname, metadata: {}, weight: 1, control: false) ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/trail_guide/experiment_config.rb', line 66 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: , weight: weight, control: control) variants << variant variant end |