Skip to content

Commit 67f70b4

Browse files
committed
Merge pull request #36 from VisualTesting/feature/config
Enabling App and Project base configuration
2 parents 8bfd776 + 3cb468e commit 67f70b4

22 files changed

Lines changed: 1076 additions & 344 deletions

.jscsrc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,14 @@
3737
"requireCapitalizedConstructors": true,
3838
"requireCurlyBraces": ["if", "else", "for", "while", "do", "try", "catch"],
3939
"requireDotNotation": true,
40+
"requireFunctionDeclarations": true,
4041
"requireLineFeedAtFileEnd": true,
4142
"requireSpaceBeforeBinaryOperators": ["?", "+", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
4243
"requireSpaceAfterBinaryOperators": ["?", "+", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
4344
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try"],
4445
"requirePaddingNewLinesInObjects": true,
46+
"requirePaddingNewLinesAfterBlocks": true,
47+
"requirePaddingNewLinesBeforeLineComments": true,
4548
"requireParenthesesAroundIIFE": true,
4649
"requireSpacesInConditionalExpression": true,
4750
"requireCommaBeforeLineBreak": true,
@@ -50,5 +53,9 @@
5053
"validateJSDoc": {
5154
"checkParamNames": true,
5255
"requireParamTypes": true
56+
},
57+
"validateQuoteMarks": {
58+
"mark": "'",
59+
"escape": true
5360
}
5461
}

.jshintrc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
"noarg": true,
1313
"nonbsp": true,
1414
"nonew": true,
15-
"quotmark": "single",
1615
"regexp": true,
1716
"undef": true,
1817
"unused": true,

Gruntfile.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ module.exports = function(grunt) {
1515
express: {
1616
files: [
1717
'server.js',
18-
'server/**/*.{js,json}'
18+
'server/**/*.{js,json}',
19+
'visualtesting.conf.js'
1920
],
2021
tasks: ['express:dev'],
2122
options: {

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@
1212
"github": "^0.2.3",
1313
"grunt-cli": "^0.1.13",
1414
"grunt-express-server": "~0.4.5",
15+
"keymirror": "^0.1.1",
1516
"load-grunt-tasks": "~3.1.0",
17+
"merge": "^1.2.0",
1618
"method-override": "~2.3.1",
1719
"morgan": "~1.5.1",
1820
"multer": "^0.1.8",
1921
"node-resemble-js": "0.0.4",
2022
"node-uuid": "^1.4.2",
2123
"pngjs-image": "^0.9.3",
2224
"recursive-readdir": "^1.2.1",
23-
"symbol": "^0.2.1",
2425
"tar.gz": "^0.1.1"
2526
},
2627
"devDependencies": {

server.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
'use strict';
22

3-
var app = require('./server/app');
3+
var App = require('./server/app');
4+
var app = new App();
45

5-
var config = {};
6+
var Configuration = require('./server/configuration');
7+
var config = new Configuration();
8+
require('./visualtesting.conf.js')(config);
69

7-
config.ip = '0.0.0.0';
8-
config.port = '9000';
9-
10-
// Start server
11-
app.listen(config.port, config.ip, function() {
12-
console.log('Express server listening on %s:%d, in %s mode', config.ip, config.port, app.get('env'));
13-
});
10+
app.useConfiguration(config);
11+
app.start();

server/actions.js

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,44 @@
11
'use strict';
22

3+
var assert = require('chai').assert;
34
var dispatcher = require('./dispatcher');
45
var constants = require('./constants');
56

67
var Actions = {
7-
diffSha: function(sha) {
8+
diffSha: function(options) {
9+
assert.isObject(options);
10+
assert.isString(options.project);
11+
assert.isString(options.sha);
12+
813
dispatcher.emit(constants.diffSha, {
9-
sha: sha
14+
project: options.project,
15+
sha: options.sha
16+
});
17+
},
18+
19+
setBuildStatus: function(options) {
20+
assert.isObject(options);
21+
assert.isString(options.project);
22+
assert.isString(options.sha);
23+
assert.isString(options.status);
24+
25+
dispatcher.emit(constants.setBuildStatus, {
26+
project: options.project,
27+
sha: options.sha,
28+
status: options.status
29+
});
30+
},
31+
32+
addComment: function(options) {
33+
assert.isObject(options);
34+
assert.isString(options.project);
35+
assert.isString(options.sha);
36+
assert.isString(options.comment);
37+
38+
dispatcher.emit(constants.SERVICE_ADD_COMMENT, {
39+
project: options.project,
40+
sha: options.sha,
41+
comment: options.comment
1042
});
1143
}
1244
};

server/app.js

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,73 @@
33
var express = require('express');
44
var errorHandler = require('errorhandler');
55

6-
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
6+
var Api = require('./controllers/api');
77

8-
var app = express();
8+
var config;
99

10-
app.use(function(req, res, next) {
11-
res.header('Access-Control-Allow-Origin', '*');
12-
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
13-
next();
14-
});
10+
var instance;
1511

16-
require('./config/express')(app);
17-
require('./routes')(app);
18-
require('./checkBuild');
19-
20-
// Error handler - has to be last
21-
if (app.get('env') !== 'production') {
22-
app.use(errorHandler({
12+
function setErrorHandler() {
13+
instance.use(errorHandler({
2314
log: function(err, str, req) {
2415
console.error('Error in', req.method, req.url, err);
2516
console.error(str);
2617
}
2718
}));
2819
}
2920

30-
module.exports = app;
21+
function App() {
22+
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
23+
24+
instance = express();
25+
26+
instance.use(function(req, res, next) {
27+
res.header('Access-Control-Allow-Origin', '*');
28+
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
29+
next();
30+
});
31+
32+
require('./config/express')(instance);
33+
}
34+
35+
App.prototype = {
36+
useConfiguration: function(newConfig) {
37+
config = newConfig;
38+
39+
require('./routes')({
40+
app: instance,
41+
api: new Api(config)
42+
});
43+
44+
var CheckBuild = require('./checkBuild');
45+
var checkBuild = new CheckBuild(config);
46+
checkBuild.register();
47+
48+
var ServiceListener = require('./serviceListener');
49+
var serviceListener = new ServiceListener(config);
50+
serviceListener.register();
51+
52+
if (instance.get('env') !== 'production') {
53+
setErrorHandler();
54+
}
55+
},
56+
57+
start: function() {
58+
var ip = config.getIp();
59+
var port = config.getPort();
60+
61+
instance.listen(port, ip, function() {
62+
console.log('Express server listening on %s:%d, in %s mode', ip, port, instance.get('env'));
63+
});
64+
}
65+
};
66+
67+
if (process.env.NODE_ENV === 'test') {
68+
Object.defineProperty(App.prototype, '_instance', {
69+
get: function() {
70+
return instance;
71+
}
72+
});
73+
}
74+
75+
module.exports = App;

0 commit comments

Comments
 (0)