Merge pull request #586 from csduarte/bash-20

(#1) BASH-20 Add base and override config
This commit is contained in:
Yuya Ochiai
2017-10-11 21:45:27 +09:00
committed by GitHub
7 changed files with 73 additions and 21 deletions

View File

@@ -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",

View 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"
}
}

View File

@@ -0,0 +1,3 @@
{
}

View File

@@ -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, ' ');

View File

@@ -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",

View File

@@ -1,4 +1,5 @@
'use strict'; 'use strict';
process.env.TEST = 'test';
const chai = require('chai'); const chai = require('chai');
chai.should(); chai.should();

View File

@@ -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);
});
}); });