Skip to content

Commit

Permalink
Merge pull request #29 from BoolJS/develop
Browse files Browse the repository at this point in the history
Release v0.8.0
  • Loading branch information
pandres95 authored Oct 22, 2018
2 parents 5b9e7d4 + 414ec38 commit e1975b7
Show file tree
Hide file tree
Showing 21 changed files with 249 additions and 463 deletions.
3 changes: 0 additions & 3 deletions .gitmodules

This file was deleted.

1 change: 0 additions & 1 deletion example
Submodule example deleted from 145d8f
7 changes: 7 additions & 0 deletions example/.jshintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"node": true,
"laxcomma": true,
"undef": true,
"strict": true,
"unused": true
}
18 changes: 18 additions & 0 deletions example/configuration/database.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{

"development": {
"host": "localhost",
"database": "db"
},

"test": {
"host": "localhost",
"database": "db_test"
},

"production": {
"host": "example.com",
"database": "db"
}

}
5 changes: 5 additions & 0 deletions example/configuration/server.cson
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'host': 'localhost'
'port': 8080
'credentials':
'user': 'example'
'password': 'samplepass'
15 changes: 15 additions & 0 deletions example/controllers/dog.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
'use strict';

module.exports = function(app){

var Dog = app.dao.Dog
, json = new app.views.Json();

return {
list: function(req, res, next){
var dog = new Dog();
json.promise(dog.list(), res, next);
}
};

};
11 changes: 11 additions & 0 deletions example/controllers/undesirables/kitten.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';

module.exports = function (app) {
const { Dog } = app.dao;
const { promise } = new app.views.Json();

this.list = function (request, response, next) {
var dog = new Dog();
promise(dog.list(), response, next);
};
};
13 changes: 13 additions & 0 deletions example/dao/dog.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'use strict';

module.exports = function(app){

var dog = new app.models.Dog();

return {
list: function(){
return dog.list();
}
};

};
5 changes: 5 additions & 0 deletions example/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'use strict';
const Bool = require('..');

// Here is where magic happens
module.exports = new Bool('com.example.api').run();
48 changes: 48 additions & 0 deletions example/models/dog.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
'use strict';

const dogs = [];

module.exports = class DogModel {
constructor (app) {
this.Error = app.Error;
}

async list () {
return dogs;
}

async index (id) {
for (var dog in dogs) {
if (dogs[dog].id === id) {
return dog;
}
}
return null;
}

async find (id) {
var index = this.index(id);
if (index === null) {
throw new this.Error(
404, 'dog_not_found', 'The searched dog wasn\'t in the list'
);
}
return dogs[index];
}

async update (id, dog) {
Object.assign(this.find(id), dog);
}

async delete (id) {
var index = this.index(id);

if (index === null) {
throw new this.Error(
404, 'dog_not_found', 'The searched dog wasn\'t in the list'
);
}

dogs.splice(index, 1);
}
};
16 changes: 16 additions & 0 deletions example/routes/dog.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
'use strict';

