Skip to content

Commit be02fd2

Browse files
committed
[fixed] transforming hash child values
1 parent 7cce801 commit be02fd2

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

src.js

+19-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ var list = {
3838
};
3939

4040
var hash = {
41+
toString () {
42+
return 'hash';
43+
},
44+
4145
validate (obj, path) {
4246
error('object' !== typeof obj, `Validation Error: received non-object for path "${path}"`);
4347
}
@@ -90,9 +94,12 @@ var createRefForReals = (Firebase, path, routes, host) => {
9094
var snapshotVal = snapshot.val();
9195
if (snapshotVal === null)
9296
return cb(null, null);
97+
// all of this is garbage, each type should handle the transforms
9398
var transformed = handler.transform ? handler.transform(snapshotVal) : snapshotVal;
9499
if (matchInfo.route.handler == 'list')
95100
transformed = transformListChildren(transformed, routes, path);
101+
if (matchInfo.route.handler == 'hash')
102+
transformed = transformHash(transformed, routes, path);
96103
addIdForDirectRefToListChild(transformed, matchInfo.route, path);
97104
addRelationships(transformed, matchInfo);
98105
addIndexes(transformed, matchInfo);
@@ -120,11 +127,22 @@ var createRefForReals = (Firebase, path, routes, host) => {
120127
return { set:set, getValue, push, child, listen };
121128
};
122129

130+
var transformHash = (child, routes, path) => {
131+
Object.keys(child).forEach((key) => {
132+
var childPath = `${path}/${key}`;
133+
var matchInfo = router.match(childPath, routes);
134+
var handler = matchInfo.route.handler;
135+
if (handler.transform)
136+
child[key] = handler.transform(child[key]);
137+
});
138+
return child;
139+
};
140+
123141
var transformListChildren = (children, routes, path) => {
124142
// should probably recurse here
125143
return children.map((child) => {
126144
Object.keys(child).forEach((key) => {
127-
if (key === '_id') // hmmm this might get out of hand
145+
if (key === '_id') // hmmm, I am dubious of much more of this
128146
return;
129147
var childPath = `${path}/${child._id}/${key}`;
130148
var matchInfo = router.match(childPath, routes);

tests.js

+24-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ describe('ref', () => {
4444
});
4545
});
4646

47-
it('transforms children', (done) => {
47+
it('transforms list children', (done) => {
4848
var testType = {
4949
validate () {},
5050
transform (val) {
@@ -67,6 +67,29 @@ describe('ref', () => {
6767
});
6868
});
6969

70+
it('transforms hash children', (done) => {
71+
var testType = {
72+
validate () {},
73+
transform (val) {
74+
return val + 1;
75+
}
76+
};
77+
var schema = Schema.create(Firebase, HOST, (child) => {
78+
child('test', hash, (child) => {
79+
child('n', testType);
80+
});
81+
});
82+
var ref = schema.createRef('test');
83+
ref.set({ n: 10 }, () => {
84+
ref.getValue((err, val) => {
85+
expect(val).toEqual({ n: 11 });
86+
done();
87+
});
88+
});
89+
});
90+
91+
92+
7093
describe('getValue', () => {
7194
it('handles null values', (done) => {
7295
var schema = Schema.create(Firebase, HOST, (child) => {

0 commit comments

Comments
 (0)