Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d149308

Browse files
[Plugin] refactor enable/disable.
Signed-off-by: Eric Wang <skygragon@gmail.com>
1 parent ad529b0 commit d149308

File tree

3 files changed

+51
-18
lines changed

3 files changed

+51
-18
lines changed

‎lib/commands/plugin.js‎

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,9 @@ cmd.handler = function(argv) {
8282
const fullpath = h.getPluginFile(plugin.file);
8383

8484
if (argv.enable) {
85-
if (plugin.enabled) return;
86-
const newname = h.getPluginFile(plugin.file.substr(1));
87-
88-
fs.rename(fullpath, newname, function(e) {
89-
if (e) log.error(e.message);
90-
});
85+
plugin.enable(true);
9186
} else if (argv.disable) {
92-
if (!plugin.enabled) return;
93-
const newname = h.getPluginFile('.' + plugin.file);
94-
95-
fs.rename(fullpath, newname, function(e) {
96-
if (e) log.error(e.message);
97-
});
87+
plugin.enable(false);
9888
} else if (argv.delete) {
9989
fs.unlink(fullpath, function(e) {
10090
if (e) log.error(e.message);

‎lib/plugin.js‎

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ Plugin.prototype.setNext = function(next) {
3434
this.next = next;
3535
};
3636

37+
Plugin.prototype.setFile = function(file) {
38+
this.file = file;
39+
this.enabled = (file[0] !== '.');
40+
};
41+
42+
Plugin.prototype.enable = function(enabled) {
43+
if (this.enabled === enabled) return;
44+
const newfile = enabled ? this.file.substr(1) : '.' + this.file;
45+
try {
46+
fs.renameSync(h.getPluginFile(this.file), h.getPluginFile(newfile));
47+
this.setFile(newfile);
48+
} catch(e) {
49+
log.error(e);
50+
}
51+
};
52+
3753
Plugin.prototype.install = function(cb) {
3854
if (this.deps.length === 0) return cb();
3955

@@ -56,9 +72,7 @@ Plugin.init = function(head) {
5672
const p = f.data;
5773
if (!p) continue;
5874

59-
p.file = f.file;
60-
if (f.name[0] === '.') p.enabled = false;
61-
75+
p.setFile(f.file);
6276
log.trace('found plugin: ' + p.name + '=' + p.ver);
6377
if (p.enabled) {
6478
p.init();

‎test/test_plugin.js‎

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ describe('plugin', function() {
2929

3030
h.getCodeDirData = function() {
3131
return [
32-
{name: 'cache', data: cache},
33-
{name: '.leetcode', data: leetcode}, // disabled
34-
{name: 'retry', data: retry},
32+
{name: 'cache', data: cache,file: 'cache.js'},
33+
{name: 'leetcode', data: leetcode,file: '.leetcode.js'}, // disabled
34+
{name: 'retry', data: retry,file: 'retry.js'},
3535
{name: 'bad', data: null}
3636
];
3737
};
@@ -122,4 +122,33 @@ describe('plugin', function() {
122122
});
123123
});
124124
});
125+
126+
describe('#enable', function() {
127+
const file = path.resolve('./tmp/leetcode.js');
128+
129+
function clean() {
130+
if (fs.existsSync(file)) fs.unlinkSync(file);
131+
h.getPluginFile = () => file;
132+
}
133+
134+
beforeEach(clean);
135+
after(clean);
136+
137+
it('should ok', function() {
138+
const p = new Plugin(0, 'Leetcode', '2.0', '');
139+
assert.equal(p.enabled, true);
140+
141+
p.setFile('.leetcode.js');
142+
fs.writeFileSync(file, '');
143+
assert.equal(p.enabled, false);
144+
assert.equal(p.file, '.leetcode.js');
145+
146+
p.enable(false);
147+
assert.equal(p.enabled, false);
148+
assert.equal(p.file, '.leetcode.js');
149+
p.enable(true);
150+
assert.equal(p.enabled, true);
151+
assert.equal(p.file, 'leetcode.js');
152+
});
153+
}); // #enable
125154
});

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /