Skip to content

Commit 1523c7f

Browse files
committed
Fixes #1.
Stable Version 0.4.3.
1 parent c189349 commit 1523c7f

File tree

9 files changed

+93
-64
lines changed

9 files changed

+93
-64
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
##### 0.4.3 - 18 October 2014
2+
3+
###### Backwards compatible bug fixes
4+
- #1 - Create doesn't play well with idAttribute that isn't automatically assigned
5+
16
##### 0.4.2 - 01 October 2014
27

38
###### Other

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
## js-data-firebase
44

5-
Firebase adapter for [js-data](http://www.js-data.io/js-data).
5+
Firebase adapter for [js-data](http://www.js-data.io/).
66

77
## API Documentation
8-
[DSFirebaseAdapter](https://github.com/js-data/js-data/wiki/DSFirebaseAdapter)
8+
[DSFirebaseAdapter](http://www.js-data.io/docs/dsfirebaseadapter)
99

1010
## Demo
1111
[https://js-data-firebase.firebaseapp.com/](https://js-data-firebase.firebaseapp.com/)

bower.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "js-data-firebase",
33
"description": "Firebase adapter for js-data.",
4-
"version": "0.4.2",
4+
"version": "0.4.3",
55
"homepage": "http://www.js-data.io/js-data-firebase",
66
"repository": {
77
"type": "git",
@@ -30,7 +30,7 @@
3030
"karma.start.js"
3131
],
3232
"dependencies": {
33-
"js-data": "~0.4.x",
34-
"firebase": "~1.0.x"
33+
"js-data": "~1.0.x",
34+
"firebase": "~1.1.x"
3535
}
3636
}

dist/js-data-firebase.js

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @author Jason Dobry <[email protected]>
33
* @file js-data-firebase.js
4-
* @version 0.4.2 - Homepage <http://www.js-data.iojs-data-firebase/>
4+
* @version 0.4.3 - Homepage <http://www.js-data.iojs-data-firebase/>
55
* @copyright (c) 2014 Jason Dobry
66
* @license MIT <https://github.com/js-data/js-data-firebase/blob/master/LICENSE>
77
*
@@ -210,29 +210,34 @@ dsFirebaseAdapterPrototype.findAll = function (resourceConfig, params, options)
210210

211211
dsFirebaseAdapterPrototype.create = function (resourceConfig, attrs, options) {
212212
var _this = this;
213-
return new P(function (resolve, reject) {
214-
var resourceRef = _this.getRef(resourceConfig, options);
215-
var itemRef = resourceRef.push(attrs, function (err) {
216-
if (err) {
217-
return reject(err);
218-
} else {
219-
var id = itemRef.toString().replace(resourceRef.toString(), '');
220-
itemRef.child(resourceConfig.idAttribute).set(id, function (err) {
221-
if (err) {
222-
reject(err);
223-
} else {
224-
itemRef.once('value', function (dataSnapshot) {
225-
try {
226-
resolve(dataSnapshot.val());
227-
} catch (err) {
228-
reject(err);
229-
}
230-
}, reject, _this);
231-
}
232-
});
233-
}
213+
var id = attrs[resourceConfig.idAttribute];
214+
if (DSUtils.isString(id) || DSUtils.isNumber(id)) {
215+
return _this.update(resourceConfig, id, attrs, options);
216+
} else {
217+
return new P(function (resolve, reject) {
218+
var resourceRef = _this.getRef(resourceConfig, options);
219+
var itemRef = resourceRef.push(attrs, function (err) {
220+
if (err) {
221+
return reject(err);
222+
} else {
223+
var id = itemRef.toString().replace(resourceRef.toString(), '');
224+
itemRef.child(resourceConfig.idAttribute).set(id, function (err) {
225+
if (err) {
226+
reject(err);
227+
} else {
228+
itemRef.once('value', function (dataSnapshot) {
229+
try {
230+
resolve(dataSnapshot.val());
231+
} catch (err) {
232+
reject(err);
233+
}
234+
}, reject, _this);
235+
}
236+
});
237+
}
238+
});
234239
});
235-
});
240+
}
236241
};
237242

238243
dsFirebaseAdapterPrototype.update = function (resourceConfig, id, attrs, options) {
@@ -242,7 +247,7 @@ dsFirebaseAdapterPrototype.update = function (resourceConfig, id, attrs, options
242247
var itemRef = resourceRef.child(id);
243248
itemRef.once('value', function (dataSnapshot) {
244249
try {
245-
var item = dataSnapshot.val();
250+
var item = dataSnapshot.val() || {};
246251
var fields, removed, i;
247252
if (resourceConfig.relations) {
248253
fields = resourceConfig.relationFields;

dist/js-data-firebase.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
<link href="./example.css" rel="stylesheet">
88
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js"></script>
99
<script src="https://cdn.firebase.com/js/client/1.0.21/firebase.js"></script>
10-
<script src="https://github.com/js-data/js-data/releases/download/0.4.1/js-data-0.4.1.min.js"></script>
10+
<script src="https://github.com/js-data/js-data/releases/download/1.0.0-alpha.1-0/js-data-1.0.0-alpha.1-0.min.js"></script>
1111
<script
12-
src="https://github.com/js-data/js-data-firebase/releases/download/0.4.2/js-data-firebase-0.4.2.min.js"></script>
12+
src="https://github.com/js-data/js-data-firebase/releases/download/0.4.3/js-data-firebase-0.4.3.min.js"></script>
1313
<script src="./example.js"></script>
1414
</head>
1515
<body data-ng-controller="firebaseCtrl as fCtrl">

package.json

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "js-data-firebase",
33
"description": "Firebase adapter for js-data.",
4-
"version": "0.4.2",
4+
"version": "0.4.3",
55
"homepage": "http://www.js-data.io/js-data-firebase",
66
"repository": {
77
"type": "git",
@@ -31,16 +31,14 @@
3131
"grunt": "0.4.5",
3232
"grunt-browserify": "3.0.1",
3333
"grunt-contrib-clean": "0.6.0",
34-
"grunt-contrib-concat": "0.5.0",
35-
"grunt-contrib-copy": "0.6.0",
3634
"grunt-contrib-jshint": "0.10.0",
3735
"grunt-contrib-uglify": "0.6.0",
3836
"grunt-contrib-watch": "0.6.1",
3937
"grunt-karma": "0.9.0",
4038
"grunt-karma-coveralls": "2.5.2",
41-
"karma": "0.12.23",
39+
"karma": "0.12.24",
4240
"karma-chai": "0.1.0",
43-
"karma-chrome-launcher": "0.1.4",
41+
"karma-chrome-launcher": "0.1.5",
4442
"karma-coverage": "0.2.6",
4543
"karma-script-launcher": "0.1.0",
4644
"karma-firefox-launcher": "0.1.3",
@@ -49,14 +47,14 @@
4947
"karma-sinon": "1.0.3",
5048
"karma-spec-reporter": "0.0.13",
5149
"time-grunt": "1.0.0",
52-
"jit-grunt": "0.8.0"
50+
"jit-grunt": "0.9.0"
5351
},
5452
"scripts": {
5553
"test": "grunt test"
5654
},
5755
"dependencies": {
5856
"mout": "0.10.0",
59-
"js-data": "~0.4.x",
60-
"firebase": "~1.0.x"
57+
"js-data": "~1.0.x",
58+
"firebase": "~1.1.x"
6159
}
6260
}

src/index.js

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -69,29 +69,34 @@ dsFirebaseAdapterPrototype.findAll = function (resourceConfig, params, options)
6969

7070
dsFirebaseAdapterPrototype.create = function (resourceConfig, attrs, options) {
7171
var _this = this;
72-
return new P(function (resolve, reject) {
73-
var resourceRef = _this.getRef(resourceConfig, options);
74-
var itemRef = resourceRef.push(attrs, function (err) {
75-
if (err) {
76-
return reject(err);
77-
} else {
78-
var id = itemRef.toString().replace(resourceRef.toString(), '');
79-
itemRef.child(resourceConfig.idAttribute).set(id, function (err) {
80-
if (err) {
81-
reject(err);
82-
} else {
83-
itemRef.once('value', function (dataSnapshot) {
84-
try {
85-
resolve(dataSnapshot.val());
86-
} catch (err) {
87-
reject(err);
88-
}
89-
}, reject, _this);
90-
}
91-
});
92-
}
72+
var id = attrs[resourceConfig.idAttribute];
73+
if (DSUtils.isString(id) || DSUtils.isNumber(id)) {
74+
return _this.update(resourceConfig, id, attrs, options);
75+
} else {
76+
return new P(function (resolve, reject) {
77+
var resourceRef = _this.getRef(resourceConfig, options);
78+
var itemRef = resourceRef.push(attrs, function (err) {
79+
if (err) {
80+
return reject(err);
81+
} else {
82+
var id = itemRef.toString().replace(resourceRef.toString(), '');
83+
itemRef.child(resourceConfig.idAttribute).set(id, function (err) {
84+
if (err) {
85+
reject(err);
86+
} else {
87+
itemRef.once('value', function (dataSnapshot) {
88+
try {
89+
resolve(dataSnapshot.val());
90+
} catch (err) {
91+
reject(err);
92+
}
93+
}, reject, _this);
94+
}
95+
});
96+
}
97+
});
9398
});
94-
});
99+
}
95100
};
96101

97102
dsFirebaseAdapterPrototype.update = function (resourceConfig, id, attrs, options) {
@@ -101,7 +106,7 @@ dsFirebaseAdapterPrototype.update = function (resourceConfig, id, attrs, options
101106
var itemRef = resourceRef.child(id);
102107
itemRef.once('value', function (dataSnapshot) {
103108
try {
104-
var item = dataSnapshot.val();
109+
var item = dataSnapshot.val() || {};
105110
var fields, removed, i;
106111
if (resourceConfig.relations) {
107112
fields = resourceConfig.relationFields;

test/create.spec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,20 @@ describe('dsFirebaseAdapter#create', function () {
1515
})
1616
.catch(done);
1717
});
18+
it('should create a user in firebase with a provided primary key', function (done) {
19+
var id = 'test-' + (new Date().getTime());
20+
dsFirebaseAdapter.create(User, { id: id, name: 'John' }).then(function (user) {
21+
assert.equal(user.id, id);
22+
assert.equal(user.name, 'John');
23+
assert.isString(user.id);
24+
return dsFirebaseAdapter.find(User, user.id);
25+
})
26+
.then(function (user) {
27+
assert.equal(user.name, 'John');
28+
assert.isString(user.id);
29+
assert.deepEqual(user, { id: id, name: 'John' });
30+
done();
31+
})
32+
.catch(done);
33+
});
1834
});

0 commit comments

Comments
 (0)