diff --git a/lib/adapters/redis2.js b/lib/adapters/redis2.js index 2dd4893d..53215b0f 100644 --- a/lib/adapters/redis2.js +++ b/lib/adapters/redis2.js @@ -175,34 +175,59 @@ BridgeToRedis.prototype.defineForeignKey = function (model, key, cb) { BridgeToRedis.prototype.forDb = function (model, data) { var p = this._models[model].properties; for (var i in data) { - if (p[i] && p[i].type.name === 'Date') { - data[i] = data[i] && data[i].getTime ? data[i].getTime() : 0; - } else if (p[i] && [ - 'String', 'Text', 'Number', 'Boolean', 'Date' - ].indexOf(p[i].type.name) === -1) { - data[i] = JSON.stringify(data[i]); + if (!p[i]) continue; + if (!data[i]) { + data[i] = ""; + continue; + } + switch (p[i].type.name) { + case "Date": + data[i] = data[i].getTime ? data[i].getTime().toString() : "0"; + break; + case "Number": + data[i] = data[i].toString(); + break; + case "Boolean": + data[i] = !!data[i] ? "1" : "0"; + break; + case "String": + case "Text": + break; + default: + data[i] = JSON.stringify(data[i]); } } return data; }; BridgeToRedis.prototype.fromDb = function (model, data) { - var p = this._models[model].properties; + var p = this._models[model].properties, d; for (var i in data) { - if (p[i] && p[i].type.name === 'Date') { - if (isNaN(parseInt(data[i]))) { - data[i] = new Date(data[i]); - } else { - var ms = data[i]; - data[i] = new Date(); - data[i].setTime(ms); - } - } else if (p[i] && [ - 'String', 'Text', 'Number', 'Boolean', 'Date' - ].indexOf(p[i].type.name) === -1) { - try { - data[i] = JSON.parse(data[i]); - } catch (e) {} + if (!p[i]) continue; + if (!data[i]) { + data[i] = ""; + continue; + } + switch (p[i].type.name) { + case "Date": + d = new Date(data[i]); + d.setTime(data[i]); + data[i] = d; + break; + case "Number": + data[i] = Number(data[i]); + break; + case "Boolean": + data[i] = data[i] === "1"; + break; + default: + d = data[i]; + try { + data[i] = JSON.parse(data[i]); + } + catch(e) { + data[i] = d; + } } } return data;