Skip to content

Commit 118e99a

Browse files
committed
feat(AngularFire): add AngularFire service with list method
1 parent a776082 commit 118e99a

File tree

2 files changed

+48
-9
lines changed

2 files changed

+48
-9
lines changed

src/angularfire.spec.ts

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,35 @@
1-
import {describe,it,beforeEach, expect, inject} from 'angular2/testing';
1+
import {
2+
describe,
3+
it,
4+
beforeEach,
5+
beforeEachProviders,
6+
expect,
7+
inject
8+
} from 'angular2/testing';
29
import {Injector, provide, Provider} from 'angular2/core';
3-
import {FIREBASE_PROVIDERS, FirebaseUrl, FirebaseRef, defaultFirebase} from './angularfire';
10+
import {AngularFire, FIREBASE_PROVIDERS, FirebaseUrl, FirebaseRef, defaultFirebase} from './angularfire';
411

5-
const testUrl = 'https://ng2-forum-demo.firebaseio.com/';
12+
const testUrl = 'http://test.firebaseio.com:5000/';
613

714
describe('angularfire', () => {
15+
it('should be injectable via FIREBASE_PROVIDERS', () => {
16+
var injector = Injector.resolveAndCreate([FIREBASE_PROVIDERS, defaultFirebase(testUrl)]);
17+
expect(injector.get(AngularFire)).toBeAnInstanceOf(AngularFire);
18+
});
19+
20+
describe('.list()', () => {
21+
beforeEachProviders(() => [FIREBASE_PROVIDERS, defaultFirebase(testUrl)]);
22+
23+
it('should return an observable of the path', inject([AngularFire], (af:AngularFire) => {
24+
var nextSpy = jasmine.createSpy('next');
25+
var questions = af.list('list-of-questions');
26+
questions.subscribe(nextSpy);
27+
questions.add(['hello']);
28+
expect(nextSpy.calls.first().args[0][0].val()).toEqual(['hello']);
29+
}));
30+
});
31+
32+
833
describe('FIREBASE_REF', () => {
934
it('should provide a FirebaseRef for the FIREBASE_REF binding', () => {
1035
var injector = Injector.resolveAndCreate([
@@ -16,17 +41,18 @@ describe('angularfire', () => {
1641
expect(typeof injector.get(FirebaseRef).on).toBe('function');
1742
})
1843
});
19-
44+
2045
describe('defaultFirebase', () => {
2146
it('should create a provider', () => {
2247
const provider = defaultFirebase(testUrl);
2348
expect(provider).toBeAnInstanceOf(Provider);
2449
});
25-
50+
51+
2652
it('should inject a FIR reference', () => {
2753
const injector = Injector.resolveAndCreate([defaultFirebase(testUrl), FIREBASE_PROVIDERS]);
28-
expect(injector.get(FirebaseRef).toString()).toBe(testUrl);
54+
expect(injector.get(FirebaseRef).toString()).toBe(testUrl);
2955
});
3056
});
31-
57+
3258
});

src/angularfire.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1-
import {OpaqueToken, provide, Provider} from 'angular2/core';
1+
import {Inject, Injectable, OpaqueToken, provide, Provider} from 'angular2/core';
22
import {FirebaseAuth} from './providers/auth';
33
import * as Firebase from 'firebase';
4+
import {FirebaseObservable} from './utils/firebase_observable';
5+
import {FirebaseListFactory} from './utils/firebase_list_factory';
46
import {FirebaseUrl, FirebaseRef} from './tokens';
57

8+
@Injectable()
9+
export class AngularFire {
10+
constructor(@Inject(FirebaseUrl) private fbUrl:string) {
11+
}
12+
list (url:string):FirebaseObservable<any[]> {
13+
// TODO: check if relative or absolute
14+
return FirebaseListFactory(this.fbUrl+url);
15+
}
16+
}
17+
618
export const FIREBASE_PROVIDERS:any[] = [
719
provide(FirebaseRef, {
820
useFactory: (url:string) => new Firebase(url),
921
deps: [FirebaseUrl]}),
10-
FirebaseAuth
22+
FirebaseAuth,
23+
AngularFire
1124
];
1225

1326
export const defaultFirebase = (url: string): Provider => {

0 commit comments

Comments
 (0)