Skip to content

Commit 304c2c1

Browse files
authored
Make Disposables compatible with new atom beta (#323)
1 parent 2aebef3 commit 304c2c1

File tree

3 files changed

+42
-13
lines changed

3 files changed

+42
-13
lines changed

.babelrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@
66
"transform-runtime"
77
],
88
"presets": ["react", ["env", {}]],
9+
"ignore": [
10+
"lib/Disposables.js"
11+
],
912
"sourceMaps": "inline"
1013
}

lib/Disposables.js

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
1-
/* @flow */
1+
// NOTE Using standard ES6 code without flow/ES modules here
2+
// to make the extension of the parent class to work.
3+
// If applying babel the transpiled code is incompatible and would throw:
4+
// "Class constructor CompositeDisposable cannot be invoked without 'new'"
5+
const { Disposable, CompositeDisposable } = require("atom");
26

3-
import { Disposable, CompositeDisposable } from "atom";
4-
5-
// Make it easier to define side-effects for BaconJS streams
6-
//
7-
// Example:
8-
// var disposable = new Disposables()
9-
// disposable.add(
10-
// someStream.onValue(val => {
11-
// console.log('will be removed on disposable.dispose()')
12-
// }))
13-
export default class Disposables extends CompositeDisposable {
14-
add(...values: Array<atom$IDisposable | Disposables | Function>) {
7+
class Disposables extends CompositeDisposable {
8+
add(...values) {
159
for (let val of values) {
1610
if (!Disposable.isDisposable(val)) {
1711
if (typeof val === "function") {
@@ -26,3 +20,5 @@ export default class Disposables extends CompositeDisposable {
2620
}
2721
}
2822
}
23+
24+
module.exports = Disposables;

spec/Disposables-spec.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/* @flow */
2+
3+
import Disposables from "../lib/Disposables";
4+
5+
const newFakeDisposable = () => {
6+
const spy = jasmine.createSpy("dispose");
7+
return {
8+
dispose: spy,
9+
disposed: () => true
10+
};
11+
};
12+
13+
describe("Disposables", () => {
14+
let disposables;
15+
16+
beforeEach(() => {
17+
disposables = new Disposables();
18+
});
19+
20+
describe(".add", () => {
21+
it("accepts multiple values", () => {
22+
const fake1 = newFakeDisposable();
23+
const fake2 = newFakeDisposable();
24+
disposables.add(fake1, fake2);
25+
disposables.dispose();
26+
expect(fake1.dispose).toHaveBeenCalled();
27+
expect(fake2.dispose).toHaveBeenCalled();
28+
});
29+
});
30+
});

0 commit comments

Comments
 (0)