(obj, path, setValue, fullExp, options)
| 11032 | ////////////////////////////////////////////////// |
| 11033 | |
| 11034 | function setter(obj, path, setValue, fullExp, options) { |
| 11035 | ensureSafeObject(obj, fullExp); |
| 11036 | |
| 11037 | //needed? |
| 11038 | options = options || {}; |
| 11039 | |
| 11040 | var element = path.split('.'), key; |
| 11041 | for (var i = 0; element.length > 1; i++) { |
| 11042 | key = ensureSafeMemberName(element.shift(), fullExp); |
| 11043 | var propertyObj = ensureSafeObject(obj[key], fullExp); |
| 11044 | if (!propertyObj) { |
| 11045 | propertyObj = {}; |
| 11046 | obj[key] = propertyObj; |
| 11047 | } |
| 11048 | obj = propertyObj; |
| 11049 | if (obj.then && options.unwrapPromises) { |
| 11050 | promiseWarning(fullExp); |
| 11051 | if (!("$$v" in obj)) { |
| 11052 | (function(promise) { |
| 11053 | promise.then(function(val) { promise.$$v = val; }); } |
| 11054 | )(obj); |
| 11055 | } |
| 11056 | if (obj.$$v === undefined) { |
| 11057 | obj.$$v = {}; |
| 11058 | } |
| 11059 | obj = obj.$$v; |
| 11060 | } |
| 11061 | } |
| 11062 | key = ensureSafeMemberName(element.shift(), fullExp); |
| 11063 | ensureSafeObject(obj[key], fullExp); |
| 11064 | obj[key] = setValue; |
| 11065 | return setValue; |
| 11066 | } |
| 11067 | |
| 11068 | var getterFnCacheDefault = {}; |
| 11069 | var getterFnCacheExpensive = {}; |
no test coverage detected