Skip to content
This repository has been archived by the owner on Nov 2, 2021. It is now read-only.

Commit

Permalink
Merge pull request #4 from spark-development/develop
Browse files Browse the repository at this point in the history
Enhancements to allow the bigger framework extend functionalities
  • Loading branch information
vduricu committed May 26, 2018
2 parents 4b49566 + ff53be8 commit cc77ebe
Show file tree
Hide file tree
Showing 11 changed files with 91 additions and 37 deletions.
2 changes: 0 additions & 2 deletions .eslintrc
Expand Up @@ -24,8 +24,6 @@
"chai-expect/terminating-properties": 1
},
"globals": {
"engine": true,
"pUtils": true,
"puzzle": true
},
"env": {
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "puzzle-framework-lite",
"version": "1.0.1",
"version": "1.1.0",
"description": "A lite modular framework for micro applications/services.",
"main": "src/server.js",
"scripts": {
Expand Down
40 changes: 29 additions & 11 deletions src/core/PEngine.js
Expand Up @@ -32,6 +32,15 @@ class PEngine extends PObject {
this._init();
}

/**
* Is the lite version of the framework used?
*
* @return {boolean}
*/
get lite() {
return global.puzzleLight;
}

/**
* Getter for engine version.
*
Expand All @@ -40,6 +49,14 @@ class PEngine extends PObject {
get version() {
return this._version;
}
/**
* Setter for engine version.
*
* @param {*} packageJson The frameworks package.json file
*/
set version(packageJson) {
this._version = new PVersion(packageJson.version);
}

/**
* Getter for application information.
Expand Down Expand Up @@ -94,6 +111,15 @@ class PEngine extends PObject {
null;
}

/**
* Sets the logger instance.
*
* @param {object} logger The logger object.
*/
set log(logger) {
this._logger = logger;
}

/**
* Returns the log level used by the logger.
*
Expand All @@ -105,15 +131,6 @@ class PEngine extends PObject {
"";
}

/**
* Sets the logger instance.
*
* @param {object} logger The logger object.
*/
set log(logger) {
this._logger = logger;
}

/**
* Module getter method.
*
Expand Down Expand Up @@ -169,14 +186,15 @@ class PEngine extends PObject {
}

/**
* Returns the module you need to use.
* Returns the module you need to use. Can be extended to use files relative
* to current project/framework.
*
* @param {string} moduleName The module name.
*
* @return {*}
*/
import(moduleName) {
return require(`../${moduleName}`);
return require(`${__dirname}/../${moduleName}`);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/middleware/ResponseHelper.js
Expand Up @@ -57,8 +57,8 @@ module.exports = () => {
const { message: errorMessage } = error;
const code = error.httpCode || 500;

engine.log.error(errorMessage);
engine.log.error(error.stack);
puzzle.log.error(errorMessage);
puzzle.log.error(error.stack);

return res.error(errorType, errorMessage, code);
};
Expand Down
42 changes: 23 additions & 19 deletions src/puzzle/Log.js
Expand Up @@ -49,28 +49,32 @@ class Log extends PLog {
this.logLevel = "info";
}

if (this.isValid(logConfig.file) && logConfig.file !== "") {
if (logConfig.rotate === true) {
rotate.register(logConfig.file, {
schedule: logConfig.schedule || "5m",
count: logConfig.count,
size: logConfig.size,
compress: logConfig.compress
});
}

this.logger = new logger(
this.logLevel,
fs.createWriteStream(path.resolve(logConfig.file), {
flags: "a"
})
);


if (!this.isValid(logConfig.file) || logConfig.file === "") {
this.logger = new logger(this.logLevel);
return;
}

this.logger = new logger(this.logLevel);
if (logConfig.rotate === true) {
rotate.register(logConfig.file, {
schedule: logConfig.schedule || "5m",
count: logConfig.count,
size: logConfig.size,
compress: logConfig.compress
});
}

/**
* File Stream used for logger.
*
* @property {WriteStream}
*/
this.stream = fs.createWriteStream(path.resolve(logConfig.file), {
flags: "a"
});
this.logger = new logger(
this.logLevel,
this.stream
);
}
}

Expand Down
1 change: 1 addition & 0 deletions src/puzzle/ServerBootstrap.js
Expand Up @@ -17,6 +17,7 @@ class ServerBootstrap extends PRuntime {
puzzle.log.info("Application started");
puzzle.log.info("-".repeat(30));
puzzle.log.info(`Puzzle Framework Version: ${puzzle.version.version}`);
puzzle.log.info(`Framework type: ${puzzle.lite ? "Lite" : "Full"}`);
puzzle.log.info(`Environment: ${puzzle.env}`);
puzzle.log.info(`Logging level: ${puzzle.logLevel}`);
puzzle.log.info("-".repeat(30));
Expand Down
10 changes: 10 additions & 0 deletions src/puzzle/index.js
Expand Up @@ -21,5 +21,15 @@ if (global.puzzle === null || global.puzzle === undefined) {
*/
global.puzzle = puzzleInstance;
}
if (global.puzzleLight === null || global.puzzleLight === undefined) {
/**
* The global instance of the framework engine.
*
* Use 'puzzle' whenever you need some functionality from the application.
*
* @alias puzzle
*/
global.puzzleLight = true;
}

module.exports = puzzleInstance;
15 changes: 15 additions & 0 deletions src/utils/bundle.js
@@ -0,0 +1,15 @@
"use strict";

/**
* To be used when you need to bundle multiple modules in a
* bigger module.
*
* @memberOf {utils}
* @alias {bundle}
*
* @param {string} moduleName The name of the module.
* @param {Object} moduleClass The module that needs to be bundled.
*/
module.exports = (moduleName, moduleClass) => {
puzzle.modules.register(moduleName, new moduleClass());
};
7 changes: 7 additions & 0 deletions src/utils/index.js
@@ -0,0 +1,7 @@
"use strict";

/**
* Utils that provide some ways to extend the framework.
*
* @namespace utils
*/
4 changes: 2 additions & 2 deletions test/core/PEngine.test.js
Expand Up @@ -38,10 +38,10 @@ describe("PEngine class check", () => {
expect(pobj.version.version).to.equal(packageJson.version);
});

it("version should not be overrideable", () => {
it("version should be overrideable", () => {
const pobj = new PEngine();

expect(() => (pobj.version = "test")).to.throw();
expect(() => (pobj.version = "test")).to.not.throw();
expect(pobj.version.className).to.equal("PVersion");
expect(pobj.version.version).to.equal(packageJson.version);
});
Expand Down
1 change: 1 addition & 0 deletions test/puzzle/ServerBootstrap.test.js
Expand Up @@ -46,6 +46,7 @@ describe("ServerBootstrap class check", () => {
"[INFO] Application started",
`[INFO] ${"-".repeat(30)}`,
`[INFO] Puzzle Framework Version: ${puzzle.app.version}`,
`[INFO] Framework type: Lite`,
`[INFO] Environment: ${puzzle.env}`,
"[INFO] Logging level: test",
`[INFO] ${"-".repeat(30)}`
Expand Down

0 comments on commit cc77ebe

Please sign in to comment.