swoosh
Version:
A quick declarative way to use a mongodb backend.
157 lines (154 loc) • 4.29 kB
JavaScript
// Generated by CoffeeScript 1.6.3
var mongoose,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
mongoose = require('mongoose');
module.exports = function(name, attributes, methods, publicAttr, root) {
var generated, getPub, pub, schema;
getPub = function(entity) {
if (publicAttr) {
return generated.pub(entity);
} else {
return entity;
}
};
generated = {};
pub = false;
schema = new mongoose.Schema(attributes);
generated.model = mongoose.model(name, schema);
if (publicAttr) {
generated.pub = function(entity) {
var retval, x, _i, _len;
retval = {};
for (_i = 0, _len = publicAttr.length; _i < _len; _i++) {
x = publicAttr[_i];
retval[x] = entity[x];
}
return retval;
};
}
generated.get = function(id, fn) {
var cb;
cb = fn != null ? fn : function() {};
if (id) {
return generated.model.findById(id, function(err, entity) {
if (err) {
return cb(err);
} else {
return cb(null, entity);
}
});
} else {
return generated.model.find({}, function(err, entitys) {
if (err) {
return cb(err);
} else {
return cb(null, entitys);
}
});
}
};
generated.post = function(data, fn) {
var cb, posting;
cb = fn != null ? fn : function() {};
posting = new generated.model(data);
return posting.save(function(err) {
if (err) {
return cb(err);
} else {
return cb(null, posting);
}
});
};
generated.put = function(id, data, fn) {
var cb;
cb = fn != null ? fn : function() {};
return generated.model.findById(id, function(err, entity) {
var attr;
if (err) {
return cb(err);
} else {
for (attr in data) {
entity[attr] = data[attr];
}
return entity.save(function(err) {
if (err) {
return cb(err);
} else {
return cb(null, entity);
}
});
}
});
};
generated["delete"] = function(id, fn) {
var cb;
cb = fn != null ? fn : function() {};
if (id) {
return generated.model.remove({
_id: id
}, function(err) {
return cb(err);
});
} else {
return cb("No id specified");
}
};
generated.route = function(app) {
if (__indexOf.call(methods, "get") >= 0) {
app.get("/" + root + "/" + name + "/:id?", function(req, res) {
return generated.get(req.params.id, function(err, response) {
var x;
if (err) {
return res.send(500, err);
} else if (req.params.id) {
return res.send(getPub(response));
} else {
return res.send((function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = response.length; _i < _len; _i++) {
x = response[_i];
_results.push(getPub(x));
}
return _results;
})());
}
});
});
}
if (__indexOf.call(methods, "post") >= 0) {
app.post("/" + root + "/" + name, function(req, res) {
return generated.post(req.body, function(err, response) {
if (err) {
return res.send(500, err);
} else {
return res.send(getPub(response));
}
});
});
}
if (__indexOf.call(methods, "put") >= 0) {
app.put("/" + root + "/" + name + "/:id", function(req, res) {
return generated.put(req.params.id, req.body, function(err, response) {
if (err) {
return res.send(500, err);
} else {
return res.send(response);
}
});
});
}
if (__indexOf.call(methods, "delete") >= 0) {
return app["delete"]("/" + root + "/" + name + "/:id", function(req, res) {
return generated["delete"](req.params.id, function(err) {
if (err) {
return res.send(500, err);
} else {
return res.send(200);
}
});
});
}
};
return generated;
};