summaryrefslogtreecommitdiff
path: root/app/index.js
diff options
context:
space:
mode:
authorSean Fridman <fridman@mail.sfsu.edu>2015-07-10 17:31:40 -0400
committerSean Fridman <fridman@mail.sfsu.edu>2015-07-10 17:37:06 -0400
commit7249dc10568091194a77990513fa2b77fdbd088a (patch)
tree16c0eb548c765e1fde050cf9952f43724c933346 /app/index.js
parentfb5605bdee9f527ffeefd0b59af01534b4d3b8ac (diff)
Implement basic foreign key supportv0.1.13
Diffstat (limited to 'app/index.js')
-rw-r--r--app/index.js23
1 files changed, 23 insertions, 0 deletions
diff --git a/app/index.js b/app/index.js
index d514f10..2507dd2 100644
--- a/app/index.js
+++ b/app/index.js
@@ -78,6 +78,7 @@ function OKCMS(options) {
});
var resourceCache = this._resourceCache =
this._createResources(resourceConfig, db, schemas);
+ this._resolveForeignKeys(resourceCache)
var errorHandler = createErrorHandlerProducer(
templateProvider, adminTemplateProvider, debug);
// Create view instances from config
@@ -154,6 +155,21 @@ OKCMS.prototype._createResources = function(resourceConfig, db, schemaCache) {
return ResourceCache(resources);
};
+OKCMS.prototype._resolveForeignKeys = function(resourceCache) {
+ resourceCache.forEach(function(resource) {
+ Object.keys(resource.foreignKeys).forEach(function(field) {
+ var foreignKeyType = resource.foreignKeys[field]
+ var keyedResource = resourceCache.get(foreignKeyType)
+ if (!keyedResource) {
+ throw new Error(format(
+ "Foreign key field '%s' in '%s' resource references unknown" +
+ "resource of type '%s'", field, resource.type, foreignKeyType))
+ }
+ resource._linkForeignKey(field, resourceCache.get(foreignKeyType))
+ })
+ })
+}
+
OKCMS.prototype._createViews = function(viewConfig, db,
meta, resourceCache, templateProvider, errorHandler) {
viewConfig = viewConfig || {};
@@ -279,6 +295,13 @@ ResourceCache.prototype.get = function(type, id) {
}
};
+ResourceCache.prototype.forEach = function(cb) {
+ cb = cb || function() {}
+ Object.keys(this._cache).forEach(function(key) {
+ cb(this._cache[key])
+ }.bind(this))
+}
+
/**
* Higher order function implementing customizable error handling
*/