Skip to content

Commit

Permalink
refactor(last): remove thisArg
Browse files Browse the repository at this point in the history
  • Loading branch information
benlesh committed Oct 1, 2015
1 parent 248139a commit b7b02d7
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 12 deletions.
4 changes: 2 additions & 2 deletions spec/operators/last-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ describe('Observable.prototype.last()', function(){
it('should return a default value if no element found', function() {
var e1 = Observable.empty();
var expected = '(a|)';
expectObservable(e1.last(null, null, null, 'a')).toBe(expected);
expectObservable(e1.last(null, null, 'a')).toBe(expected);
});

it('should not return default value if an element is found', function (){
var e1 = hot('--a---^---b---c---d---|');
var expected = '----------------(d|)';
expectObservable(e1.last(null, null, null, 'x')).toBe(expected);
expectObservable(e1.last(null, null, 'x')).toBe(expected);
});

it('should support a result selector argument', function() {
Expand Down
18 changes: 8 additions & 10 deletions src/operators/last.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,37 @@ import {errorObject} from '../util/errorObject';
import bindCallback from '../util/bindCallback';
import EmptyError from '../util/EmptyError';

export default function last<T, R>(predicate?: (value: T, index: number, source:Observable<T>) => boolean, resultSelector?: (value: T, index: number) => R, thisArg?: any, defaultValue?: any) : Observable<R> {
return this.lift(new LastOperator(predicate, resultSelector, thisArg, defaultValue, this));
export default function last<T, R>(predicate?: (value: T, index: number, source:Observable<T>) => boolean,
resultSelector?: (value: T, index: number) => R, defaultValue?: any) : Observable<R> {
return this.lift(new LastOperator(predicate, resultSelector, defaultValue, this));
}

class LastOperator<T, R> implements Operator<T, R> {
constructor(private predicate?: (value: T, index: number, source:Observable<T>) => boolean,
private resultSelector?: (value: T, index: number) => R,
private thisArg?: any, private defaultValue?: any, private source?: Observable<T>) {
private defaultValue?: any, private source?: Observable<T>) {

}

call(observer: Subscriber<R>): Subscriber<T> {
return new LastSubscriber(observer, this.predicate, this.resultSelector, this.thisArg, this.defaultValue, this.source);
return new LastSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source);
}
}

class LastSubscriber<T, R> extends Subscriber<T> {
private lastValue: T;
private hasValue: boolean = false;
private predicate: Function;
private index: number = 0;

constructor(destination: Observer<T>, predicate?: (value: T, index: number, source: Observable<T>) => boolean,
constructor(destination: Observer<T>,
private predicate?: (value: T, index: number, source: Observable<T>) => boolean,
private resultSelector?: (value: T, index: number) => R,
private thisArg?: any, private defaultValue?: any, private source?: Observable<T>) {
private defaultValue?: any, private source?: Observable<T>) {
super(destination);
if(typeof defaultValue !== 'undefined') {
this.lastValue = defaultValue;
this.hasValue = true;
}
if(typeof predicate === 'function') {
this.predicate = bindCallback(predicate, thisArg, 3);
}
}

_next(value: any) {
Expand Down

0 comments on commit b7b02d7

Please sign in to comment.