Module: TrailGuide::Experiments::Lifecycle::ClassMethods
- Defined in:
- lib/trail_guide/experiments/lifecycle.rb
Instance Method Summary collapse
- #calibrating? ⇒ Boolean
- #clear_winner! ⇒ Object
- #declare_winner!(variant, context = nil) ⇒ Object
- #fresh? ⇒ Boolean
- #pause!(context = nil) ⇒ Object
- #paused? ⇒ Boolean
- #paused_at ⇒ Object
- #resume!(context = nil) ⇒ Object
- #run_callbacks(hook, *args) ⇒ Object
- #running? ⇒ Boolean
- #schedule!(start_at, stop_at = nil, context = nil) ⇒ Object
- #scheduled? ⇒ Boolean
- #start!(context = nil) ⇒ Object
- #started? ⇒ Boolean
- #started_at ⇒ Object
- #stop!(context = nil) ⇒ Object
- #stopped? ⇒ Boolean
- #stopped_at ⇒ Object
- #winner? ⇒ Boolean
Instance Method Details
#calibrating? ⇒ Boolean
87 88 89 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 87 def enable_calibration? && start_manually? && !started? end |
#clear_winner! ⇒ Object
103 104 105 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 103 def clear_winner! adapter.delete(:winner) end |
#declare_winner!(variant, context = nil) ⇒ Object
95 96 97 98 99 100 101 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 95 def declare_winner!(variant, context=nil) variant = variants.find { |var| var == variant } unless variant.is_a?(Variant) return false unless variant.present? && variant.experiment == self run_callbacks(:on_winner, variant, context) adapter.set(:winner, variant.name) variant end |
#fresh? ⇒ Boolean
91 92 93 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 91 def fresh? !started? && !scheduled? && !winner? end |
#pause!(context = nil) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 27 def pause!(context=nil) return false unless running? && configuration.can_resume? paused = adapter.set(:paused_at, Time.now.to_i) run_callbacks(:on_pause, context) paused end |
#paused? ⇒ Boolean
73 74 75 76 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 73 def paused? time = paused_at time && time <= Time.now end |
#paused_at ⇒ Object
53 54 55 56 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 53 def paused_at paused = adapter.get(:paused_at) return Time.at(paused.to_i) if paused end |
#resume!(context = nil) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 41 def resume!(context=nil) return false unless paused? && configuration.can_resume? resumed = adapter.delete(:paused_at) run_callbacks(:on_resume, context) !!resumed end |
#run_callbacks(hook, *args) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 115 def run_callbacks(hook, *args) return unless callbacks[hook] return args[0] if hook == :rollout_winner # TODO do we need to account for this case here at the class level? args.unshift(self) callbacks[hook].each do |callback| if callback.respond_to?(:call) callback.call(*args) else send(callback, *args) end end end |
#running? ⇒ Boolean
83 84 85 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 83 def running? started? && !paused? && !stopped? end |
#schedule!(start_at, stop_at = nil, context = nil) ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 18 def schedule!(start_at, stop_at=nil, context=nil) return false if started? save! unless persisted? scheduled = adapter.set(:started_at, start_at.to_i) adapter.set(:stopped_at, stop_at.to_i) if stop_at run_callbacks(:on_schedule, start_at, stop_at, context) scheduled end |
#scheduled? ⇒ Boolean
68 69 70 71 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 68 def scheduled? time = started_at time && time > Time.now end |
#start!(context = nil) ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 10 def start!(context=nil) return false if started? save! unless persisted? started = adapter.set(:started_at, Time.now.to_i) run_callbacks(:on_start, context) started end |
#started? ⇒ Boolean
63 64 65 66 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 63 def started? time = started_at time && time <= Time.now end |
#started_at ⇒ Object
48 49 50 51 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 48 def started_at started = adapter.get(:started_at) return Time.at(started.to_i) if started end |
#stop!(context = nil) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 34 def stop!(context=nil) return false unless started? && !stopped? stopped = adapter.set(:stopped_at, Time.now.to_i) run_callbacks(:on_stop, context) stopped end |
#stopped? ⇒ Boolean
78 79 80 81 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 78 def stopped? time = stopped_at time && time <= Time.now end |
#stopped_at ⇒ Object
58 59 60 61 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 58 def stopped_at stopped = adapter.get(:stopped_at) return Time.at(stopped.to_i) if stopped end |
#winner? ⇒ Boolean
107 108 109 110 111 112 113 |
# File 'lib/trail_guide/experiments/lifecycle.rb', line 107 def winner? if combined? combined.all? { |combo| TrailGuide.catalog.find(combo).winner? } else adapter.exists?(:winner) end end |