diff options
author | Alfredo Sumaran <alfredo@gitlab.com> | 2016-12-14 11:40:45 -0500 |
---|---|---|
committer | Alfredo Sumaran <alfredo@gitlab.com> | 2016-12-14 11:45:45 -0500 |
commit | f796840fd33d7df2c1de8f965596b5486b1fbf24 (patch) | |
tree | f2ae8758440af6ba92313e0b1be21192a8fc7787 | |
parent | 1fca9658ce3f136ec38f6550d5cf4d80a8773731 (diff) | |
download | gitlab-ce-f796840fd33d7df2c1de8f965596b5486b1fbf24.tar.gz |
Add Object.assign polyfill
-rw-r--r-- | app/assets/javascripts/extensions/object.js.es6 | 27 | ||||
-rw-r--r-- | spec/javascripts/extensions/object_spec.js.es6 | 25 |
2 files changed, 52 insertions, 0 deletions
diff --git a/app/assets/javascripts/extensions/object.js.es6 b/app/assets/javascripts/extensions/object.js.es6 new file mode 100644 index 00000000000..f8cdedd507b --- /dev/null +++ b/app/assets/javascripts/extensions/object.js.es6 @@ -0,0 +1,27 @@ +/* eslint-disable */ + +// Taken from https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill +if (typeof Object.assign != 'function') { + Object.assign = function (target, varArgs) { // .length of function is 2 + 'use strict'; + if (target == null) { // TypeError if undefined or null + throw new TypeError('Cannot convert undefined or null to object'); + } + + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + + if (nextSource != null) { // Skip over if undefined or null + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }; +} diff --git a/spec/javascripts/extensions/object_spec.js.es6 b/spec/javascripts/extensions/object_spec.js.es6 new file mode 100644 index 00000000000..3b71c255b30 --- /dev/null +++ b/spec/javascripts/extensions/object_spec.js.es6 @@ -0,0 +1,25 @@ +/*= require extensions/object */ + +describe('Object extensions', () => { + describe('assign', () => { + it('merges source object into target object', () => { + const targetObj = {}; + const sourceObj = { + foo: 'bar', + }; + Object.assign(targetObj, sourceObj); + expect(targetObj.foo).toBe('bar'); + }); + + it('merges object with the same properties', () => { + const targetObj = { + foo: 'bar', + }; + const sourceObj = { + foo: 'baz', + }; + Object.assign(targetObj, sourceObj); + expect(targetObj.foo).toBe('baz'); + }); + }); +}); |