Skip to content

Commit 67fd02c

Browse files
committed
Breaking: Return wrapped task instead of original function, add unwrap method to wrapper, update tests
1 parent c0f8fff commit 67fd02c

File tree

5 files changed

+38
-23
lines changed

5 files changed

+38
-23
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ to create the registry for this instance.
5858
Both a `getter` and `setter` for tasks.
5959

6060
If a string (`taskName`) is given as the only argument, it behaves as a `getter`
61-
and returns the registered function.
61+
and returns the wrapped task (not the original function). The wrapped task has a `unwrap`
62+
method that will return the original function.
6263

6364
If a function (`fn`) and optionally a string (`taskName`) is given, it behaves as
6465
a `setter` and will register the task by the `taskName`. If `taskName` is not

lib/get-task.js

+1-15
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,7 @@
11
'use strict';
22

3-
var metadata = require('./helpers/metadata');
4-
53
function get(name) {
6-
var wrapper = this._registry.get(name);
7-
8-
if (!wrapper) {
9-
return;
10-
}
11-
12-
var meta = metadata.get(wrapper);
13-
14-
if (meta) {
15-
return meta.orig;
16-
}
17-
18-
return wrapper;
4+
return this._registry.get(name);
195
}
206

217
module.exports = get;

lib/last-run.js

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
var retrieveLastRun = require('last-run');
44

5+
var metadata = require('./helpers/metadata');
6+
57
function lastRun(task, timeResolution) {
68
if (timeResolution == null) {
79
timeResolution = process.env.UNDERTAKER_TIME_RESOLUTION;
@@ -12,6 +14,12 @@ function lastRun(task, timeResolution) {
1214
fn = this._getTask(task);
1315
}
1416

17+
var meta = metadata.get(fn);
18+
19+
if (meta) {
20+
fn = meta.orig || fn;
21+
}
22+
1523
return retrieveLastRun(fn, timeResolution);
1624
}
1725

lib/set-task.js

+5
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ function set(name, fn) {
1313
return fn.apply(this, arguments);
1414
}
1515

16+
function unwrap() {
17+
return fn;
18+
}
19+
20+
taskWrapper.unwrap = unwrap;
1621
taskWrapper.displayName = name;
1722

1823
var meta = metadata.get(fn) || {};

test/task.js

+22-7
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,20 @@ describe('task', function() {
2525

2626
it('should register a named function', function(done) {
2727
taker.task(noop);
28-
expect(taker.task('noop')).to.equal(noop);
28+
expect(taker.task('noop').unwrap()).to.equal(noop);
2929
done();
3030
});
3131

3232
it('should register an anonymous function by string name', function(done) {
3333
taker.task('test1', anon);
34-
expect(taker.task('test1')).to.equal(anon);
34+
expect(taker.task('test1').unwrap()).to.equal(anon);
3535
done();
3636
});
3737

3838
it('should register an anonymous function by displayName property', function(done) {
3939
anon.displayName = '<display name>';
4040
taker.task(anon);
41-
expect(taker.task('<display name>')).to.equal(anon);
41+
expect(taker.task('<display name>').unwrap()).to.equal(anon);
4242
delete anon.displayName;
4343
done();
4444
});
@@ -54,7 +54,7 @@ describe('task', function() {
5454

5555
it('should register a named function by string name', function(done) {
5656
taker.task('test1', noop);
57-
expect(taker.task('test1')).to.equal(noop);
57+
expect(taker.task('test1').unwrap()).to.equal(noop);
5858
done();
5959
});
6060

@@ -65,7 +65,22 @@ describe('task', function() {
6565

6666
it('should get a task that was registered', function(done) {
6767
taker.task('test1', noop);
68-
expect(taker.task('test1')).to.equal(noop);
68+
expect(taker.task('test1').unwrap()).to.equal(noop);
69+
done();
70+
});
71+
72+
it('should get the wrapped task, not original function', function(done) {
73+
var registry = taker.registry();
74+
taker.task('test1', noop);
75+
expect(taker.task('test1').unwrap).to.be.a.function();
76+
expect(taker.task('test1')).to.equal(registry.get('test1'));
77+
done();
78+
});
79+
80+
it('provides an `unwrap` method to get the original function', function(done) {
81+
taker.task('test1', noop);
82+
expect(taker.task('test1').unwrap).to.be.a.function();
83+
expect(taker.task('test1').unwrap()).to.equal(noop);
6984
done();
7085
});
7186

@@ -79,15 +94,15 @@ describe('task', function() {
7994
function fn() {}
8095
fn.displayName = 'test1';
8196
taker.task(fn);
82-
expect(taker.task('test1')).to.equal(fn);
97+
expect(taker.task('test1').unwrap()).to.equal(fn);
8398
done();
8499
});
85100

86101
it('should allow different tasks to refer to the same function', function(done) {
87102
function fn() {}
88103
taker.task('foo', fn);
89104
taker.task('bar', fn);
90-
expect(taker.task('foo' )).to.equal(taker.task('bar'));
105+
expect(taker.task('foo').unwrap()).to.equal(taker.task('bar').unwrap());
91106
done();
92107
});
93108

0 commit comments

Comments
 (0)