2015-03-07 19:30:25 -05:00
CocoModel = require ' ./CocoModel '
schema = require ' schemas/models/poll.schema '
module.exports = class Poll extends CocoModel
@className: ' Poll '
@schema: schema
urlRoot: ' /db/poll '
2015-03-28 16:54:44 -04:00
applyDelta: (delta) ->
# Hackiest hacks ever, just manually mauling the delta (whose format I don't understand) to not overwrite votes and other languages' nested translations.
# One still must be careful about patches that accidentally delete keys from the top-level i18n object.
i18nDelta = { }
if delta . i18n
i18nDelta.i18n = $ . extend true , { } , delta . i18n
for answerIndex , answerChanges of delta . answers ? { }
i18nDelta . answers ? = { }
if _ . isArray answerChanges
i18nDelta . answers [ answerIndex ] ? = [ ]
for change in answerChanges
if _ . isNumber change
pickedChange = change
else
pickedChange = $ . extend true , { } , change
for key of pickedChange
answerIndexNum = parseInt ( answerIndex . replace ( ' _ ' , ' ' ) , 10 )
unless _ . isNaN answerIndexNum
oldValue = @ get ( ' answers ' ) [ answerIndexNum ] [ key ]
isDeletion = _ . string . startsWith answerIndex , ' _ '
isI18N = key is ' i18n '
if isI18N and not isDeletion
# Use the new change, but make sure we're not deleting any other languages' translations.
value = pickedChange [ key ]
for language , oldTranslations of oldValue ? { }
for translationKey , translationValue of oldTranslations ? { }
value [ language ] ? = { }
value [ language ] [ translationKey ] ? = translationValue
else
value = oldValue
pickedChange [ key ] = value
i18nDelta . answers [ answerIndex ] . push pickedChange
else
i18nDelta . answers [ answerIndex ] = answerChanges
if answerChanges ? . votes
i18nDelta . answers [ answerIndex ] = _ . omit answerChanges , ' votes '
#console.log 'got delta', delta
#console.log 'got i18nDelta', i18nDelta
super i18nDelta