class Ablab::Run
Attributes
experiment[R]
request[R]
session_id[R]
Public Class Methods
new(experiment, session_id, request)
click to toggle source
# File lib/ablab.rb, line 122 def initialize(experiment, session_id, request) @experiment, @session_id, @request = experiment, session_id, request end
Public Instance Methods
draw()
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
# File lib/ablab.rb, line 126 def in_group?(name) group == name end
perform_callbacks!(event)
click to toggle source
# 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!()
click to toggle source
# File lib/ablab.rb, line 134 def track_success! track!(:success) end
track_view!()
click to toggle source
# File lib/ablab.rb, line 130 def track_view! track!(:view) end
Private Instance Methods
allowed?(experiment_name, group, session_id, request)
click to toggle source
# File lib/ablab.rb, line 197 def allowed?(experiment_name, group, session_id, request) filter = Ablab.allow_tracking filter.call(experiment_name, group, session_id, request) end
forced_group()
click to toggle source
# File lib/ablab.rb, line 170 def forced_group return nil unless request && request.respond_to?(:params) groups = parse_groups(request.params[:ablab_group]) group = groups[experiment.name.to_s] group.to_sym if group && experiment.groups.map { |g| g.name.to_s }.include?(group) end
parse_groups(str)
click to toggle source
# File lib/ablab.rb, line 177 def parse_groups(str) return {} unless str hash = str.split(/\s*,\s*/).map do |s| exp_group = s.split(/\s*:\s*/).take(2) exp_group if exp_group.size == 2 end.compact.to_h end
track!(event)
click to toggle source
# File lib/ablab.rb, line 185 def track!(event) if allowed?(experiment.name, group, session_id, request) method = (event == :view) ? :track_view! : :track_success! Ablab.tracker.send(method, experiment.name, group, session_id) Thread.new do perform_callbacks!(event) end end rescue => e Ablab.tracking_exception_handler.call(e) end