diff options
Diffstat (limited to 'app/index.js')
| -rw-r--r-- | app/index.js | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/app/index.js b/app/index.js index 1c77728..2507dd2 100644 --- a/app/index.js +++ b/app/index.js @@ -60,6 +60,7 @@ function OKCMS(options) { '/': { template: 'index' } }; var serviceConfig = options.services || {}; + var adminConfig = options.admin || {} var templateProvider = this._templateProvider = new OKTemplate({ root: templateRoot, @@ -77,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 @@ -84,7 +86,7 @@ function OKCMS(options) { this._createViews(viewConfig, db, meta, resourceCache, templateProvider, errorHandler); var adminViews = this._adminViews = - this._createAdminViews(adminPath, app, express, resourceConfig, + this._createAdminViews(adminConfig, adminPath, app, express, resourceConfig, resourceCache, adminTemplateProvider, adminMeta, errorHandler); @@ -153,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 || {}; @@ -194,9 +211,8 @@ OKCMS.prototype._createViews = function(viewConfig, db, } }; -OKCMS.prototype._createAdminViews = function(path, app, express, - resourceConfig, resourceCache, templateProvider, meta, - errorHandler) { +OKCMS.prototype._createAdminViews = function(adminConfig, path, app, express, + resourceConfig, resourceCache, templateProvider, meta, errorHandler) { var views = {}; var withTrail = withTrailingSlash(path); var withoutTrail = withoutTrailingSlash(path); @@ -221,7 +237,8 @@ OKCMS.prototype._createAdminViews = function(path, app, express, resourceCache: resourceCache, templateProvider: templateProvider, meta: meta, - errorHandler: errorHandler + errorHandler: errorHandler, + dashboardConfig: adminConfig.dashboard || {} }); return views; }; @@ -243,7 +260,8 @@ OKCMS.prototype._createQueries = function(queryConfig, resourceCache) { query: query, as: config.as, sortBy: config.sortBy, - descending: config.descending + descending: config.descending, + groupBy: config.groupBy }); }); }; @@ -277,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 */ |
