Class: Ablab::Run
- Inherits:
-
Object
- Object
- Ablab::Run
- Defined in:
- lib/ablab.rb
Instance Attribute Summary collapse
-
#experiment ⇒ Object
readonly
Returns the value of attribute experiment.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
-
#session_id ⇒ Object
readonly
Returns the value of attribute session_id.
Instance Method Summary collapse
- #draw ⇒ Object
- #group ⇒ Object
- #in_group?(name) ⇒ Boolean
-
#initialize(experiment, session_id, request) ⇒ Run
constructor
A new instance of Run.
- #perform_callbacks!(event) ⇒ Object
- #track_success! ⇒ Object
- #track_view! ⇒ Object
Constructor Details
#initialize(experiment, session_id, request) ⇒ Run
Returns a new instance of Run.
122 123 124 |
# File 'lib/ablab.rb', line 122 def initialize(experiment, session_id, request) @experiment, @session_id, @request = experiment, session_id, request end |
Instance Attribute Details
#experiment ⇒ Object (readonly)
Returns the value of attribute experiment.
120 121 122 |
# File 'lib/ablab.rb', line 120 def experiment @experiment end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
120 121 122 |
# File 'lib/ablab.rb', line 120 def request @request end |
#session_id ⇒ Object (readonly)
Returns the value of attribute session_id.
120 121 122 |
# File 'lib/ablab.rb', line 120 def session_id @session_id end |
Instance Method Details
#draw ⇒ Object
153 154 155 156 157 |
# File 'lib/ablab.rb', line 153 def draw sid_hash = Digest::SHA1.hexdigest(session_id)[-8..-1].to_i(16) exp_hash = Digest::SHA1.hexdigest(experiment.name.to_s)[-8..-1].to_i(16) ((sid_hash ^ exp_hash) % 1000) / 10.0 end |
#group ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/ablab.rb', line 138 def group return @group unless @group.nil? if forced = forced_group return forced end d = draw / experiment.percentage_of_visitors return nil if d >= 1 tot_weight = experiment.groups.map(&:weight).reduce(:+).to_f @group = experiment.groups.reduce(0) do |t, group| t += group.weight / tot_weight break group if d < t t end.try(:name) end |
#in_group?(name) ⇒ Boolean
126 127 128 |
# File 'lib/ablab.rb', line 126 def in_group?(name) group == name end |
#perform_callbacks!(event) ⇒ Object
159 160 161 162 163 164 165 166 167 168 |
# File 'lib/ablab.rb', line 159 def perform_callbacks!(event) experiment.callbacks.each do |cbk| cbk.call(event, experiment.name, group, session_id, request) end Ablab.callbacks.each do |cbk| cbk.call(event, experiment.name, group, session_id, request) end rescue => e Ablab.tracking_exception_handler.call(e) end |
#track_success! ⇒ Object
134 135 136 |
# File 'lib/ablab.rb', line 134 def track_success! track!(:success) end |
#track_view! ⇒ Object
130 131 132 |
# File 'lib/ablab.rb', line 130 def track_view! track!(:view) end |