UNPKG

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