Skip to content

Commit

Permalink
chore(modules): Organize database
Browse files Browse the repository at this point in the history
  • Loading branch information
davideast authored and jeffbcross committed Jun 30, 2016
1 parent 80add4a commit 32ecc2a
Show file tree
Hide file tree
Showing 17 changed files with 219 additions and 156 deletions.
42 changes: 30 additions & 12 deletions src/angularfire2.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,42 @@
import {APP_INITIALIZER, Inject, Injectable, OpaqueToken, provide, Provider} from '@angular/core';
import {AngularFireAuth, firebaseAuthConfig, FirebaseAuth} from './providers/auth';
import { initializeApp } from 'firebase';
import {FirebaseListObservable} from './utils/firebase_list_observable';
import {FirebaseObjectObservable} from './utils/firebase_object_observable';
import {FirebaseListFactory, FirebaseListFactoryOpts} from './utils/firebase_list_factory';
import {
FirebaseObjectFactoryOpts,
FirebaseObjectFactory
} from './utils/firebase_object_factory';
import * as utils from './utils/utils';
import { FirebaseConfig, FirebaseApp, WindowLocation } from './tokens';
import { FirebaseAppConfig } from './interfaces';
import { FirebaseSdkAuthBackend } from './providers/firebase_sdk_auth_backend';
import {
FirebaseListFactoryOpts,
FirebaseObjectFactoryOpts,
} from './interfaces';
import {
FirebaseConfig,
FirebaseApp,
WindowLocation
} from './tokens';
import {
APP_INITIALIZER,
Inject,
Injectable,
OpaqueToken,
provide,
Provider
} from '@angular/core';
import {
AngularFireAuth,
firebaseAuthConfig,
FirebaseAuth
} from './providers/auth';
import {
FirebaseListObservable,
FirebaseObjectObservable,
FirebaseListFactory,
FirebaseObjectFactory,
FirebaseDatabase
} from './database/index';
import {
AuthBackend,
AuthMethods,
AuthProviders,
FirebaseAuthState
} from './providers/auth_backend';
import {FirebaseSdkAuthBackend} from './providers/firebase_sdk_auth_backend';
import {FirebaseDatabase} from './database/database';

