Skip to content

Commit

Permalink
Refactoring code
Browse files Browse the repository at this point in the history
  • Loading branch information
jinhduong committed Apr 26, 2018
1 parent 4a5822c commit 8541241
Show file tree
Hide file tree
Showing 30 changed files with 119 additions and 86 deletions.
6 changes: 2 additions & 4 deletions src/implements/methods.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { IMethods, IIterator } from "../intefaces";
import { Utils } from '../utils/object';
import { Utils } from '../utils';
import {
WhereClause, SelectClause, SelectManyClause, JoinClause, LeftJoinClause, OrderByClause,
OrderByDescendingClause, GroupByClause, GroupJoinClause, FirstClause, LastClause, CountClause,
SumClause, AvarageClause, MinClause, MaxClause, SingleClause, TakeClause, SkipWhileClause,
SkipClause, TakeWhileClause, AnyClause, ContainsClause, AllClause
SkipClause, TakeWhileClause, AnyClause, ContainsClause, AllClause, DistinctClause, ConcatClause
} from "../methods";
import { Queryable } from './queryable';
import { DistinctClause } from '../methods/distinct';
import { ConcatClause } from '../methods/concat';

export class IteratorMethods<T> implements IMethods<T> {

Expand Down
2 changes: 1 addition & 1 deletion src/methods/all.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export class AllClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => boolean;

execute(source: T[] | any[]): T[] | T | any {
execute(source: T[]): boolean {
if (!source) return false;
else {
return (source as T[]).every((x) => {
Expand Down
2 changes: 1 addition & 1 deletion src/methods/any.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export class AnyClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => boolean;

execute(source: T[] | any[]): T[] | T | any {
execute(source: T[]): boolean {
if (!source) return false;
else {
return (source as T[]).some((x) => {
Expand Down
6 changes: 3 additions & 3 deletions src/methods/average.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ export class AvarageClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => any;

execute(source: any[] | T[]): T[] | T | any {
execute(source: T[]): number {
if (!source) return 0;

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

if (!_result) return 0;
if (Number.isNaN(_result[0])) throw new Error("Avarage operator need type of number");
Expand Down
3 changes: 2 additions & 1 deletion src/methods/contains.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { IIterator } from "../intefaces/iterator.interface";
import { BaseIterator } from "../implements/baseIterator";
import { Utils } from '../utils';

export class ContainsClause<T> extends BaseIterator<T> implements IIterator<T> {

Expand All @@ -11,7 +12,7 @@ export class ContainsClause<T> extends BaseIterator<T> implements IIterator<T> {

let _flag = false;
for (let i = 0, li = source.length; i < li; i++) {
if (source[i] === this._entity) {
if (Utils.compare(source[i], this._entity)) {
_flag = true;
break;
}
Expand Down
6 changes: 3 additions & 3 deletions src/methods/count.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ export class CountClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => boolean;

execute(source: any[] | T[]): T[] | T | any {
if (!source) return source.length;
execute(source: T[]): number {
if (!source) return 0;
else if (!this._iterator) return source.length;
else {
return (source as T[]).filter((x) => {
return this._iterator(x);
}).length;
}).length || 0;
}
}

Expand Down
5 changes: 2 additions & 3 deletions src/methods/first.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ export class FirstClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => boolean;

execute(source: any[] | T[]): T[] | T {
if (!this._iterator) {
execute(source: T[]): T {
if (!this._iterator)
return source[0];
}
else {
return (source as T[]).filter((x) => {
return this._iterator(x);
Expand Down
9 changes: 2 additions & 7 deletions src/methods/groupBy.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { IIterator } from "../intefaces/iterator.interface";
import { SelectClause } from "./select";
import { BaseIterator } from "../implements/baseIterator";
import { Utils } from '../utils';

export class GroupByClause<T> extends BaseIterator<T> implements IIterator<T> {

Expand All @@ -13,7 +14,7 @@ export class GroupByClause<T> extends BaseIterator<T> implements IIterator<T> {
let _mappingSource = {}; // Object contains all data in array follow by [index] : {object}
let _indexes = [] as Array<{ value, index }>; // Make indexes table base on iterator function
let _groupByObj = {} // Object contains [groupByValue] : <any>[]
let _distinctGroupByValues = this.distinct
let _distinctGroupByValues = Utils.distinct
(new SelectClause(this._iterator).execute(source));

// Make mapping source by indexes
Expand Down Expand Up @@ -52,10 +53,4 @@ export class GroupByClause<T> extends BaseIterator<T> implements IIterator<T> {
super();
this._iterator = func;
}

private distinct(array: any[]) {
return array.filter((val, index, self) => {
return self.indexOf(val) === index;
}).filter(x => x != undefined);
}
}
8 changes: 1 addition & 7 deletions src/methods/groupJoin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { BaseIterator } from "../implements/baseIterator";

export class GroupJoinClause<T, S> extends BaseIterator<T> implements IIterator<T> {

nextSource: any[] | Promise<any[]>;
nextSource: any[];

_joinIterator: (aEntity: T, bEntity: S) => boolean;

Expand Down Expand Up @@ -35,10 +35,4 @@ export class GroupJoinClause<T, S> extends BaseIterator<T> implements IIterator<
this._groupIterator = groupIterator;
this.nextSource = anotherSource;
}

private distinct(array: any[]) {
return array.filter((val, index, self) => {
return self.indexOf(val) === index;
}).filter(x => x != undefined);
}
}
4 changes: 3 additions & 1 deletion src/methods/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ export * from './sum';
export * from './take';
export * from './takeWhile';
export * from './where';
export * from './all';
export * from './all';
export * from './concat';
export * from './distinct';
4 changes: 2 additions & 2 deletions src/methods/join.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export class JoinClause<T, S> extends BaseIterator<T> implements IIterator<T> {

nextSource: S[] | Promise<S[]>;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): { x: T, y: S }[] {
if (source) {
let _result = [];
for (let i = 0, li = source.length; i < li; i++) {
Expand All @@ -24,7 +24,7 @@ export class JoinClause<T, S> extends BaseIterator<T> implements IIterator<T> {
}
return _result;
}
return source;
return source as any;
}

constructor(anotherSource: S[] | Promise<S[]>, func: (item1: T, item2: S) => boolean) {
Expand Down
6 changes: 2 additions & 4 deletions src/methods/last.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@ export class LastClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => boolean;

execute(source: any[] | T[]): T[] | T {
if (!source) {
return source[source.length];
}
execute(source: T[]): T {
if (!source) return null;
else {
if (!this._iterator) return source[source.length - 1];
return (source as T[]).filter((x) => {
Expand Down
4 changes: 2 additions & 2 deletions src/methods/leftJoin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ export class LeftJoinClause<T, S> extends BaseIterator<T> implements IIterator<T

_iterator: (item1: T, item2: S) => boolean;

nextSource: any[] | Promise<any[]>;
nextSource: S[] | Promise<S[]>;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): any[] {
if (source) {
let _result = [];
for (let i = 0, li = source.length; i < li; i++) {
Expand Down
9 changes: 6 additions & 3 deletions src/methods/max.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,17 @@ export class MaxClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => any;

execute(source: any[] | T[]): T[] | T | any {
execute(source: T[]): number {
if (!source) return 0;

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

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

if (!_result) return 0;

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

return Math.max(..._result);
}
Expand Down
9 changes: 6 additions & 3 deletions src/methods/min.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,17 @@ export class MinClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => any;

execute(source: any[] | T[]): T[] | T | any {
execute(source: T[]): number {
if (!source) return 0;

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

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

if (!_result) return 0;

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

return Math.min(..._result);
}
Expand Down
2 changes: 1 addition & 1 deletion src/methods/orderBy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export class OrderByClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => any;

execute(source: T[]): T[] | any[] {
execute(source: T[]): T[] {

if (!source) return null;

Expand Down
2 changes: 1 addition & 1 deletion src/methods/orderByDescending.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export class OrderByDescendingClause<T> extends BaseIterator<T> implements IIter

_iterator: (item: T) => any;

execute(source: T[]): T[] | any[] {
execute(source: T[]): T[] {

if (!source) return null;

Expand Down
2 changes: 1 addition & 1 deletion src/methods/select.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export class SelectClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => boolean;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): any[]{
if (source) {
return (source as T[]).map(x => (this._iterator(x)));
}
Expand Down
2 changes: 1 addition & 1 deletion src/methods/selectMany.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export class SelectManyClause<T> extends BaseIterator<T> implements IIterator<T>

_iterator: (item: T, index?: number) => any;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): any[] {
if (!source) return null;

let _result = new SelectClause(this._iterator).execute(source);
Expand Down
21 changes: 8 additions & 13 deletions src/methods/single.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
import { IIterator } from "../intefaces/iterator.interface";
import { WhereClause } from "./where";
import { BaseIterator } from "../implements/baseIterator";
import { Utils } from '../utils';

export class SingleClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => boolean;

execute(source: any[] | T[]): T {
if (!this._iterator) {
return this.getSingle(source);
}
else {
let _result = new WhereClause(this._iterator).execute(source);
return this.getSingle(_result);
}
}
execute(source: T[]): T {

let _result = source;

if (this._iterator)
_result = new WhereClause(this._iterator).execute(_result);

private getSingle(src: any[] | T[]): T | any {
if (src.length > 1) throw new Error("The collection does not contain exactly one element");
else if (src.length === 1)
return src[0];
return Utils.getSingle(_result);
}

constructor(func?: (item: T) => boolean) {
Expand Down
4 changes: 2 additions & 2 deletions src/methods/skip.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ export class SkipClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: number;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): T[]{
if (source) {
return (source as T[]).slice(this._iterator);
return source.slice(this._iterator);
}
return source;
}
Expand Down
6 changes: 3 additions & 3 deletions src/methods/skipWhile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ export class SkipWhileClause<T> extends BaseIterator<T> implements IIterator<T>

_iterator: (item: T) => boolean;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): T[]{
if (source) {
let _skipCount = 0;
for (let i = 0; i < (source as T[]).length; i++) {
for (let i = 0; i < source.length; i++) {
const _item = source[i];
if (this._iterator(_item)) break;
_skipCount += 1;
}
return new SkipClause(_skipCount).execute(source);
return new SkipClause<T>(_skipCount).execute(source);
}
return null;
}
Expand Down
7 changes: 5 additions & 2 deletions src/methods/sum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ export class SumClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => any;

execute(source: any[] | T[]): T[] | T | any {
execute(source: T[]): number {
if (!source) return 0;

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

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

if (!_result) return 0;

Expand Down
2 changes: 1 addition & 1 deletion src/methods/take.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export class TakeClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: number;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): T[]{
if (source) {
return (source as T[]).slice(0, this._iterator);
}
Expand Down
4 changes: 2 additions & 2 deletions src/methods/takeWhile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ export class TakeWhileClause<T> extends BaseIterator<T> implements IIterator<T>

_iterator: (item: T) => boolean;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): T[]{
if (source) {
let _takeCount = 0;
for (let i = 0; i < (source as T[]).length; i++) {
const _item = source[i];
if (this._iterator(_item)) break;
_takeCount += 1;
}
return new TakeClause(_takeCount).execute(source);
return new TakeClause<T>(_takeCount).execute(source);
}
return null;
}
Expand Down
2 changes: 1 addition & 1 deletion src/methods/where.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export class WhereClause<T> extends BaseIterator<T> implements IIterator<T> {

_iterator: (item: T) => boolean;

execute(source: any[] | T[]): T[] | any[] {
execute(source: T[]): T[]{
if (source) {
return (source as T[]).filter((x) => {
return this._iterator(x);
Expand Down
2 changes: 1 addition & 1 deletion src/utils/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './object';
export * from './utility';

0 comments on commit 8541241

Please sign in to comment.