Skip to content

Commit fe1a952

Browse files
jinrohbenlesh
authored andcommitted
feat(operator): add ignoreElements operator
1 parent a5684ba commit fe1a952

File tree

6 files changed

+99
-0
lines changed

6 files changed

+99
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var RxOld = require("rx");
2+
var RxNew = require("../../../../index");
3+
4+
module.exports = function (suite) {
5+
6+
var oldIgnoreElementsWithCurrentThreadScheduler = RxOld.Observable.range(0, 50, RxOld.Scheduler.currentThread).ignoreElements();
7+
var newIgnoreElementsWithCurrentThreadScheduler = RxNew.Observable.range(0, 50, RxNew.Scheduler.immediate).ignoreElements();
8+
9+
return suite
10+
.add('old ignoreElements with current thread scheduler', function () {
11+
oldIgnoreElementsWithCurrentThreadScheduler.subscribe(_next, _error, _complete);
12+
})
13+
.add('new ignoreElements with current thread scheduler', function () {
14+
newIgnoreElementsWithCurrentThreadScheduler.subscribe(_next, _error, _complete);
15+
});
16+
17+
function _next(x) { }
18+
function _error(e){ }
19+
function _complete(){ }
20+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var RxOld = require("rx");
2+
var RxNew = require("../../../../index");
3+
4+
module.exports = function (suite) {
5+
6+
var oldIgnoreElementsWithImmediateScheduler = RxOld.Observable.range(0, 50, RxOld.Scheduler.immediate).ignoreElements();
7+
var newIgnoreElementsWithImmediateScheduler = RxNew.Observable.range(0, 50).ignoreElements();
8+
9+
return suite
10+
.add('old ignoreElements with immediate scheduler', function () {
11+
oldIgnoreElementsWithImmediateScheduler.subscribe(_next, _error, _complete);
12+
})
13+
.add('new ignoreElements with immediate scheduler', function () {
14+
newIgnoreElementsWithImmediateScheduler.subscribe(_next, _error, _complete);
15+
});
16+
17+
function _next(x) { }
18+
function _error(e){ }
19+
function _complete(){ }
20+
};

Diff for: spec/operators/ignoreElements-spec.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/* globals describe, it, expect, hot, cold, expectObservable */
2+
var Rx = require('../../dist/cjs/Rx');
3+
var Observable = Rx.Observable;
4+
5+
describe('Observable.prototype.ignoreElements', function() {
6+
it('should ignore all the elements of the source', function() {
7+
var source = hot('--a--b--c--d--|');
8+
var expected = '--------------|';
9+
10+
expectObservable(source.ignoreElements()).toBe(expected);
11+
});
12+
13+
it('should propagate errors from the source', function() {
14+
var source = hot('--a--#');
15+
var expected = '-----#';
16+
17+
expectObservable(source.ignoreElements()).toBe(expected);
18+
});
19+
20+
it('should support Observable.empty', function() {
21+
var source = Observable.empty();
22+
var expected = "|";
23+
24+
expectObservable(source.ignoreElements()).toBe(expected);
25+
});
26+
27+
it('should support Observable.never', function() {
28+
var source = Observable.never();
29+
var expected = "-";
30+
31+
expectObservable(source.ignoreElements()).toBe(expected);
32+
});
33+
34+
it('should support Observable.throw', function() {
35+
var source = Observable.throw(new Error('oops'));
36+
var expected = '#';
37+
38+
expectObservable(source.ignoreElements()).toBe(expected, undefined, new Error('oops'));
39+
});
40+
});

Diff for: src/Observable.ts

+1
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ export default class Observable<T> {
211211
filter: (predicate: (x: T) => boolean, ix?: number, thisArg?: any) => Observable<T>;
212212
distinctUntilChanged: (compare?: (x: T, y: T) => boolean, thisArg?: any) => Observable<T>;
213213
distinctUntilKeyChanged: (key: string, compare?: (x: any, y: any) => boolean, thisArg?: any) => Observable<T>;
214+
ignoreElements: () => Observable<T>;
214215
skip: (count: number) => Observable<T>;
215216
skipUntil: (notifier: Observable<any>) => Observable<T>;
216217
take: (count: number) => Observable<T>;

Diff for: src/Rx.ts

+2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ import elementAt from './operators/elementAt';
109109
import filter from './operators/filter';
110110
import distinctUntilChanged from './operators/distinctUntilChanged';
111111
import distinctUntilKeyChanged from './operators/distinctUntilKeyChanged';
112+
import ignoreElements from './operators/ignoreElements';
112113

113114
observableProto.take = take;
114115
observableProto.skip = skip;
@@ -118,6 +119,7 @@ observableProto.elementAt = elementAt;
118119
observableProto.filter = filter;
119120
observableProto.distinctUntilChanged = distinctUntilChanged;
120121
observableProto.distinctUntilKeyChanged = distinctUntilKeyChanged;
122+
observableProto.ignoreElements = ignoreElements;
121123

122124
import combineLatestProto from './operators/combineLatest';
123125
import combineLatest from './operators/combineLatest-static';

Diff for: src/operators/ignoreElements.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import Operator from '../Operator';
2+
import Subscriber from '../Subscriber';
3+
4+
export default function ignoreElements() {
5+
return this.lift(new IgnoreElementsOperator());
6+
};
7+
8+
class IgnoreElementsOperator<T, R> implements Operator<T, R> {
9+
call(subscriber: Subscriber<R>): Subscriber<T> {
10+
return new IgnoreElementsSubscriber(subscriber);
11+
}
12+
}
13+
14+
class IgnoreElementsSubscriber<T> extends Subscriber<T> {
15+
_next() {}
16+
}

0 commit comments

Comments
 (0)