Class: Split::Trial
- Inherits:
-
Object
- Object
- Split::Trial
- Defined in:
- lib/split/trial.rb
Instance Attribute Summary collapse
-
#experiment ⇒ Object
Returns the value of attribute experiment.
- #metadata ⇒ Object
Instance Method Summary collapse
- #alternative ⇒ Object
- #alternative=(alternative) ⇒ Object
-
#choose!(context = nil) ⇒ Object
Choose an alternative, add a participant, and save the alternative choice on the user.
- #complete!(goals = [], context = nil) ⇒ Object
-
#initialize(attrs = {}) ⇒ Trial
constructor
A new instance of Trial.
Constructor Details
#initialize(attrs = {}) ⇒ Trial
Returns a new instance of Trial.
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/split/trial.rb', line 7 def initialize(attrs = {}) self.experiment = attrs.delete(:experiment) self.alternative = attrs.delete(:alternative) self. = attrs.delete(:metadata) @user = attrs.delete(:user) @options = attrs @alternative_choosen = false end |
Instance Attribute Details
#experiment ⇒ Object
Returns the value of attribute experiment.
4 5 6 |
# File 'lib/split/trial.rb', line 4 def experiment @experiment end |
#metadata ⇒ Object
18 19 20 |
# File 'lib/split/trial.rb', line 18 def @metadata ||= experiment.[alternative.name] if experiment. end |
Instance Method Details
#alternative ⇒ Object
22 23 24 25 26 |
# File 'lib/split/trial.rb', line 22 def alternative @alternative ||= if @experiment.has_winner? @experiment.winner end end |
#alternative=(alternative) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/split/trial.rb', line 28 def alternative=(alternative) @alternative = if alternative.kind_of?(Split::Alternative) alternative else @experiment.alternatives.find{|a| a.name == alternative } end end |
#choose!(context = nil) ⇒ Object
Choose an alternative, add a participant, and save the alternative choice on the user. This method is guaranteed to only run once, and will skip the alternative choosing process if run a second time.
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 85 86 87 |
# File 'lib/split/trial.rb', line 51 def choose!(context = nil) @user.cleanup_old_experiments! self.experiment # Only run the process once return alternative if @alternative_choosen if override_is_alternative? self.alternative = @options[:override] if should_store_alternative? && !@user[@experiment.key] self.alternative.increment_participation end elsif @options[:disabled] || Split.configuration.disabled? self.alternative = @experiment.control elsif @experiment.has_winner? self.alternative = @experiment.winner else cleanup_old_versions if exclude_user? self.alternative = @experiment.control else self.alternative = @user[@experiment.key] if alternative.nil? self.alternative = @experiment.next_alternative # Increment the number of participants since we are actually choosing a new alternative self.alternative.increment_participation run_callback context, Split.configuration.on_trial_choose end end end @user[@experiment.key] = alternative.name if !@experiment.has_winner? && should_store_alternative? @alternative_choosen = true run_callback context, Split.configuration.on_trial unless @options[:disabled] || Split.configuration.disabled? alternative end |
#complete!(goals = [], context = nil) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/split/trial.rb', line 36 def complete!(goals=[], context = nil) if alternative if Array(goals).empty? alternative.increment_completion else Array(goals).each {|g| alternative.increment_completion(g) } end run_callback context, Split.configuration.on_trial_complete end end |