added basic new a/b test funnely framework

This commit is contained in:
Henry Oswald 2014-09-01 15:14:08 +01:00
parent f3c04feda7
commit 62f207c368
3 changed files with 49 additions and 2 deletions

View file

@ -43,7 +43,7 @@ html(itemscope, itemtype='http://schema.org/Product')
script(type="text/javascript").
window.csrfToken = "#{csrfToken}";
block scripts
script(src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js")
script(src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min.js")
@ -54,6 +54,7 @@ html(itemscope, itemtype='http://schema.org/Product')
jsPath: '#{jsPath}'
};
window.systemMessages = !{JSON.stringify(systemMessages).replace(/\//g, '\\/')};
window.ab = {}
- if (typeof(settings.algolia) != "undefined")
script.
@ -125,5 +126,8 @@ html(itemscope, itemtype='http://schema.org/Product')
category: "questions"
};
span(ng-controller="AbTestController")
script.
window.ab.plan14 = {step:1}

View file

@ -0,0 +1,42 @@
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

View file

@ -12,6 +12,7 @@ define [
"main/translations"
"main/subscription-dashboard"
"main/annual-upgrade"
"analytics/AbTestingmanager"
"directives/asyncForm"
"directives/stopPropagation"
"directives/focus"