]>
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 | |
a90a633f JZ |
18 | server: function () { return get('server'); }, |
19 | username: function () { return get('username'); }, | |
20 | password: function () { return get('password'); } | |
8c3ae071 JZ |
21 | }; |
22 | ||
23 | var HOME = process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE; | |
24 | var CONFIG_FILE_PATH = path.join(HOME, '.surfer.json'); | |
25 | ||
26 | var gConfig = (function () { | |
27 | return safe.JSON.parse(safe.fs.readFileSync(CONFIG_FILE_PATH)) || {}; | |
28 | })(); | |
29 | ||
30 | function save() { | |
31 | fs.writeFileSync(CONFIG_FILE_PATH, JSON.stringify(gConfig, null, 4)); | |
32 | } | |
33 | ||
34 | function clear() { | |
35 | safe.fs.unlinkSync(CONFIG_FILE_PATH); | |
36 | } | |
37 | ||
38 | function set(key, value) { | |
39 | if (typeof key === 'object') { | |
40 | _.extend(gConfig, key); | |
41 | } else { | |
42 | safe.set(gConfig, key, value); | |
43 | } | |
44 | save(); | |
45 | } | |
46 | ||
47 | function get(key) { | |
48 | return safe.query(gConfig, key); | |
49 | } | |
50 | ||
51 | function unset(key /*, .... */) { | |
52 | for (var i = 0; i < arguments.length; i++) { | |
53 | gConfig = safe.unset(gConfig, arguments[i]); | |
54 | } | |
55 | ||
56 | save(); | |
57 | } | |
58 | ||
59 | function has(key /*, ... */) { | |
60 | for (var i = 0; i < arguments.length; i++) { | |
61 | if (!(arguments[i] in gConfig)) return false; | |
62 | } | |
63 | return true; | |
64 | } |