Auto-merge default config

This commit is contained in:
Yuya Ochiai
2016-01-23 22:58:44 +09:00
parent 56e8b4fe9a
commit 4b4ebeb59a

View File

@@ -1,17 +1,40 @@
'use strict'; 'use strict';
const fs = require('fs'); const fs = require('fs');
const version = 1; const settingsVersion = 1;
var merge = function(base, target) {
var merged = base;
if (!target) {
target = {};
}
for (var prop in target) {
merged[prop] = target[prop];
}
return merged;
};
var loadDefault = function(version) {
if (version == null) {
version = settingsVersion
}
switch (version) {
case 1:
return {
teams: [],
hideMenuBar: false,
version: 1
};
}
}
var upgradeV0toV1 = function(config_v0) { var upgradeV0toV1 = function(config_v0) {
return { var config = loadDefault(1);
teams: [{ config.teams.push({
name: 'Primary team', name: 'Primary team',
url: config_v0.url url: config_v0.url
}], });
hideMenuBar: false, return config;
version: 1
};
}; };
var upgrade = function(config) { var upgrade = function(config) {
@@ -25,27 +48,26 @@ var upgrade = function(config) {
}; };
module.exports = { module.exports = {
version: version, version: settingsVersion,
upgrade: upgrade, upgrade: upgrade,
readFileSync: function(configFile) { readFileSync: function(configFile) {
return JSON.parse(fs.readFileSync(configFile, 'utf8')); var config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
if (config.version === settingsVersion) {
var default_config = this.loadDefault();
config = merge(default_config, config);
}
return config;
}, },
writeFileSync: function(configFile, config) { writeFileSync: function(configFile, config) {
if (config.version != version) { if (config.version != settingsVersion) {
throw 'version ' + config.version + ' is not equal to ' + version; throw 'version ' + config.version + ' is not equal to ' + settingsVersion;
} }
var data = JSON.stringify(config, null, ' '); var data = JSON.stringify(config, null, ' ');
fs.writeFileSync(configFile, data, 'utf8'); fs.writeFileSync(configFile, data, 'utf8');
}, },
loadDefault: function() { loadDefault: loadDefault
return {
teams: [],
hideMenuBar: false,
version: version
};
}
}; };