UNPKG

3.44 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.7.1
2
3/*
4 * Plugin for the Americano web framework that takes care of your Model
5 * by providing helpers to build them (it wraps jugglingdb!). It requires you
6 * to write your requests in a single and clean file.
7 *
8 * This plugin has only sense for Cozy applications.
9 */
10
11(function() {
12 var Schema, db, log, _loadModels, _loadRequestCreators, _saveRequest, _saveRequests;
13
14 log = require('printit')({
15 date: true,
16 prefix: 'americano-cozy'
17 });
18
19 _loadModels = function(root, requests) {
20 var docRequests, docType, models;
21 models = [];
22 for (docType in requests) {
23 docRequests = requests[docType];
24 models[docType] = require("" + root + "/server/models/" + docType);
25 }
26 return models;
27 };
28
29 _saveRequest = function(models, request, callback) {
30 var docRequest, docType, requestName;
31 docType = request.docType;
32 requestName = request.name;
33 docRequest = request.docRequest;
34 log.info("" + docType + " - " + requestName + " request creation...");
35 return models[docType].defineRequest(requestName, docRequest, function(err) {
36 if (err) {
37 log.error("failed " + err);
38 } else {
39 log.info("succeeded");
40 }
41 return callback(err);
42 });
43 };
44
45 _saveRequests = function(models, requestsToSave, callback) {
46 var request;
47 if (requestsToSave.length > 0) {
48 request = requestsToSave.pop();
49 return _saveRequest(models, request, function(err) {
50 if (err) {
51 return callback(err);
52 } else {
53 return _saveRequests(models, requestsToSave, callback);
54 }
55 });
56 } else {
57 return callback();
58 }
59 };
60
61 _loadRequestCreators = function(root, models, requests) {
62 var docRequest, docRequests, docType, requestName, requestsToSave;
63 requestsToSave = [];
64 for (docType in requests) {
65 docRequests = requests[docType];
66 for (requestName in docRequests) {
67 docRequest = docRequests[requestName];
68 requestsToSave.push({
69 root: root,
70 models: models,
71 docType: docType,
72 name: requestName,
73 docRequest: docRequest
74 });
75 }
76 }
77 return requestsToSave;
78 };
79
80 module.exports.configure = function(root, app, callback) {
81 var err, models, requests, requestsToSave;
82 try {
83 requests = require("" + root + "/server/models/requests");
84 } catch (_error) {
85 err = _error;
86 log.error("failed to load requests file");
87 callback(err);
88 }
89 models = _loadModels(root, requests);
90 requestsToSave = _loadRequestCreators(root, models, requests);
91 return _saveRequests(models, requestsToSave, function(err) {
92 if (err && err.code !== 'EEXIST') {
93 log.error("A request creation failed, abandon.");
94 console.log(err);
95 if (callback != null) {
96 return callback(err);
97 }
98 } else {
99 log.info("All requests have been created");
100 if (callback != null) {
101 return callback();
102 }
103 }
104 });
105 };
106
107 Schema = require('jugglingdb').Schema;
108
109 module.exports.db = db = new Schema('cozy-adapter', {});
110
111 module.exports.getModel = function(name, fields) {
112 var model;
113 fields.id = String;
114 model = db.define(name, fields);
115 return model;
116 };
117
118 module.exports.defaultRequests = {
119 all: function(doc) {
120 return emit(doc._id, doc);
121 }
122 };
123
124}).call(this);