From ea6cf31ec7cd8bfc8d91cae6186583e681e1c4ec Mon Sep 17 00:00:00 2001 From: Erik Jung Date: Fri, 13 Nov 2015 16:35:14 -0800 Subject: [PATCH] Add defaultTo helper --- lib/defaultTo.js | 27 +++++++++++++++++++++++++++ test/defaultTo.spec.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 lib/defaultTo.js create mode 100644 test/defaultTo.spec.js diff --git a/lib/defaultTo.js b/lib/defaultTo.js new file mode 100644 index 0000000..baf5998 --- /dev/null +++ b/lib/defaultTo.js @@ -0,0 +1,27 @@ +'use strict'; + +var R = require('ramda'); + +/** + * Output a value if it exists, or fallback to a default if it does not. + * + * @since v0.0.1 + * @param {*} value + * @param {*} fallback + * @param {Object} options + * @return {String} + * @example + * + * var doesExist = 'Hello'; + * + * {{defaultTo doesExist "Goodbye"}} // => "Hello" + * {{defaultTo doesNotExist "Goodbye"}} // => "Goodbye" + * {{defaultTo doesNotExist}} // => "" + */ + +module.exports = function defaultTo (value, fallback, options) { + var defaultBlank = R.defaultTo(''); + var defaultFallback = R.defaultTo(fallback); + return R.isNil(options) ? + defaultBlank(value) : R.pipe(defaultFallback, defaultBlank)(value); +}; diff --git a/test/defaultTo.spec.js b/test/defaultTo.spec.js new file mode 100644 index 0000000..6c11bbc --- /dev/null +++ b/test/defaultTo.spec.js @@ -0,0 +1,30 @@ +'use strict'; + +var defaultTo = require('../').defaultTo; +var tape = require('tape'); +var Handlebars = require('handlebars'); + +Handlebars.registerHelper(defaultTo.name, defaultTo); + +tape('defaultTo', function (test) { + var template; + var expected; + var actual; + + test.plan(3); + + template = Handlebars.compile('{{defaultTo doesExist "Goodbye"}}'); + expected = 'Hello'; + actual = template({ doesExist: 'Hello' }); + test.equal(actual, expected, 'Works with value set'); + + template = Handlebars.compile('{{defaultTo doesNotExist "Goodbye"}}'); + expected = 'Goodbye'; + actual = template({}); + test.equal(actual, expected, 'Works with value not set'); + + template = Handlebars.compile('{{defaultTo doesNotExist}}'); + expected = ''; + actual = template({}); + test.equal(actual, expected, 'Works with value and fallback not set'); +});