From 654053736a74aa8cd4344e9c4f5e5a7ebeefc33e Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Wed, 6 Apr 2016 19:11:22 -0400 Subject: Store booleans as type boolean --- app/index.js | 2 +- app/node_modules/okadminview/index.js | 3 ++- app/node_modules/okschema/index.js | 13 ++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) (limited to 'app') diff --git a/app/index.js b/app/index.js index d478a03..1a8f97e 100644 --- a/app/index.js +++ b/app/index.js @@ -151,7 +151,7 @@ OKCMS.prototype._createResources = function(resourceConfig, db, schemaCache) { var schema = schemaCache[type]; if (!schema) throw new Error('Resource config references nonexistent schema ' + type); - var resource = OKResource({ + var resource = new OKResource({ type: type, db: db, schema: schema diff --git a/app/node_modules/okadminview/index.js b/app/node_modules/okadminview/index.js index ec3cd86..b94c814 100644 --- a/app/node_modules/okadminview/index.js +++ b/app/node_modules/okadminview/index.js @@ -247,6 +247,7 @@ function OKAdminView(options) { if (!resource) { error(req, res, 400)(new Error('No such resource ' + type)); } else { + var spec = resource.spec try { resource.assertValid(data); resource.update(id, data).then(function(updated) { @@ -254,7 +255,7 @@ function OKAdminView(options) { res.redirect(303, '../' + resource.getID(updated)); }).fail(error(req, res, 500)); } catch (errors) { - var templateData = transformData(meta, resource, data); + var templateData = transformData(meta, spec, resource, data); view.renderResource(req, res, assign(templateData, {errors: errors})); } } diff --git a/app/node_modules/okschema/index.js b/app/node_modules/okschema/index.js index 8162fd4..b3d4cc2 100644 --- a/app/node_modules/okschema/index.js +++ b/app/node_modules/okschema/index.js @@ -66,7 +66,7 @@ var types = { assertValid: function(spec, value) {} }, 'flag': { - parent: 'string', + parent: 'boolean', assertValid: function(spec, value) {} }, 'foreign-key': { @@ -207,14 +207,17 @@ OKSchema.prototype.assertValid = function(data) { // Run through custom validators, they'll throw if invalid Object.keys(data).forEach(function(prop) { var type = spec[prop].type; - if (types[type]) { - types[type].assertValid(spec[prop], data[prop]); - // Also check if it's a number type and try to cast it + + // Check if it's a number/boolean and try to cast it // otherwise pass and let mschema handle - } else if (type === 'number') { + if (type === 'number') { try { data[prop] = parseFloat(data[prop]); } catch (err) {} + } else if (type === 'flag') { + data[prop] = data[prop] == "true" ? true : false + } else if (types[type]) { + types[type].assertValid(spec[prop], data[prop]); } }); var result = mschema.validate(data, this.toMschema()); -- cgit v1.2.3-70-g09d2