summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/index.js2
-rw-r--r--app/node_modules/okadminview/index.js3
-rw-r--r--app/node_modules/okschema/index.js13
-rw-r--r--examples/db.json3
-rw-r--r--examples/index.js1
5 files changed, 14 insertions, 8 deletions
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());
diff --git a/examples/db.json b/examples/db.json
index da7c19a..8805342 100644
--- a/examples/db.json
+++ b/examples/db.json
@@ -207,7 +207,8 @@
"title": "clouds35.mp3",
"thumb": "http://okfocus.s3.amazonaws.com/misc/okcms/video.png"
}
- ]
+ ],
+ "flagged": true
}
]
} \ No newline at end of file
diff --git a/examples/index.js b/examples/index.js
index 57bce4b..fe37954 100644
--- a/examples/index.js
+++ b/examples/index.js
@@ -24,6 +24,7 @@ var app = okcms.createApp({
test: {
id: {type: 'string', hidden: true},
title: {type: 'string'},
+ flagged: {type: 'flag'},
media: {type: 'media-list'},
}
},