]> git.immae.eu Git - perso/Immae/Projets/Nodejs/Surfer.git/blob - cli/config.js
Support recursive put
[perso/Immae/Projets/Nodejs/Surfer.git] / cli / config.js
1 /* jshint node:true */
2
3 'use strict';
4
5 var fs = require('fs'),
6 path = require('path'),
7 safe = require('safetydance'),
8 _ = require('underscore');
9
10 exports = module.exports = {
11 clear: clear,
12 set: set,
13 get: get,
14 unset: unset,
15 has: has,
16
17 // convenience
18 server: function () { return get('server'); }
19 };
20
21 var HOME = process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
22 var CONFIG_FILE_PATH = path.join(HOME, '.surfer.json');
23
24 var gConfig = (function () {
25 return safe.JSON.parse(safe.fs.readFileSync(CONFIG_FILE_PATH)) || {};
26 })();
27
28 function save() {
29 fs.writeFileSync(CONFIG_FILE_PATH, JSON.stringify(gConfig, null, 4));
30 }
31
32 function clear() {
33 safe.fs.unlinkSync(CONFIG_FILE_PATH);
34 }
35
36 function set(key, value) {
37 if (typeof key === 'object') {
38 _.extend(gConfig, key);
39 } else {
40 safe.set(gConfig, key, value);
41 }
42 save();
43 }
44
45 function get(key) {
46 return safe.query(gConfig, key);
47 }
48
49 function unset(key /*, .... */) {
50 for (var i = 0; i < arguments.length; i++) {
51 gConfig = safe.unset(gConfig, arguments[i]);
52 }
53
54 save();
55 }
56
57 function has(key /*, ... */) {
58 for (var i = 0; i < arguments.length; i++) {
59 if (!(arguments[i] in gConfig)) return false;
60 }
61 return true;
62 }