diff options
Diffstat (limited to 'app/node_modules/okresource/index.js')
| -rw-r--r-- | app/node_modules/okresource/index.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/app/node_modules/okresource/index.js b/app/node_modules/okresource/index.js new file mode 100644 index 0000000..c46e7f4 --- /dev/null +++ b/app/node_modules/okresource/index.js @@ -0,0 +1,64 @@ +var Q = require('q'); +var joi = require('joi'); +var OKRestEndpoint = require('okrest'); + +/** + * Creates an OKResource types + * Takes a resource name and a spec defining the resources attributes. + */ +function createResourceClass(name, spec, options) { + options = options || {}; + spec = spec || {}; + // All resources have the same default CRUD endpoint + var viewClass = options.endpoint || OKRestEndpoint; + // Id determines specific resource referenced. + // Defaults to set of all resources of this type. + var id = options.id || '*'; + // The meta resource is a special case + var meta = options.meta === undefined ? false : options.meta; + if (viewClass !== OKRestEndpoint && !(viewClass instanceof OKRestEndpoint)) + throw new Error('Resource view not descendent of OKRestEndpoint'); + + /** + * OKResource! + */ + function OKResource(options) { + if (!(this instanceof OKResource)) return new OKResource(options); + options = options || {}; + this.name = name; + if (!name) + throw new Error('No resource type provided to resource!') + var db = this._db = options.db; + if (!db) + throw new Error('No DB provided to resource!'); + this._validator = compileValidator(spec); + } + + /** + * Returns the resource's CRUD view + * This allows us to specify custom views per resource if need be + */ + OKResource.prototype.view = function(options) { + return viewClass(this, options); + }; + + // OKResource.prototype.get = function() { + // return this._query(); + // }; + + // Expose the resource type on the class constructor + OKResource.type = name; + + return OKResource; +} + +/** + * Compiles our schema spec into a schema validator function + */ +function compileValidator(spec) { + // Skip validation for now + var schema = joi.any(); + return schema.validate.bind(schema); +} + +module.exports = createResourceClass; |
