Skip to content

Commit

Permalink
feat: add id to Trackers and manage with simple Map
Browse files Browse the repository at this point in the history
  • Loading branch information
yangchristian committed Jul 12, 2017
1 parent 6ac09f8 commit 7d04e23
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 31 deletions.
36 changes: 23 additions & 13 deletions src/core/crosslytics.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TestEvent extends TrackedEvent<TestEventArgs> {
}

class TestTracker implements Tracker {
constructor(public id: string) {}
public identify(identity: Identity) {
return;
}
Expand All @@ -26,20 +27,29 @@ class TestTracker implements Tracker {

test('Should only register a Tracker once', t => {
const cl = new Crosslytics();
const tracker = new TestTracker();
cl.registerTracker(tracker);
cl.registerTracker(tracker);
t.is(cl.trackers.length, 1);
const tracker = new TestTracker('test');
cl.trackers.set(tracker.id, tracker);
cl.trackers.set(tracker.id, tracker);
t.is(cl.trackers.size, 1);
});

test('Should deregister a Tracker', t => {
test('Should overwrite Trackers by id', t => {
const cl = new Crosslytics();
const trackerA = new TestTracker();
const trackerB = new TestTracker();
cl.registerTracker(trackerA);
cl.registerTracker(trackerB);
t.is(cl.trackers.length, 2);
cl.deregisterTracker(trackerB);
cl.deregisterTracker(trackerB);
t.is(cl.trackers.length, 1);
const trackerA = new TestTracker('test');
const trackerB = new TestTracker('test');
cl.trackers.set(trackerA.id, trackerA);
cl.trackers.set(trackerB.id, trackerB);
t.is(cl.trackers.size, 1);
});

test('Should deregister a Tracker once', t => {
const cl = new Crosslytics();
const trackerA = new TestTracker('test');
const trackerB = new TestTracker('test2');
cl.trackers.set(trackerA.id, trackerA);
cl.trackers.set(trackerB.id, trackerB);
t.is(cl.trackers.size, 2);
cl.trackers.delete(trackerA.id);
cl.trackers.delete(trackerA.id);
t.is(cl.trackers.size, 1);
});
24 changes: 6 additions & 18 deletions src/core/crosslytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,13 @@ import { Tracker } from './tracker';
* Main API entry point
*/
export class Crosslytics {
public identity: Identity;

public readonly trackers = new Array<Tracker>();
public registerTracker(tracker: Tracker) {
if (this.trackers.indexOf(tracker) >= 0) {
return;
}

this.trackers.push(tracker);
}

public deregisterTracker(tracker: Tracker) {
const index = this.trackers.indexOf(tracker);
if (index >= 0) {
this.trackers.splice(index, 1);
}
}
public readonly trackers = new Map<string, Tracker>();

public async track<T>(event: TrackedEvent<T>) {
return this.trackers.map(t => t.track(event));
const promises = [];
for (const tracker of this.trackers.values()) {
promises.push(tracker.track(event));
}
return Promise.all(promises);
}
}
1 change: 1 addition & 0 deletions src/core/tracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { TrackedEvent } from './trackedEvent';
* that ultimately receives your `TrackedEvent`s.
*/
export interface Tracker {
id: string;
identify(identity: Identity): void;
track<T>(event: TrackedEvent<T>): Promise<void>;
}

0 comments on commit 7d04e23

Please sign in to comment.