Skip to content

Instantly share code, notes, and snippets.

@guangtuan
Last active August 11, 2018 01:01
Show Gist options
  • Save guangtuan/7a2253cb3f64041a6a0fe93fcd13553a to your computer and use it in GitHub Desktop.
Save guangtuan/7a2253cb3f64041a6a0fe93fcd13553a to your computer and use it in GitHub Desktop.
pipe
const fs = require('fs');
const self = src => src;
const pipeAble = src => ({
pipe: func => pipeAble(func(src)),
track: (fmt = self) => pipeAble(console.log(fmt(src)) || src),
ensureObjectNotNull: placeHolder => pipeAble(src || placeHolder || {}),
ensureArrayNotNull: placeHolder => pipeAble(src || placeHolder || []),
redirect: dest => pipeAble((dest === console.log ? console.log(src) : fs.writeFileSync(dest, src)) || src),
strikeWhenBlanking: message => {
if (src) {
return pipeAble(src);
} else {
throw new Error(message);
}
},
get: () => src
});
const plusOne = i => i + 1;
const result = pipeAble(1).pipe(plusOne).pipe(plusOne).pipe(plusOne).pipe(plusOne).get();
console.log(result); // 5
const person = {
familyName: 'zhuang',
lastName: 'grant'
}
const fullname = ({ familyName, lastName }) => [lastName, familyName].join(' ');
const toUpperCase = str => str.toUpperCase();
const upperCaseFullname = pipeAble(person).pipe(fullname).pipe(toUpperCase).get();
console.log(upperCaseFullname); // GRANT ZHUANG
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment