From 8e249fbf180a05314cdac2426a449d7e9b5b2680 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 15 Dec 2011 00:09:38 -0500 Subject: [PATCH] Use Bones --config flag rather than custom defaults loading system for .tilemill.json config. --- index.js | 10 ++++++++++ models/Config.server.bones | 25 +++++++------------------ test/support/start.js | 6 ++++++ 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/index.js b/index.js index 3e06fa33b..eee4cf6a7 100755 --- a/index.js +++ b/index.js @@ -6,6 +6,16 @@ process.title = 'tilemill'; // name. process.argv[0] = 'node'; +// Default --config flag to user's home .tilemill.json config file. +// @TODO find a more elegant way to set a default for this value +// upstream in bones. +var path = require('path'); +var config = path.join(process.env.HOME, '.tilemill.json'); +if (path.existsSync(config)) { + var argv = require('bones/node_modules/optimist').argv; + argv.config = argv.config || config; +} + require('tilelive-mapnik').registerProtocols(require('tilelive')); require('mbtiles').registerProtocols(require('tilelive')); diff --git a/models/Config.server.bones b/models/Config.server.bones index f30114360..b5b52b371 100644 --- a/models/Config.server.bones +++ b/models/Config.server.bones @@ -6,17 +6,7 @@ var paths = { vendor: path.resolve(__dirname + '/../lib/config.defaults.json') }; -// Catch & ignore invalid user JSON. -try { - models.Config.defaults = {}; - models.Config.defaults = JSON.parse(fs.readFileSync(paths.user, 'utf8')); - models.Config.defaults = _(models.Config.defaults) - .defaults(JSON.parse(fs.readFileSync(paths.vendor, 'utf8'))); -} catch(e) { - console.error('Ignoring invalid JSON at %s', paths.user); - models.Config.defaults = JSON.parse(fs.readFileSync(paths.vendor, 'utf8')); -} - +models.Config.defaults = JSON.parse(fs.readFileSync(paths.vendor, 'utf8')); models.Config.prototype.sync = function(method, model, success, error) { if (method === 'delete') return error(new Error('Method not supported.')); @@ -35,14 +25,13 @@ models.Config.prototype.sync = function(method, model, success, error) { break; case 'create': case 'update': + // Filter out keys that may not be written. var allowedKeys = ['bufferSize', 'files', 'syncAccount', 'syncAccessToken']; - var data = model.toJSON(); - - // Additional data processing. - for (var key in data) { - if (!_(allowedKeys).include(key)) delete data[key]; - } - if (data.files) data.files = data.files.replace('~', process.env.HOME); + var data = _(model.toJSON()).reduce(function(memo, val, key) { + if (key === 'files') val = val.replace('~', process.env.HOME); + if (_(allowedKeys).include(key)) memo[key] = val; + return memo; + }, {}); Step(function() { fs.readFile(paths.user, 'utf8', this); diff --git a/test/support/start.js b/test/support/start.js index a71686edf..f11f7c2d9 100644 --- a/test/support/start.js +++ b/test/support/start.js @@ -3,8 +3,14 @@ process.argv[2] = 'start'; var exec = require('child_process').exec; var path = require('path'); +var fs = require('fs'); + process.env.HOME = path.resolve(__dirname + '/../fixtures/files'); +// Remove stale config file if present. +try { fs.unlinkSync(process.env.HOME + '/.tilemill.json'); } +catch (err) { if (err.code !== 'ENOENT') throw err } + // Load application. This file's purpose is to start TileMill only once and // share the server with all tests. require('../..');