Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.

Commit d13a3b7

Browse files
committed
Merge pull request #703 from firebase/de-provider
AngularFire 1.2 - firebaseRefProvider and $firebaseAuthService
2 parents 427d7f9 + eaa688e commit d13a3b7

File tree

4 files changed

+140
-0
lines changed

4 files changed

+140
-0
lines changed

src/firebaseAuthService.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
(function() {
2+
"use strict";
3+
4+
function FirebaseAuthService($firebaseAuth, $firebaseRef) {
5+
return $firebaseAuth($firebaseRef.default);
6+
}
7+
FirebaseAuthService.$inject = ['$firebaseAuth', '$firebaseRef'];
8+
9+
angular.module('firebase')
10+
.factory('$firebaseAuthService', FirebaseAuthService);
11+
12+
})();

src/firebaseRef.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
(function() {
2+
"use strict";
3+
4+
function FirebaseRef() {
5+
this.urls = null;
6+
this.registerUrl = function registerUrl(urlOrConfig) {
7+
8+
if (typeof urlOrConfig === 'string') {
9+
this.urls = {};
10+
this.urls.default = urlOrConfig;
11+
}
12+
13+
if (angular.isObject(urlOrConfig)) {
14+
this.urls = urlOrConfig;
15+
}
16+
17+
};
18+
19+
this.$$checkUrls = function $$checkUrls(urlConfig) {
20+
if (!urlConfig) {
21+
return new Error('No Firebase URL registered. Use firebaseRefProvider.registerUrl() in the config phase. This is required if you are using $firebaseAuthService.');
22+
}
23+
if (!urlConfig.default) {
24+
return new Error('No default Firebase URL registered. Use firebaseRefProvider.registerUrl({ default: "https://<my-firebase-app>.firebaseio.com/"}).');
25+
}
26+
};
27+
28+
this.$$createRefsFromUrlConfig = function $$createMultipleRefs(urlConfig) {
29+
var refs = {};
30+
var error = this.$$checkUrls(urlConfig);
31+
if (error) { throw error; }
32+
angular.forEach(urlConfig, function(value, key) {
33+
refs[key] = new Firebase(value);
34+
});
35+
return refs;
36+
};
37+
38+
this.$get = function FirebaseRef_$get() {
39+
return this.$$createRefsFromUrlConfig(this.urls);
40+
};
41+
}
42+
43+
angular.module('firebase')
44+
.provider('$firebaseRef', FirebaseRef);
45+
46+
})();
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'use strict';
2+
describe('$firebaseAuthService', function () {
3+
var $firebaseRefProvider;
4+
var MOCK_URL = 'https://stub.firebaseio-demo.com/'
5+
6+
beforeEach(module('firebase', function(_$firebaseRefProvider_) {
7+
$firebaseRefProvider = _$firebaseRefProvider_;
8+
$firebaseRefProvider.registerUrl(MOCK_URL);
9+
}));
10+
11+
describe('<constructor>', function() {
12+
13+
var $firebaseAuthService;
14+
beforeEach(function() {
15+
module('firebase');
16+
inject(function (_$firebaseAuthService_) {
17+
$firebaseAuthService = _$firebaseAuthService_;
18+
});
19+
});
20+
21+
it('should exist because we called $firebaseRefProvider.registerUrl()', inject(function() {
22+
expect($firebaseAuthService).not.toBe(null);
23+
}));
24+
25+
});
26+
27+
});

tests/unit/firebaseRef.spec.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
'use strict';
2+
describe('firebaseRef', function () {
3+
4+
var $firebaseRefProvider;
5+
var MOCK_URL = 'https://stub.firebaseio-demo.com/'
6+
7+
beforeEach(module('firebase', function(_$firebaseRefProvider_) {
8+
$firebaseRefProvider = _$firebaseRefProvider_;
9+
}));
10+
11+
describe('registerUrl', function() {
12+
13+
it('creates a single reference with a url', inject(function() {
14+
$firebaseRefProvider.registerUrl(MOCK_URL);
15+
expect($firebaseRefProvider.$get().default).toBeAFirebaseRef();
16+
}));
17+
18+
it('creates a default reference with a config object', inject(function() {
19+
$firebaseRefProvider.registerUrl({
20+
default: MOCK_URL
21+
});
22+
var firebaseRef = $firebaseRefProvider.$get();
23+
expect(firebaseRef.default).toBeAFirebaseRef();
24+
}));
25+
26+
it('creates multiple references with a config object', inject(function() {
27+
$firebaseRefProvider.registerUrl({
28+
default: MOCK_URL,
29+
messages: MOCK_URL + 'messages'
30+
});
31+
var firebaseRef = $firebaseRefProvider.$get();
32+
expect(firebaseRef.default).toBeAFirebaseRef();
33+
expect(firebaseRef.messages).toBeAFirebaseRef();
34+
}));
35+
36+
it('should throw an error when no url is provided', inject(function () {
37+
function errorWrapper() {
38+
$firebaseRefProvider.registerUrl();
39+
$firebaseRefProvider.$get();
40+
}
41+
expect(errorWrapper).toThrow();
42+
}));
43+
44+
it('should throw an error when no default url is provided', inject(function() {
45+
function errorWrapper() {
46+
$firebaseRefProvider.registerUrl({ messages: MOCK_URL + 'messages' });
47+
$firebaseRefProvider.$get();
48+
}
49+
expect(errorWrapper).toThrow();
50+
}));
51+
52+
53+
});
54+
55+
});

0 commit comments

Comments
 (0)