Chromium Code Reviews| Index: pkg/http/lib/src/utils.dart |
| diff --git a/pkg/http/lib/src/utils.dart b/pkg/http/lib/src/utils.dart |
| index 02a0f7e0fbce1dfdf3befc43ad606f4a35c21a0e..9f22351643331e52cb32cbb8145cecc820d8fa47 100644 |
| --- a/pkg/http/lib/src/utils.dart |
| +++ b/pkg/http/lib/src/utils.dart |
| @@ -183,3 +183,26 @@ Future forEachFuture(Iterable input, Future fn(element)) { |
| } |
| return nextElement(null); |
| } |
| + |
| +/// Creates a temporary directory and passes its path to [fn]. Once the [Future] |
| +/// returned by [fn] completes, the temporary directory and all its contents |
| +/// will be deleted. |
|
Bob Nystrom
2012/11/07 23:15:15
Very nice.
|
| +Future withTempDir(Future fn(String path)) { |
| + var tempDir; |
| + var future = new Directory('').createTemp().chain((dir) { |
| + tempDir = dir; |
| + return fn(tempDir.path); |
| + }); |
| + future.onComplete((_) => tempDir.delete(recursive: true)); |
| + return future; |
| +} |
| + |
| +/// Configures [future] so that its result (success or exception) is passed on |
| +/// to [completer]. |
| +void chainToCompleter(Future future, Completer completer) { |
| + future.handleException((e) { |
| + completer.completeException(e); |
| + return true; |
| + }); |
| + future.then(completer.complete); |
| +} |