From f9944aeb5a0d4f02d934ab4dab2a8d613461b113 Mon Sep 17 00:00:00 2001 From: Ben Lesh Date: Mon, 14 Dec 2015 09:08:16 -0800 Subject: [PATCH] feat(inspect): added inspect operator changed name of current `sample` operator to `inspect`. This is because it deviated from the behavior expected in other implementations of Rx sample. BREAKING CHANGE: RxJS 5 `sample` behavior is now `inspect` --- .../{sample-spec.js => inspect-spec.js} | 40 +++++++++---------- src/CoreOperators.ts | 2 +- src/Observable.ts | 2 +- src/Rx.KitchenSink.ts | 2 +- src/Rx.ts | 2 +- src/add/operator/inspect.ts | 5 +++ src/add/operator/sample.ts | 5 --- src/operator/{sample.ts => inspect.ts} | 12 +++--- 8 files changed, 35 insertions(+), 35 deletions(-) rename spec/operators/{sample-spec.js => inspect-spec.js} (85%) create mode 100644 src/add/operator/inspect.ts delete mode 100644 src/add/operator/sample.ts rename src/operator/{sample.ts => inspect.ts} (71%) diff --git a/spec/operators/sample-spec.js b/spec/operators/inspect-spec.js similarity index 85% rename from spec/operators/sample-spec.js rename to spec/operators/inspect-spec.js index 992ba1a3df..452cd35315 100644 --- a/spec/operators/sample-spec.js +++ b/spec/operators/inspect-spec.js @@ -2,27 +2,27 @@ var Rx = require('../../dist/cjs/Rx'); var Observable = Rx.Observable; -describe('Observable.prototype.sample', function () { - it('should get samples when the notifier emits', function () { +describe('Observable.prototype.inspect', function () { + it('should get inspections when the notifier emits', function () { var e1 = hot('----a-^--b----c----d----e----f----| '); var e1subs = '^ ! '; var e2 = hot( '-----x----------x----------x----------|'); var e2subs = '^ ! '; var expected = '-----b----------d----------f| '; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); - it('should sample nothing if source has not nexted yet', function () { + it('should inspect nothing if source has not nexted yet', function () { var e1 = hot('----a-^-------b----|'); var e1subs = '^ !'; var e2 = hot( '-----x-------|'); var e2subs = '^ !'; var expected = '-------------|'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -34,7 +34,7 @@ describe('Observable.prototype.sample', function () { var e2subs = '^ ! '; var expected = '------a---------------------------'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -46,7 +46,7 @@ describe('Observable.prototype.sample', function () { var e2subs = '^ ! '; var expected = '------a--------------------------|'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -59,7 +59,7 @@ describe('Observable.prototype.sample', function () { var e2subs = '^ ! '; var expected = '-----b--------- '; - expectObservable(e1.sample(e2), unsub).toBe(expected); + expectObservable(e1.inspect(e2), unsub).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -74,7 +74,7 @@ describe('Observable.prototype.sample', function () { var result = e1 .mergeMap(function (x) { return Observable.of(x); }) - .sample(e2) + .inspect(e2) .mergeMap(function (x) { return Observable.of(x); }); expectObservable(result, unsub).toBe(expected); @@ -82,14 +82,14 @@ describe('Observable.prototype.sample', function () { expectSubscriptions(e2.subscriptions).toBe(e2subs); }); - it('should sample multiple times according to the notifier', function () { + it('should inspect multiple times according to the notifier', function () { var e1 = hot('----a----b----c----d----e----f----| '); var e1subs = '^ ! '; var e2 = hot('------x-x------xx-x---x-------------|'); var e2subs = '^ ! '; var expected = '------a-a------cc-c---d-----------| '; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -101,7 +101,7 @@ describe('Observable.prototype.sample', function () { var e2subs = '^ ! '; var expected = '-----b----------d-# '; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -113,7 +113,7 @@ describe('Observable.prototype.sample', function () { var e1subs = '(^!)'; var e2subs = '(^!)'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -125,7 +125,7 @@ describe('Observable.prototype.sample', function () { var e1subs = '(^!)'; var e2subs = '(^!)'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -137,7 +137,7 @@ describe('Observable.prototype.sample', function () { var e1subs = '^ !'; var e2subs = '^ !'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); @@ -149,31 +149,31 @@ describe('Observable.prototype.sample', function () { var e2subs = '^ !'; var expected = '-'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); - it('should sample only until source completes', function () { + it('should inspect only until source completes', function () { var e1 = hot('----a----b----c----d-|'); var e1subs = '^ !'; var e2 = hot('-----------x----------x------------|'); var e2subs = '^ !'; var expected = '-----------b---------|'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); - it('should complete sampling if sample observable completes', function () { + it('should complete sampling if inspect observable completes', function () { var e1 = hot('----a----b----c----d-|'); var e1subs = '^ !'; var e2 = hot('|'); var e2subs = '(^!)'; var expected = '---------------------|'; - expectObservable(e1.sample(e2)).toBe(expected); + expectObservable(e1.inspect(e2)).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); diff --git a/src/CoreOperators.ts b/src/CoreOperators.ts index 60e595de1a..d8ad6fb7ca 100644 --- a/src/CoreOperators.ts +++ b/src/CoreOperators.ts @@ -39,6 +39,7 @@ export interface CoreOperators { elementSelector?: (value: T) => R, durationSelector?: (group: GroupedObservable) => Observable) => Observable>; ignoreElements?: () => Observable; + inspect?: (notifier: Observable) => Observable; last?: (predicate?: (value: T, index: number) => boolean, resultSelector?: (value: T, index: number) => R, defaultValue?: any) => Observable | Observable; @@ -62,7 +63,6 @@ export interface CoreOperators { repeat?: (count?: number) => Observable; retry?: (count?: number) => Observable; retryWhen?: (notifier: (errors: Observable) => Observable) => Observable; - sample?: (notifier: Observable) => Observable; sampleTime?: (delay: number, scheduler?: Scheduler) => Observable; scan?: (project: (acc: R, x: T) => R, acc?: R) => Observable; share?: () => Observable; diff --git a/src/Observable.ts b/src/Observable.ts index 218cbb4338..436c18edf9 100644 --- a/src/Observable.ts +++ b/src/Observable.ts @@ -220,6 +220,7 @@ export class Observable implements CoreOperators { elementSelector?: (value: T) => R, durationSelector?: (group: GroupedObservable) => Observable) => Observable>; ignoreElements: () => Observable; + inspect: (notifier: Observable) => Observable; last: (predicate?: (value: T, index: number) => boolean, resultSelector?: (value: T, index: number) => R, thisArg?: any, defaultValue?: any) => Observable | Observable; @@ -244,7 +245,6 @@ export class Observable implements CoreOperators { repeat: (count?: number) => Observable; retry: (count?: number) => Observable; retryWhen: (notifier: (errors: Observable) => Observable) => Observable; - sample: (notifier: Observable) => Observable; sampleTime: (delay: number, scheduler?: Scheduler) => Observable; scan: (accumulator: (acc: R, x: T) => R, seed?: T | R) => Observable; share: () => Observable; diff --git a/src/Rx.KitchenSink.ts b/src/Rx.KitchenSink.ts index a0ec95e4f5..193b103e48 100644 --- a/src/Rx.KitchenSink.ts +++ b/src/Rx.KitchenSink.ts @@ -74,6 +74,7 @@ import './add/operator/finally'; import './add/operator/first'; import './add/operator/groupBy'; import './add/operator/ignoreElements'; +import './add/operator/inspect'; import './add/operator/extended/isEmpty'; import './add/operator/every'; import './add/operator/last'; @@ -98,7 +99,6 @@ import './add/operator/reduce'; import './add/operator/repeat'; import './add/operator/retry'; import './add/operator/retryWhen'; -import './add/operator/sample'; import './add/operator/sampleTime'; import './add/operator/scan'; import './add/operator/share'; diff --git a/src/Rx.ts b/src/Rx.ts index d6d9a43799..81d37f374e 100644 --- a/src/Rx.ts +++ b/src/Rx.ts @@ -54,6 +54,7 @@ import './add/operator/finally'; import './add/operator/first'; import './add/operator/groupBy'; import './add/operator/ignoreElements'; +import './add/operator/inspect'; import './add/operator/every'; import './add/operator/last'; import './add/operator/map'; @@ -74,7 +75,6 @@ import './add/operator/reduce'; import './add/operator/repeat'; import './add/operator/retry'; import './add/operator/retryWhen'; -import './add/operator/sample'; import './add/operator/sampleTime'; import './add/operator/scan'; import './add/operator/share'; diff --git a/src/add/operator/inspect.ts b/src/add/operator/inspect.ts new file mode 100644 index 0000000000..68479f28be --- /dev/null +++ b/src/add/operator/inspect.ts @@ -0,0 +1,5 @@ +import {Observable} from '../../Observable'; +import {inspect} from '../../operator/inspect'; +Observable.prototype.inspect = inspect; + +export var _void: void; \ No newline at end of file diff --git a/src/add/operator/sample.ts b/src/add/operator/sample.ts deleted file mode 100644 index 9b92e046f1..0000000000 --- a/src/add/operator/sample.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {Observable} from '../../Observable'; -import {sample} from '../../operator/sample'; -Observable.prototype.sample = sample; - -export var _void: void; \ No newline at end of file diff --git a/src/operator/sample.ts b/src/operator/inspect.ts similarity index 71% rename from src/operator/sample.ts rename to src/operator/inspect.ts index ceade0389c..c37f661c9c 100644 --- a/src/operator/sample.ts +++ b/src/operator/inspect.ts @@ -2,20 +2,20 @@ import {Observable} from '../Observable'; import {Operator} from '../Operator'; import {Subscriber} from '../Subscriber'; -export function sample(notifier: Observable): Observable { - return this.lift(new SampleOperator(notifier)); +export function inspect(notifier: Observable): Observable { + return this.lift(new InspectOperator(notifier)); } -class SampleOperator implements Operator { +class InspectOperator implements Operator { constructor(private notifier: Observable) { } call(subscriber: Subscriber) { - return new SampleSubscriber(subscriber, this.notifier); + return new InspectSubscriber(subscriber, this.notifier); } } -class SampleSubscriber extends Subscriber { +class InspectSubscriber extends Subscriber { private lastValue: T; private hasValue: boolean = false; @@ -37,7 +37,7 @@ class SampleSubscriber extends Subscriber { } class SampleNotificationSubscriber extends Subscriber { - constructor(private parent: SampleSubscriber) { + constructor(private parent: InspectSubscriber) { super(null); }