Skip to content

Commit

Permalink
Some updates
Browse files Browse the repository at this point in the history
- Fixes average method
- Update docs
- Update method class
  • Loading branch information
jinhduong committed Apr 25, 2018
1 parent f43707b commit 764ebdb
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 36 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ let query = Queryable
total: Queryable.fromSync(x.items).count() // Here will return number, not Promise<number>
}
})
const asyncData = query.count() // Will return Promise<{area:string, total:number}>
const asyncData = query.toList() // Will return Promise<{area:string, total:number}>
asyncData.then(data => {
console.log(data);
// [
Expand Down
30 changes: 11 additions & 19 deletions src/demo/test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Queryable } from "../implements/queryable";
const cTable = require('console.table');

let players = new Promise((resolve, reject) => {
let players = new Promise<{ name, overall, nationId, skills }[]>((resolve, reject) => {
// skills: attack, stamia, speed, shoot
console.log('get players...');
setTimeout(() => {
Expand Down Expand Up @@ -36,28 +37,19 @@ let continents = new Promise<{ id, areaName }[]>(resolve => {
}, 2300);
})


function main() {
// Just query not execute query
console.time('querytime');
let query = Queryable
.from(nations)
.join(continents, (x, y) => x.areaId === y.id)
.groupBy(o => o.y.areaName)
.select(x => {
return {
area: x.key,
total: Queryable.fromSync(x.items).count()
}
})


console.timeEnd('querytime');
.from(nations)
.join(continents, (x, y) => x.areaId === y.id)
.groupBy(o => o.y.areaName)
.select(x => {
return {
area: x.key,
total: Queryable.fromSync(x.items).count()
}
})

console.time('executetime');
const data = query.toList().then(data => {
console.timeEnd('executetime');
console.log(data);
console.table(data);
});
}
Expand Down
24 changes: 12 additions & 12 deletions src/implements/methods.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,25 +75,25 @@ export class IteratorMethods<T> implements IMethods<T> {
}

first(iterator?: (entity: T) => boolean): Promise<T> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return new FirstClause(iterator).execute(data) as T;
});
}

firstOrDefault(iterator?: (entity: T) => boolean): Promise<T> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return (new FirstClause(iterator).execute(data) || null) as T;
});
}

last(iterator?: (entity: T) => boolean): Promise<T> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return new LastClause(iterator).execute(data) as T;
});
}

lastOrDefault(iterator?: (entity: T) => boolean): Promise<T> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return (new LastClause(iterator).execute(data) || null) as T;
});
}
Expand All @@ -106,39 +106,39 @@ export class IteratorMethods<T> implements IMethods<T> {


sum<S>(iterator: (entity: T) => S): Promise<number> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return (new SumClause(iterator).execute(data) || null) as number;
});
}

avarage<S>(iterator: (entity: T) => S): Promise<number> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return (new AvarageClause(iterator).execute(data) || 0) as number;
});
}

min<S>(iterator: (entity: T) => S): Promise<number> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return (new MinClause(iterator).execute(data) || null) as number;
});
}

max<S>(iterator: (entity: T) => S): Promise<number> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return (new MaxClause(iterator).execute(data) || null) as number;
});
}

single(iterator?: (entity: T) => boolean): Promise<T> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
if (!data) throw new Error("Single require source is not null");
return new SingleClause(iterator).execute(data);

});
}

singleOrDefault(iterator?: (entity: T) => boolean): Promise<T> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return new SingleClause(iterator).execute(data) || null;
});
}
Expand All @@ -164,13 +164,13 @@ export class IteratorMethods<T> implements IMethods<T> {
}

any<T>(iterator: (entity: T) => boolean): Promise<boolean> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return new AnyClause(iterator).execute(data);
});
}

contains(entity: T): Promise<boolean> {
return this.toList().then((data: T[]) => {
return this.filterReturn(this.toList(), (data) => {
return new ContainsClause(entity).execute(data);
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/intefaces/methods.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export interface IMethods<T> {
sum<S>(iterator: (entity: T) => S): Promise<number>;
min<S>(iterator: (entity: T) => S): Promise<number>;
max<S>(iterator: (entity: T) => S): Promise<number>;
avarage<S>(iterator: (entity: T) => S): Promise<number>;
avarage<S>(iterator?: (entity: T) => S): Promise<number>;
any<T>(iterator: (entity: T) => boolean): Promise<boolean>;
contains(entity: T): Promise<boolean>;

Expand Down
7 changes: 4 additions & 3 deletions src/methods/average.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ export class AvarageClause<T> extends BaseIterator<T> implements IIterator<T> {
execute(source: any[] | T[]): T[] | T | any {
if (!source) return 0;

let _result = new SelectClause(this._iterator).execute(source) as number[];
let _result = this._iterator
? new SelectClause(this._iterator).execute(source) as number[]
: source;

if (!_result) return 0;

if (!Number.isNaN(_result[0])) throw new Error("Avarage operator need type of number");
if (Number.isNaN(_result[0])) throw new Error("Avarage operator need type of number");

return (_result.reduce((a, b) => a + b, 0)) / _result.length;
}
Expand Down

0 comments on commit 764ebdb

Please sign in to comment.