utils.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. 'use strict';
  2. var mongoUri = process.env.MONGOLAB_URI || process.env.MONGOHQ_URL || process.env.MONGO_URI || 'mongodb://localhost/growi_test'
  3. , mongoose= require('mongoose')
  4. , fs = require('fs')
  5. , models = {}
  6. , crowi = new (require(ROOT_DIR + '/lib/crowi'))(ROOT_DIR, process.env)
  7. ;
  8. mongoose.Promise = global.Promise;
  9. before('Create database connection and clean up', function (done) {
  10. if (!mongoUri) {
  11. return done();
  12. }
  13. mongoose.connect(mongoUri);
  14. function clearDB() {
  15. for (var i in mongoose.connection.collections) {
  16. mongoose.connection.collections[i].remove(function() {});
  17. }
  18. return done();
  19. }
  20. if (mongoose.connection.readyState === 0) {
  21. mongoose.connect(mongoUri, function (err) {
  22. if (err) {
  23. throw err;
  24. }
  25. return clearDB();
  26. });
  27. } else {
  28. return clearDB();
  29. }
  30. });
  31. after('Close database connection', function (done) {
  32. if (!mongoUri) {
  33. return done();
  34. }
  35. mongoose.disconnect();
  36. return done();
  37. });
  38. // Setup Models
  39. fs.readdirSync(MODEL_DIR).forEach(function(file) {
  40. if (file.match(/^([\w-]+)\.js$/)) {
  41. var name = RegExp.$1;
  42. if (name === 'index') {
  43. return;
  44. }
  45. var modelName = '';
  46. name.split('-').map(splitted => {
  47. modelName += (splitted.charAt(0).toUpperCase() + splitted.slice(1));
  48. });
  49. models[modelName] = require(MODEL_DIR + '/' + file)(crowi);
  50. }
  51. });
  52. crowi.models = models;
  53. module.exports = {
  54. models: models,
  55. mongoose: mongoose,
  56. }