From 5c834568aba11247676664bff0d67f41cdde3dfd Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Mon, 14 Jan 2013 16:17:50 +0300 Subject: [PATCH] Match the existing parameter type when applying configuration --- common.coffee | 35 ++++++++++++++++++++++++++++------- presets.coffee | 6 ++++-- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/common.coffee b/common.coffee index 4ddb123..ac1550a 100644 --- a/common.coffee +++ b/common.coffee @@ -1,11 +1,12 @@ -exports.UNDEFINED_TYPE = '[object Undefined]' -exports.NULL_TYPE = '[object Null]' -exports.NUMBER_TYPE = '[object Number]' -exports.STRING_TYPE = '[object String]' -exports.ARRAY_TYPE = '[object Array]' -exports.OBJECT_TYPE = '[object Object]' +UNDEFINED_TYPE = '[object Undefined]' +NULL_TYPE = '[object Null]' +NUMBER_TYPE = '[object Number]' +STRING_TYPE = '[object String]' +ARRAY_TYPE = '[object Array]' +OBJECT_TYPE = '[object Object]' -exports.typeOf = (obj) -> + +typeOf = (obj) -> Object.prototype.toString.call(obj) @@ -39,3 +40,23 @@ exports.getParamValueFromPath = (obj, path) -> for p in pp ref = ref[p] return ref + + +exports.matchType = (src, dst) -> + switch typeOf(src) + when STRING_TYPE + String(dst) + when NUMBER_TYPE + Number(dst) + else + dst + + +exports.UNDEFINED_TYPE = UNDEFINED_TYPE +exports.NULL_TYPE = NULL_TYPE +exports.NUMBER_TYPE = NUMBER_TYPE +exports.STRING_TYPE = STRING_TYPE +exports.ARRAY_TYPE = ARRAY_TYPE +exports.OBJECT_TYPE = OBJECT_TYPE + +exports.typeOf = typeOf diff --git a/presets.coffee b/presets.coffee index 0dac012..a8f3156 100644 --- a/presets.coffee +++ b/presets.coffee @@ -72,8 +72,10 @@ exports.assertPresets = (deviceId, presetsHash, callback) -> for c in configurations switch c.type when 'value' - if c.value != common.getParamValueFromPath(device, "#{c.name}._value") - setParameterValues.push([c.name, c.value]) + src = common.getParamValueFromPath(device, "#{c.name}._value") + dst = common.matchType(src, c.value) + if src != dst + setParameterValues.push([c.name, dst]) when 'age' timeDiff = (now - common.getParamValueFromPath(device, "#{c.name}._timestamp")) / 1000 if (c.age - timeDiff < config.PRESETS_TIME_PADDING)