Merge pull request #586 from csduarte/bash-20
(#1) BASH-20 Add base and override config
This commit is contained in:
@@ -35,6 +35,7 @@
|
|||||||
"lint:js": "eslint --ext .js --ext .jsx ."
|
"lint:js": "eslint --ext .js --ext .jsx ."
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"deepmerge": "^1.5.2",
|
||||||
"7zip-bin": "^2.0.4",
|
"7zip-bin": "^2.0.4",
|
||||||
"babel-core": "^6.24.1",
|
"babel-core": "^6.24.1",
|
||||||
"babel-eslint": "^7.2.3",
|
"babel-eslint": "^7.2.3",
|
||||||
|
28
src/common/config/base.json
Normal file
28
src/common/config/base.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"default": {
|
||||||
|
"teams": [],
|
||||||
|
"showTrayIcon": false,
|
||||||
|
"trayIconTheme": "light",
|
||||||
|
"minimizeToTray": false,
|
||||||
|
"version": 1,
|
||||||
|
"notifications": {
|
||||||
|
"flashWindow": 0
|
||||||
|
},
|
||||||
|
"showUnreadBadge": true,
|
||||||
|
"useSpellChecker": true,
|
||||||
|
"spellCheckerLocale": "en-US"
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"teams": [],
|
||||||
|
"showTrayIcon": false,
|
||||||
|
"trayIconTheme": "light",
|
||||||
|
"minimizeToTray": false,
|
||||||
|
"version": 1,
|
||||||
|
"notifications": {
|
||||||
|
"flashWindow": 0
|
||||||
|
},
|
||||||
|
"showUnreadBadge": true,
|
||||||
|
"useSpellChecker": true,
|
||||||
|
"spellCheckerLocale": "en-US"
|
||||||
|
}
|
||||||
|
}
|
3
src/common/config/override.json
Normal file
3
src/common/config/override.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
|
||||||
|
}
|
@@ -1,35 +1,37 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
let deepmerge = require('deepmerge').default;
|
||||||
|
if (process.env.TEST) {
|
||||||
|
deepmerge = require('deepmerge'); // eslint-disable-line
|
||||||
|
}
|
||||||
|
|
||||||
const settingsVersion = 1;
|
const settingsVersion = 1;
|
||||||
|
const baseConfig = require('./config/base.json');
|
||||||
|
const overrideConfig = require('./config/override.json');
|
||||||
|
|
||||||
function merge(base, target) {
|
function merge(base, target) {
|
||||||
return Object.assign({}, base, target);
|
return Object.assign({}, base, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function deepMergeArray(dest) {
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
function loadDefault(version, spellCheckerLocale) {
|
function loadDefault(version, spellCheckerLocale) {
|
||||||
var ver = version;
|
var ver = version;
|
||||||
if (version == null) {
|
if (version == null) {
|
||||||
ver = settingsVersion;
|
ver = settingsVersion;
|
||||||
}
|
}
|
||||||
switch (ver) {
|
|
||||||
case 1:
|
const base = baseConfig[ver] || baseConfig.default;
|
||||||
return {
|
const override = overrideConfig[ver] || {};
|
||||||
teams: [],
|
|
||||||
showTrayIcon: false,
|
const defaults = deepmerge(base, override, {clone: true, arrayMerge: deepMergeArray});
|
||||||
trayIconTheme: 'light',
|
|
||||||
minimizeToTray: false,
|
return Object.assign(defaults, {
|
||||||
version: 1,
|
spellCheckerLocale: spellCheckerLocale || defaults.spellCheckerLocale || 'en-US'
|
||||||
notifications: {
|
});
|
||||||
flashWindow: 0 // 0 = flash never, 1 = only when idle (after 10 seconds), 2 = always
|
|
||||||
},
|
|
||||||
showUnreadBadge: true,
|
|
||||||
useSpellChecker: true,
|
|
||||||
spellCheckerLocale: spellCheckerLocale || 'en-US'
|
|
||||||
};
|
|
||||||
default:
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function upgradeV0toV1(configV0) {
|
function upgradeV0toV1(configV0) {
|
||||||
@@ -61,15 +63,19 @@ module.exports = {
|
|||||||
|
|
||||||
readFileSync(configFile) {
|
readFileSync(configFile) {
|
||||||
var config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
var config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
||||||
if (config.version === settingsVersion) {
|
|
||||||
|
// need to be able to compare 1 to '1'
|
||||||
|
if (config.version == settingsVersion) { // eslint-disable-line
|
||||||
var defaultConfig = this.loadDefault();
|
var defaultConfig = this.loadDefault();
|
||||||
config = merge(defaultConfig, config);
|
config = merge(defaultConfig, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
|
|
||||||
writeFile(configFile, config, callback) {
|
writeFile(configFile, config, callback) {
|
||||||
if (config.version !== settingsVersion) {
|
// need to be able to compare 1 to '1'
|
||||||
|
if (config.version != settingsVersion) { // eslint-disable-line
|
||||||
throw new Error('version ' + config.version + ' is not equal to ' + settingsVersion);
|
throw new Error('version ' + config.version + ' is not equal to ' + settingsVersion);
|
||||||
}
|
}
|
||||||
var data = JSON.stringify(config, null, ' ');
|
var data = JSON.stringify(config, null, ' ');
|
||||||
@@ -77,7 +83,8 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
writeFileSync(configFile, config) {
|
writeFileSync(configFile, config) {
|
||||||
if (config.version !== settingsVersion) {
|
// need to be able to compare 1 to '1'
|
||||||
|
if (config.version != settingsVersion) { // eslint-disable-line
|
||||||
throw new Error('version ' + config.version + ' is not equal to ' + settingsVersion);
|
throw new Error('version ' + config.version + ' is not equal to ' + settingsVersion);
|
||||||
}
|
}
|
||||||
var data = JSON.stringify(config, null, ' ');
|
var data = JSON.stringify(config, null, ' ');
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
"auto-launch": "^5.0.1",
|
"auto-launch": "^5.0.1",
|
||||||
"bootstrap": "^3.3.7",
|
"bootstrap": "^3.3.7",
|
||||||
"create-react-class": "^15.5.3",
|
"create-react-class": "^15.5.3",
|
||||||
|
"deepmerge": "^1.5.2",
|
||||||
"electron-context-menu": "^0.9.0",
|
"electron-context-menu": "^0.9.0",
|
||||||
"electron-devtools-installer": "^2.2.0",
|
"electron-devtools-installer": "^2.2.0",
|
||||||
"electron-is-dev": "^0.1.2",
|
"electron-is-dev": "^0.1.2",
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
process.env.TEST = 'test';
|
||||||
|
|
||||||
const chai = require('chai');
|
const chai = require('chai');
|
||||||
chai.should();
|
chai.should();
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
const settings = require('../../src/common/settings');
|
const settings = require('../../src/common/settings');
|
||||||
|
const deepmerge = require('deepmerge');
|
||||||
|
|
||||||
describe('common/settings.js', () => {
|
describe('common/settings.js', () => {
|
||||||
it('should upgrade v0 config file', () => {
|
it('should upgrade v0 config file', () => {
|
||||||
@@ -10,4 +11,14 @@ describe('common/settings.js', () => {
|
|||||||
config.teams[0].url.should.equal(v0Config.url);
|
config.teams[0].url.should.equal(v0Config.url);
|
||||||
config.version.should.equal(settings.version);
|
config.version.should.equal(settings.version);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should loadDefault config for version 1', () => {
|
||||||
|
const baseConfig = require('../../src/common/config/base.json');
|
||||||
|
const overrideConfig = require('../../src/common/config/override.json');
|
||||||
|
const expectedDefaults = deepmerge(
|
||||||
|
baseConfig[1], overrideConfig[1] || {}, {clone: true, arrayMerge: settings.deepMergeArray}
|
||||||
|
);
|
||||||
|
const defaultConfig = settings.loadDefault();
|
||||||
|
defaultConfig.should.eql(expectedDefaults);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user