]>
Commit | Line | Data |
---|---|---|
8c3ae071 JZ |
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 | } |