diff --git a/src/module/serializer.js b/src/module/serializer.js index eb52124..bd354fc 100644 --- a/src/module/serializer.js +++ b/src/module/serializer.js @@ -3,6 +3,8 @@ RMModule.factory('RMSerializer', ['$injector', 'inflector', '$filter', 'RMUtils', function($injector, inflector, $filter, Utils) { function extract(_from, _path) { + if(_from === null && _path.length > 1) return undefined; + var node; for(var i = 0; _from && (node = _path[i]); i++) { _from = _from[node]; diff --git a/test/serializer-spec.js b/test/serializer-spec.js index ebbd815..114bb02 100644 --- a/test/serializer-spec.js +++ b/test/serializer-spec.js @@ -252,6 +252,16 @@ describe('Restmod serializer', function() { expect(result.brand.full_name).toEqual('Giant'); }); + it('should properly handle null parent when processing nested properties', function() { + var spy = jasmine.createSpy(); + + serializer.dsl().attrMap('brand', 'brand.full_name'); + serializer.dsl().attrDecoder('brand', spy); + + serializer.decode({}, null, ''); + expect(spy).not.toHaveBeenCalled(); + }); + it('should allow mapping to a server property inside an ignored property', function() { serializer.dsl().attrMap('brandName', 'brand.full_name'); serializer.dsl().attrMask('brand', true);