Skip to content

Commit 6eba17a

Browse files
committed
Merge branch 'upgrade' of git://github.com/pespantelis/vuefire into 3.0
2 parents 9571a24 + cc879e5 commit 6eba17a

File tree

4 files changed

+51
-19
lines changed

4 files changed

+51
-19
lines changed

README.md

+8-5
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<!-- Vue -->
1212
<script src="https://cdn.jsdelivr.net/vue/1.0.24/vue.js"></script>
1313
<!-- Firebase -->
14-
<script src="https://cdn.firebase.com/js/client/2.4.2/firebase.js"></script>
14+
<script src="https://gstatic.com/firebasejs/3.0.3/firebase.js"></script>
1515
<!-- VueFire -->
16-
<script src="https://cdn.jsdelivr.net/vuefire/1.0.0/vuefire.min.js"></script>
16+
<script src="https://cdn.jsdelivr.net/vuefire/1.1.0/vuefire.min.js"></script>
1717
</head>
1818
```
1919

@@ -35,16 +35,19 @@
3535
## Usage
3636

3737
``` js
38+
var firebaseApp = firebase.initializeApp({ ... })
39+
var db = firebaseApp.database()
40+
3841
var vm = new Vue({
3942
el: '#demo',
4043
firebase: {
4144
// simple syntax, bind as an array by default
42-
anArray: new Firebase('url/to/my/collection'),
45+
anArray: db.ref('url/to/my/collection'),
4346
// can also bind to a query
44-
// anArray: new Firebase('url/to/my/collection').limitToLast(25)
47+
// anArray: db.ref('url/to/my/collection').limitToLast(25)
4548
// full syntax
4649
anObject: {
47-
source: new Firebase('url/to/my/object'),
50+
source: db.ref('url/to/my/object'),
4851
// optionally bind as an object
4952
asObject: true,
5053
// optionally provide the cancelCallback

package.json

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vuefire",
3-
"version": "1.0.1",
3+
"version": "1.1.0",
44
"description": "Firebase bindings for Vue.js",
55
"main": "dist/vuefire.js",
66
"files": [
@@ -32,6 +32,9 @@
3232
"url": "https://github.com/vuejs/vuefire/issues"
3333
},
3434
"homepage": "https://github.com/vuejs/vuefire#readme",
35+
"peerDependencies": {
36+
"firebase": "^2.4.1 || 3.x.x"
37+
},
3538
"devDependencies": {
3639
"chai": "^3.5.0",
3740
"codecov": "^1.0.1",
@@ -40,7 +43,6 @@
4043
"eslint-plugin-html": "^1.4.0",
4144
"eslint-plugin-promise": "^1.1.0",
4245
"eslint-plugin-standard": "^1.3.2",
43-
"firebase": "^2.4.1",
4446
"istanbul-instrumenter-loader": "^0.2.0",
4547
"karma": "^0.13.22",
4648
"karma-coverage": "^0.5.5",

src/vuefire.js

+33-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,33 @@
11
var Vue // late binding
22

3+
/**
4+
* Returns the key of a Firebase snapshot across SDK versions.
5+
*
6+
* @param {FirebaseSnapshot} snapshot
7+
* @return {string|null}
8+
*/
9+
function _getKey (snapshot) {
10+
return typeof snapshot.key === 'function'
11+
? snapshot.key()
12+
: snapshot.key
13+
}
14+
15+
/**
16+
* Returns the original reference of a Firebase reference or query across SDK versions.
17+
*
18+
* @param {FirebaseReference|FirebaseQuery} refOrQuery
19+
* @return {FirebaseReference}
20+
*/
21+
function _getRef (refOrQuery) {
22+
if (typeof refOrQuery.ref === 'function') {
23+
refOrQuery = refOrQuery.ref()
24+
} else if (typeof refOrQuery.ref === 'object') {
25+
refOrQuery = refOrQuery.ref
26+
}
27+
28+
return refOrQuery
29+
}
30+
331
/**
432
* Check if a value is an object.
533
*
@@ -21,7 +49,7 @@ function createRecord (snapshot) {
2149
var res = isObject(value)
2250
? value
2351
: { '.value': value }
24-
res['.key'] = snapshot.key()
52+
res['.key'] = _getKey(snapshot)
2553
return res
2654
}
2755

@@ -61,11 +89,7 @@ function bind (vm, key, source) {
6189
if (!isObject(source)) {
6290
throw new Error('VueFire: invalid Firebase binding source.')
6391
}
64-
// get the original ref for possible queries
65-
var ref = source
66-
if (typeof source.ref === 'function') {
67-
ref = source.ref()
68-
}
92+
var ref = _getRef(source)
6993
vm.$firebaseRefs[key] = ref
7094
vm._firebaseSources[key] = source
7195
// bind based on initial value type
@@ -94,17 +118,17 @@ function bindAsArray (vm, key, source, cancelCallback) {
94118
}, cancelCallback)
95119

96120
var onRemove = source.on('child_removed', function (snapshot) {
97-
var index = indexForKey(array, snapshot.key())
121+
var index = indexForKey(array, _getKey(snapshot))
98122
array.splice(index, 1)
99123
}, cancelCallback)
100124

101125
var onChange = source.on('child_changed', function (snapshot) {
102-
var index = indexForKey(array, snapshot.key())
126+
var index = indexForKey(array, _getKey(snapshot))
103127
array.splice(index, 1, createRecord(snapshot))
104128
}, cancelCallback)
105129

106130
var onMove = source.on('child_moved', function (snapshot, prevKey) {
107-
var index = indexForKey(array, snapshot.key())
131+
var index = indexForKey(array, _getKey(snapshot))
108132
var record = array.splice(index, 1)[0]
109133
var newIndex = prevKey ? indexForKey(array, prevKey) + 1 : 0
110134
array.splice(newIndex, 0, record)

tests/vuefire.spec.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ var helpers = require('./helpers')
55

66
Vue.use(VueFire)
77

8-
var demoFirebaseUrl = 'https://' + helpers.generateRandomString() + '.firebaseio-demo.com'
8+
var firebaseApp = Firebase.initializeApp({
9+
apiKey: helpers.generateRandomString(),
10+
databaseURL: 'https://' + helpers.generateRandomString() + '.firebaseio-demo.com'
11+
})
912

1013
describe('VueFire', function () {
1114
var firebaseRef
1215

1316
beforeEach(function (done) {
14-
firebaseRef = new Firebase(demoFirebaseUrl)
17+
firebaseRef = firebaseApp.database().ref()
1518
firebaseRef.remove(function (error) {
1619
if (error) {
1720
done(error)
@@ -595,7 +598,7 @@ describe('VueFire', function () {
595598
})
596599

597600
it('sets the key as null when bound to the root of the database', function (done) {
598-
var rootRef = firebaseRef.root()
601+
var rootRef = firebaseRef.root
599602
var vm = new Vue({
600603
firebase: {
601604
items: {

0 commit comments

Comments
 (0)