@Injectable()
export class AngularFire {
Expand Down
19 changes: 11 additions & 8 deletions src/database/database.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import {Inject, Injectable} from '@angular/core';
import {FirebaseConfig} from '../tokens';
import {FirebaseAppConfig} from '../angularfire2';
import {FirebaseListObservable} from '../utils/firebase_list_observable';
import {FirebaseObjectObservable} from '../utils/firebase_object_observable';
import {FirebaseListFactory, FirebaseListFactoryOpts} from '../utils/firebase_list_factory';
import {FirebaseObjectFactoryOpts, FirebaseObjectFactory} from '../utils/firebase_object_factory';
import * as utils from '../utils/utils'
import { Inject, Injectable } from '@angular/core';
import { FirebaseConfig } from '../tokens';
import { FirebaseAppConfig } from '../angularfire2';
import { FirebaseListFactory } from './index';
import { FirebaseListFactoryOpts, FirebaseObjectFactoryOpts } from '../interfaces';
import * as utils from '../utils/utils';
import {
FirebaseListObservable,
FirebaseObjectObservable,
FirebaseObjectFactory
} from './index';

@Injectable()
export class FirebaseDatabase {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
declare var require: any;
import {
FirebaseListFactory,
FirebaseListObservable,
FirebaseObjectFactory,
onChildAdded,
onChildChanged,
onChildRemoved,
onChildUpdated,
} from './firebase_list_factory';
import {FirebaseListObservable} from './firebase_list_observable';
import {FirebaseObjectFactory} from './firebase_object_factory';
} from './index';
import {
FIREBASE_PROVIDERS,
defaultFirebase,
Expand All @@ -25,8 +25,8 @@ import {
beforeEachProviders,
inject
} from '@angular/core/testing';
import * as utils from './utils';
import {Query} from './query_observable';
import * as utils from '../utils/utils';
import {Query} from '../interfaces';
import {Subscription, Observable, Subject} from 'rxjs';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/skip';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
import {FirebaseListObservable, AFUnwrappedDataSnapshot} from './firebase_list_observable';
import {Observer} from 'rxjs/Observer';
import { AFUnwrappedDataSnapshot } from '../interfaces';
import { FirebaseListObservable } from './firebase_list_observable';
import { Observer } from 'rxjs/Observer';
import { database } from 'firebase';
import * as utils from './utils';
import {Query, observeQuery} from './query_observable';
import { observeQuery } from './query_observable';
import { Query, FirebaseListFactoryOpts } from '../interfaces';
import * as utils from '../utils/utils';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/map';

export function FirebaseListFactory (absoluteUrlOrDbRef:string | firebase.database.Reference | firebase.database.Query, {preserveSnapshot, query = {}}:FirebaseListFactoryOpts = {}): FirebaseListObservable<any> {
export function FirebaseListFactory (
absoluteUrlOrDbRef:string |
firebase.database.Reference |
firebase.database.Query,
{preserveSnapshot, query = {}}:FirebaseListFactoryOpts = {}): FirebaseListObservable<any> {

let ref: firebase.database.Reference | firebase.database.Query;

utils.checkForUrlOrFirebaseRef(absoluteUrlOrDbRef, {
Expand Down Expand Up @@ -142,11 +149,6 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
return listObs;
}

export interface FirebaseListFactoryOpts {
preserveSnapshot?: boolean;
query?: Query;
}

export function onChildAdded(arr:any[], child:any, prevKey:string): any[] {
if (!arr.length) {
return [child];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,25 @@
import {describe,ddescribe,it,iit,beforeEach,beforeEachProviders,inject} from '@angular/core/testing';
import {FirebaseListObservable} from './firebase_list_observable';
import { FirebaseListObservable } from './index';
import { Observer } from 'rxjs/Observer';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { database } from 'firebase';
import { unwrapMapFn } from '../utils/utils';
import {
FIREBASE_PROVIDERS,
defaultFirebase,
FirebaseApp,
FirebaseAppConfig,
AngularFire
} from '../angularfire2';
import {Observer} from 'rxjs/Observer';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { database } from 'firebase';
import {unwrapMapFn} from './utils';
import {
describe,
ddescribe,
it,
iit,
beforeEach,
beforeEachProviders,
inject
} from '@angular/core/testing';

export const firebaseConfig: FirebaseAppConfig = {
apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,12 @@
import {Observable} from 'rxjs/Observable';
import {Operator} from 'rxjs/Operator';
import {Subscriber} from 'rxjs/Subscriber';
import {Subscription} from 'rxjs/Subscription';
import * as utils from './utils';

export interface FirebaseOperationCases {
stringCase: () => firebase.Promise<void>;
firebaseCase?: () => firebase.Promise<void>;
snapshotCase?: () => firebase.Promise<void>;
unwrappedSnapshotCase?: () => firebase.Promise<void>;
}

export interface AFUnwrappedDataSnapshot {
$key: string;
$value?: string | number | boolean;
}
import { Observable } from 'rxjs/Observable';
import { Operator } from 'rxjs/Operator';
import { Subscriber } from 'rxjs/Subscriber';
import { Subscription } from 'rxjs/Subscription';
import * as utils from '../utils/utils';
import {
AFUnwrappedDataSnapshot,
FirebaseOperationCases
} from '../interfaces';

export type FirebaseOperation = string | firebase.database.Reference | firebase.database.DataSnapshot | AFUnwrappedDataSnapshot;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {FirebaseObjectFactory} from '../utils/firebase_object_factory';
import {FirebaseObjectObservable} from '../utils/firebase_object_observable';
import { Subscription } from 'rxjs';
import { FirebaseObjectFactory, FirebaseObjectObservable } from './index';
import {
beforeEach,
it,
Expand All @@ -17,7 +17,6 @@ import {
FirebaseAppConfig,
AngularFire
} from '../angularfire2';
import {Subscription} from 'rxjs';

export const firebaseConfig: FirebaseAppConfig = {
apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import {FirebaseObjectObservable} from './firebase_object_observable';
import {Observer} from 'rxjs/Observer';
import 'rxjs/add/operator/mergeMap';
import { FirebaseObjectObservable } from './index';
import { Observer } from 'rxjs/Observer';
import { database } from 'firebase';
import * as utils from './utils';
import {Query, observeQuery} from './query_observable';
import * as utils from '../utils/utils';
import { Query } from '../interfaces';
import { observeQuery } from './query_observable';
import { FirebaseObjectFactoryOpts } from '../interfaces';
import 'rxjs/add/operator/mergeMap';

export function FirebaseObjectFactory(absoluteUrlOrDbRef: string | firebase.database.Reference, {preserveSnapshot, query}: FirebaseObjectFactoryOpts = {}): FirebaseObjectObservable<any> {
export function FirebaseObjectFactory (
absoluteUrlOrDbRef: string | firebase.database.Reference,
{ preserveSnapshot, query }: FirebaseObjectFactoryOpts = {}): FirebaseObjectObservable<any> {

let ref: firebase.database.Reference;

utils.checkForUrlOrFirebaseRef(absoluteUrlOrDbRef, {
Expand All @@ -22,9 +27,4 @@ export function FirebaseObjectFactory(absoluteUrlOrDbRef: string | firebase.data

return () => ref.off();
}, ref);
}

export interface FirebaseObjectFactoryOpts {
preserveSnapshot?: boolean;
query?: Query
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import {
FirebaseAppConfig,
AngularFire
} from '../angularfire2';
import {FirebaseObjectObservable} from './firebase_object_observable';
import {Observer} from 'rxjs/Observer';
import { FirebaseObjectObservable } from './index';
import { Observer } from 'rxjs/Observer';
import 'rxjs/add/operator/map';
import { database } from 'firebase';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {Observable} from 'rxjs/Observable';
import {Operator} from 'rxjs/Operator';
import {Subscriber} from 'rxjs/Subscriber';
import {Subscription} from 'rxjs/Subscription';
import { Observable } from 'rxjs/Observable';
import { Operator } from 'rxjs/Operator';
import { Subscriber } from 'rxjs/Subscriber';
import { Subscription } from 'rxjs/Subscription';

export class FirebaseObjectObservable<T> extends Observable<T> {
constructor(subscribe?: <R>(subscriber: Subscriber<R>) => Subscription | Function | void, private _ref?:firebase.database.Reference) {
Expand Down
6 changes: 6 additions & 0 deletions src/database/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export * from './database';
export * from './firebase_list_factory';
export * from './firebase_list_observable';
export * from './firebase_object_factory';
export * from './firebase_object_observable';
export * from './query_observable';
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {describe, expect, it, iit} from '@angular/core/testing';
import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
import {Subject} from 'rxjs/Subject';

import {getOrderObservables, observeQuery, Query} from './query_observable';
import { describe, expect, it, iit } from '@angular/core/testing';
import { Observable } from 'rxjs/Observable';
import { Observer } from 'rxjs/Observer';
import { Subject } from 'rxjs/Subject';
import { Query } from '../interfaces';
import { getOrderObservables, observeQuery } from './index';

function scalarQueryTest(query: Query, done: any) {
const queryObservable = observeQuery(query);
Expand Down
78 changes: 15 additions & 63 deletions src/utils/query_observable.ts → src/database/query_observable.ts
Original file line number Diff line number Diff line change
@@ -1,69 +1,21 @@
import {Observable} from 'rxjs/Observable';
import {ScalarObservable} from 'rxjs/observable/ScalarObservable';
import {Operator} from 'rxjs/Operator';
import {Observer} from 'rxjs/Observer';
import {merge} from 'rxjs/operator/merge';
import {map} from 'rxjs/operator/map';
import { Observable } from 'rxjs/Observable';
import { ScalarObservable } from 'rxjs/observable/ScalarObservable';
import { Operator } from 'rxjs/Operator';
import { Observer } from 'rxjs/Observer';
import { merge } from 'rxjs/operator/merge';
import { map } from 'rxjs/operator/map';
import {
Query,
ScalarQuery,
OrderByOptions,
OrderBySelection,
LimitToOptions,
LimitToSelection,
Primitive
} from '../interfaces';
import 'rxjs/add/operator/merge';
import 'rxjs/add/operator/combineLatest';

export interface Query {
[key: string]: any;
orderByKey?: boolean | Observable<boolean>;
orderByPriority?: boolean | Observable<boolean>;
orderByChild?: string | Observable<string>;
orderByValue?: boolean | Observable<boolean>;
equalTo?: any | Observable<any>;
startAt?: any | Observable<any>;
endAt?: any | Observable<any>;
limitToFirst?: number | Observable<number>;
limitToLast?: number | Observable<number>;
}

export interface ScalarQuery {
[key: string]: any;
orderByKey?: boolean;
orderByPriority?: boolean;
orderByChild?: string;
orderByValue?: boolean;
equalTo?: any;
startAt?: any;
endAt?: any;
limitToFirst?: number;
limitToLast?: number;
}

export enum OrderByOptions {
Child,
Key,
Value,
Priority
}

export enum LimitToOptions {
First,
Last
}

export enum QueryOptions {
EqualTo,
StartAt,
EndAt
}

export interface OrderBySelection {
key: OrderByOptions;
value: boolean | string;
}

export interface LimitToSelection {
key: LimitToOptions;
value: number;
}

export type Primitive = number | string | boolean;


export function observeQuery(query: Query): Observable<ScalarQuery> {
if (!isPresent(query)) {
return new ScalarObservable(null);
Expand Down
Loading

0 comments on commit 32ecc2a

Please sign in to comment.