module.exports = function (app) {

var dog = new app.controllers.Dog();

return [
{
method: 'get',
url: '/dog',
action: dog.list,
cors: true
}
];

};
2 changes: 1 addition & 1 deletion lib/api/configurations/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const { Error } = require('booljs.api');
const { Error } = require('@booljs/api');
const { readdir } = require('fs');
const { join, parse } = require('path');
const Reader = require('../../readers');
Expand Down
2 changes: 1 addition & 1 deletion lib/api/folder/read.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const { Error } = require('booljs.api');
const { Error } = require('@booljs/api');
const { lstat, readdir } = require('fs');
const { join, parse } = require('path');
const Reader = require('../../readers');
Expand Down
12 changes: 5 additions & 7 deletions lib/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,20 @@ const _ = require('underscore');
*/
module.exports = class BoolJSBootstrapper {
constructor (namespace, dependencies = []) {
const { Error, App } = require('booljs.api');
const { Error, App } = require('@booljs/api');

this.Error = Error;
this.Folder = require('./folder');
this.ready = require('readyness');
this.Configuration = require('./configurations');
this.Loaders = require('./loaders');

this.instance = App.getInstance(namespace, dependencies.concat([
'@booljs/express', 'booljs.nomodel'
]));
this.instance = App.getInstance(namespace, dependencies);

this.folders = new this.Folder.List();

this.databaseDrivers = [ 'booljs.nomodel' ];
this.serverDrivers = [ 'booljs.express' ];
this.databaseDrivers = [ ];
this.serverDrivers = [ ];
this.booted = false;
this.booting = false;
this.server = null;
Expand Down Expand Up @@ -124,7 +122,7 @@ module.exports = class BoolJSBootstrapper {
* @return {BoolJSBootstrapper} The loaded application instance
*/
setServerDrivers (...drivers) {
this.serverDriver = drivers;
this.serverDrivers = drivers;
return this;
}

Expand Down
75 changes: 55 additions & 20 deletions lib/api/loaders/database.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
'use strict';

const isFunction = obj => !!(obj && obj.constructor && obj.call && obj.apply);
const isFunction =
object => !!(object && object.constructor && object.call && object.apply);

const { Plugins, Error } = require('booljs.api');
const { Plugins, Error } = require('@booljs/api');

/**
* @private
Expand All @@ -13,17 +14,20 @@ const { Plugins, Error } = require('booljs.api');
* @param {Object} connection - The connection (if any) used by the driver
* @return {Promise}
*/
exports.fetchModels = async function (instance, models, loader, connection) {
for (let model in models) {
if (!isFunction(models[model])) {
await exports.fetchModels(instance, models[model], loader, connection);
} else if (models[model].prototype instanceof loader.modelClass()) {
instance.insertComponent(model, await loader.fetchModels(
instance, model, models[model], connection
), models);
exports.fetchModels = async function (instance, models) {
const list = [];

for (let key in models) {
if (!isFunction(models[key])) {
return list
.concat(await exports.fetchModels(instance, models[key]));
} else {
list.push({ models, key });
}
}
}

return list;
};

/**
* @private
Expand All @@ -33,18 +37,49 @@ exports.fetchModels = async function (instance, models, loader, connection) {
* @return {Promise}
*/
module.exports = async function DatabaseLoader (instance, drivers) {
for (let driver of drivers) {
let loader = Plugins.get(driver);
const modelsList = await exports
.fetchModels(instance, instance.getComponents().models);

const loaders = await Promise.all(drivers
.map(async (driver, index) => {
const loader = Plugins.get(driver);

if (loader === undefined) {
throw new Error(0, 'E_LOADER_NOT_FOUND', 'Loader not found');
}

if (loader === undefined) {
throw new Error(0, 'E_LOADER_NOT_FOUND', 'Loader not found');
const settings = instance.getComponents().configuration
.get(index > 0
? loader.connectionSettingsStoreName
: 'database');
const connection = await loader.openDatabase(settings);

return { loader, connection };
}));

for (let index in modelsList) {
let { models, key } = modelsList[index];

const BaseModel = models[key];
let Model;

for (let { loader, connection } of loaders) {
if (Model.prototype instanceof loader.modelClass()) {
Model = await loader
.fetchModels(instance, key, BaseModel, connection);
modelsList[index] = undefined;
}
}

let connection = await loader.openDatabase(instance
.getComponents().configuration.get('database')
);
if (modelsList[index] !== undefined) {
Model = class BoolJSNativeModel extends BaseModel {
constructor (...params) {
super(instance.getComponents(), ...params);
}
};
modelsList[index] = undefined;
}

let { models } = instance.getComponents();
await exports.fetchModels(instance, models, loader, connection);
instance.insertComponent(key, Model, models);
}
};
25 changes: 17 additions & 8 deletions lib/api/loaders/server/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const { Plugins } = require('booljs.api');
const { Plugins } = require('@booljs/api');
const PreRoute = require('./preroute');
const Middleware = require('./middleware');
const Router = require('./router');
Expand All @@ -14,14 +14,23 @@ const PostRoute = require('./postroute');
* @return {Promise}
*/
module.exports = async function (instance, drivers) {
let serverDriver = Plugins.get(drivers[0]);
const loadedServers = [];

let server = await serverDriver.init(instance);
let router = await PreRoute(instance, serverDriver, server);
for (let driver of drivers) {
let serverDriver = Plugins.get(driver);

router = await Middleware(instance, serverDriver, router);
router = await Router(instance, serverDriver, router);
server = await PostRoute(instance, serverDriver, router, server);
let server = await serverDriver.init(instance);
let router = await PreRoute(instance, serverDriver, server);

return serverDriver.boot(server);
router = await Middleware(instance, serverDriver, router);
router = await Router(instance, serverDriver, router);
server = await PostRoute(instance, serverDriver, router, server);

server = await serverDriver.boot(server);
loadedServers.push(server);
}

return loadedServers.length > 0
? loadedServers[0]
: undefined;
};
2 changes: 1 addition & 1 deletion lib/api/loaders/server/middleware.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const { Plugins, Middleware } = require('booljs.api');
const { Plugins, Middleware } = require('@booljs/api');

module.exports = async function (instance, driver, router) {
let middlewarePlugins = Plugins.list(Middleware);
Expand Down
2 changes: 1 addition & 1 deletion lib/api/loaders/server/router.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const { Plugins, RouteMiddleware } = require('booljs.api');
const { Plugins, RouteMiddleware } = require('@booljs/api');
const _ = require('underscore');

module.exports = async function (instance, loader, router) {
Expand Down
2 changes: 1 addition & 1 deletion lib/readers/defaults/javascript.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const { Error } = require('booljs.api');
const { Error } = require('@booljs/api');

/**
* @private
Expand Down
Loading

0 comments on commit e1975b7

Please sign in to comment.