diff options
author | Fatih Acet <acetfatih@gmail.com> | 2016-12-15 16:53:08 +0000 |
---|---|---|
committer | Fatih Acet <acetfatih@gmail.com> | 2016-12-15 16:53:08 +0000 |
commit | b2fdad0a6498e8e95cad8972dfd4940b58fff086 (patch) | |
tree | 9f29e7e27d264ec84fecaf221748f9a46c55b754 | |
parent | a2ee24dc59623cedc6785f4881c9098755698dc2 (diff) | |
parent | 47646d85b10fe92d67f801325daa05a2e49a1188 (diff) | |
download | gitlab-ce-b2fdad0a6498e8e95cad8972dfd4940b58fff086.tar.gz |
Merge branch 'add-object-assign-polyfill' into 'master'
Add Object.assign polyfill
Because PhantomJS
See merge request !8090
-rw-r--r-- | app/assets/javascripts/extensions/object.js.es6 | 26 | ||||
-rw-r--r-- | spec/javascripts/extensions/object_spec.js.es6 | 25 |
2 files changed, 51 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..70a2d765abd --- /dev/null +++ b/app/assets/javascripts/extensions/object.js.es6 @@ -0,0 +1,26 @@ +/* eslint-disable no-restricted-syntax */ + +// Adapted from https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill +if (typeof Object.assign !== 'function') { + Object.assign = function assign(target, ...args) { + if (target == null) { // TypeError if undefined or null + throw new TypeError('Cannot convert undefined or null to object'); + } + + const to = Object(target); + + for (let index = 0; index < args.length; index += 1) { + const nextSource = args[index]; + + if (nextSource != null) { // Skip over if undefined or null + for (const 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'); + }); + }); +}); |