overleaf/services/web/public/coffee/analytics/AbTestingManager.coffee

42 lines
1.3 KiB
CoffeeScript
Raw Normal View History

define [
"base"
"libs/md5"
], (App) ->
App.factory "abTestManager", ($http, ipCookie) ->
_buildCookieKey = (testName)-> "sl_abt_#{testName}"
_getTestCookie = (testName)->
cookieKey = _buildCookieKey(testName)
return ipCookie(cookieKey)
_persistCookieStep = (testName, newStep)->
ipCookie(_buildCookieKey(testName), step:newStep, {expires:10})
ga('send', 'event', 'ab_tests', testName, {step:newStep})
_checkIfStepIsNext = (cookieStep, newStep)->
if !cookieStep? and newStep != 0
return false
else if newStep == 0
return true
else if (cookieStep+1) == newStep
return true
else
return false
processTestWithStep: processTestWithStep = (testName, newStep)->
currentCookieStep = _getTestCookie(testName)?.step
if _checkIfStepIsNext(currentCookieStep, newStep)
_persistCookieStep(testName, newStep)
getABTestBucket: getABTestBucket = (user_id, test_name, buckets) ->
hash = CryptoJS.MD5("#{user_id}:#{test_name}")
bucketIndex = parseInt(hash.toString().slice(0,2), 16) % (buckets?.length or 2)
return buckets[bucketIndex]
App.controller "AbTestController", ($scope, abTestManager)->
testKeys = _.keys(window.ab)
_.each testKeys, (testName)->
abTestManager.processTestWithStep testName, window.ab[testName]?.step