Module: TrailGuide::Experiments::Enrollment
- Included in:
- Base
- Defined in:
- lib/trail_guide/experiments/enrollment.rb
Instance Method Summary collapse
- #algorithm ⇒ Object
- #algorithm_choose!(metadata: nil) ⇒ Object
- #allow_participation?(metadata = nil) ⇒ Boolean
- #choose!(override: nil, metadata: nil, **opts) ⇒ Object
- #choose_variant!(override: nil, excluded: false, metadata: nil) ⇒ Object
- #track_participation?(metadata = nil) ⇒ Boolean
Instance Method Details
permalink #algorithm ⇒ Object
[View source]
4 5 6 |
# File 'lib/trail_guide/experiments/enrollment.rb', line 4 def algorithm @algorithm ||= self.class.algorithm.new(self) end |
permalink #algorithm_choose!(metadata: nil) ⇒ Object
[View source]
86 87 88 |
# File 'lib/trail_guide/experiments/enrollment.rb', line 86 def algorithm_choose!(metadata: nil) algorithm.choose!(metadata: ) end |
permalink #allow_participation?(metadata = nil) ⇒ Boolean
90 91 92 93 |
# File 'lib/trail_guide/experiments/enrollment.rb', line 90 def allow_participation?(=nil) return true if callbacks[:allow_participation].empty? run_callbacks(:allow_participation, true, participant, ) end |
permalink #choose!(override: nil, metadata: nil, **opts) ⇒ Object
[View source]
8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/trail_guide/experiments/enrollment.rb', line 8 def choose!(override: nil, metadata: nil, **opts) return control if TrailGuide.configuration.disabled variant = choose_variant!(override: override, metadata: , **opts) run_callbacks(:on_use, variant, participant, ) variant rescue Errno::ECONNREFUSED, Redis::BaseError, SocketError => e run_callbacks(:on_redis_failover, e) return variants.find { |var| var == override } || control if override.present? return control end |
permalink #choose_variant!(override: nil, excluded: false, metadata: nil) ⇒ Object
[View source]
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/trail_guide/experiments/enrollment.rb', line 20 def choose_variant!(override: nil, excluded: false, metadata: nil) return control if TrailGuide.configuration.disabled if override.present? variant = variants.find { |var| var == override } || control if running? && !is_combined? variant.increment_participation! if configuration.track_override participant.participating!(variant) if configuration.store_override end return variant end if winner? variant = winning_variant if track_winner_conversions? && running? variant.increment_participation! unless participant.variant == variant participant.exit! if participant.participating? && participant.variant != variant participant.participating!(variant) end return variant end return control if excluded || stopped? if !started? && start_manually? if enable_calibration? unless participant.variant == control control.increment_participation! parent.control.increment_participation! if is_combined? end if participant.participating? && participant.variant != control participant.exit! parent.participant.exit! if is_combined? end participant.participating!(control) parent.participant.participating!(parent.control) if is_combined? end return control end start! unless started? || scheduled? return control unless running? # only re-use the variant for experiments that store participation, # all other (i.e. content-based) experiments should re-select and # re-assign on enrollment if configuration.sticky_assignment? && participant.participating? variant = participant.variant participant.participating!(variant) if track_participation?() return variant end return control unless is_combined? || TrailGuide.configuration.allow_multiple_experiments == true || !participant.participating_in_active_experiments?(TrailGuide.configuration.allow_multiple_experiments == false) return control unless allow_participation?() variant = algorithm_choose!(metadata: ) if track_participation?() variant.increment_participation! participant.participating!(variant) end run_callbacks(:on_choose, variant, participant, ) variant end |
permalink #track_participation?(metadata = nil) ⇒ Boolean
95 96 97 98 |
# File 'lib/trail_guide/experiments/enrollment.rb', line 95 def track_participation?(=nil) return true if callbacks[:track_participation].empty? run_callbacks(:track_participation, true, participant, ) end |