Skip to content

Instantly share code, notes, and snippets.

@gilesbradshaw
Created November 24, 2017 22:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gilesbradshaw/e037116a923e98cc7b2e04c3dbb09f13 to your computer and use it in GitHub Desktop.
Save gilesbradshaw/e037116a923e98cc7b2e04c3dbb09f13 to your computer and use it in GitHub Desktop.
import merge from 'lodash/merge';
/* eslint-env mocha */
describe('new test', () => {
it('works', () => {
const getIt = (x = {}) => {
const {
a = null,
b: {
c = null,
d = null,
} = {},
} = x;
return {
a,
b: {
c,
d,
},
};
};
const getMore = (x = {}, got) => {
const {
b: {
e = null,
} = {},
} = x;
return {
e,
got,
};
};
const merger = getter =>
get => ({
get: () => getter(get),
merge: params =>
merger(getter)(merge(get, params)),
reGet: reGet =>
merger(x => reGet(x, getter(x)))(get),
});
merger(getIt)()
.merge({
b: {
d: 'd',
},
})
.get()
.should
.eql({
a: null,
b: {
c: null,
d: 'd',
},
});
merger(getIt)()
.merge({
b: {
d: 'd',
},
})
.merge({
b: {
c: 'c',
},
})
.merge({
a: 'a',
})
.merge({
b: {
d: 'dd',
},
})
.get()
.should
.eql({
a: 'a',
b: {
c: 'c',
d: 'dd',
},
});
merger(getIt)()
.merge({
a: 'a',
b: {
c: 'c',
d: 'd',
},
})
.reGet(getMore)
.merge({
b: {
d: 'dd',
e: 'e',
},
})
.get()
.should
.eql({
e: 'e',
got: {
a: 'a',
b: {
c: 'c',
d: 'dd',
},
},
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment