2015-12-02 13:01:31 -05:00
|
|
|
"use strict"
|
2014-10-20 16:56:45 -04:00
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
//require('es6-shim');
|
2014-10-20 16:56:45 -04:00
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
;
|
|
|
|
var helpers = {
|
2014-10-23 10:53:16 -04:00
|
|
|
/**
|
2015-12-02 13:01:31 -05:00
|
|
|
* Wrap String.prototype.trim in a way that is easily mappable
|
|
|
|
*
|
|
|
|
* @param {String} str - The string to trim
|
|
|
|
* @return {String} - The trimmed string
|
|
|
|
*/
|
|
|
|
stringTrim: function stringTrim(str) {
|
2014-10-23 10:53:16 -04:00
|
|
|
return str.trim();
|
|
|
|
},
|
2014-10-20 16:56:45 -04:00
|
|
|
/**
|
2015-12-02 13:01:31 -05:00
|
|
|
* Get the type of the variable passed
|
|
|
|
*
|
|
|
|
* @see https://techblog.badoo.com/blog/2013/11/01/type-checking-in-javascript/
|
|
|
|
* @see http://toddmotto.com/understanding-javascript-types-and-reliable-type-checking/
|
|
|
|
* @param {mixed} o
|
|
|
|
* @return {String}
|
|
|
|
*/
|
|
|
|
type: function type(o) {
|
|
|
|
var type = Object.prototype.toString.call(o).slice(8, -1).toLowerCase();
|
2014-10-23 10:53:16 -04:00
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
// handle NaN and Infinity
|
|
|
|
if (type === 'number') {
|
|
|
|
if (isNaN(o)) {
|
|
|
|
return 'nan';
|
|
|
|
}
|
|
|
|
if (!isFinite(o)) {
|
|
|
|
return 'infinity';
|
|
|
|
}
|
|
|
|
}
|
2014-10-23 10:53:16 -04:00
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
return type;
|
2014-10-20 16:56:45 -04:00
|
|
|
},
|
|
|
|
/**
|
2015-12-02 13:01:31 -05:00
|
|
|
* Determine whether an object is scalar
|
|
|
|
*
|
|
|
|
* @param {mixed} obj
|
|
|
|
* @return {bool}
|
|
|
|
*/
|
|
|
|
isScalar: function isScalar(obj) {
|
2014-10-23 10:53:16 -04:00
|
|
|
var scalar = ['string', 'number', 'boolean'];
|
2015-12-02 13:01:31 -05:00
|
|
|
return scalar.indexOf(helpers.type(obj)) !== -1;
|
2014-11-05 17:08:56 -05:00
|
|
|
},
|
|
|
|
/**
|
2015-12-02 13:01:31 -05:00
|
|
|
* Get a list of values with a common key from an array of objects
|
|
|
|
*
|
|
|
|
* @param {Array} arr - The array of objects to search
|
|
|
|
* @param {String} key - The key of the object to get
|
|
|
|
* @return {Array}
|
|
|
|
*/
|
|
|
|
arrayPluck: function arrayPluck(arr, key) {
|
2014-11-05 17:08:56 -05:00
|
|
|
var output = [];
|
|
|
|
|
|
|
|
// Empty case
|
|
|
|
if (arr.length === 0) return output;
|
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
arr.forEach(function (obj) {
|
|
|
|
if (!helpers.isUndefined(obj[key])) {
|
2014-11-05 17:08:56 -05:00
|
|
|
output.push(obj[key]);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return output;
|
|
|
|
},
|
|
|
|
/**
|
2015-12-02 13:01:31 -05:00
|
|
|
* Determine if a value matching the passed regular expression is
|
|
|
|
* in the passed array
|
|
|
|
*
|
|
|
|
* @param {Array} arr - The array to search
|
|
|
|
* @param {RegExp} pattern - The pattern to match
|
|
|
|
* @return {Boolean} - If an array item matches the pattern
|
|
|
|
*/
|
|
|
|
regexInArray: function regexInArray(arr, pattern) {
|
2014-11-05 17:08:56 -05:00
|
|
|
// Empty case(s)
|
2015-12-02 13:01:31 -05:00
|
|
|
if (!helpers.isArray(arr)) return false;
|
2014-11-05 17:08:56 -05:00
|
|
|
if (arr.length === 0) return false;
|
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
var i = undefined,
|
|
|
|
l = arr.length;
|
2014-11-05 17:08:56 -05:00
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
for (i = 0; i < l; i++) {
|
2014-11-05 17:08:56 -05:00
|
|
|
// Short circuit if any items match
|
|
|
|
if (pattern.test(arr[i])) return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
2015-12-02 13:01:31 -05:00
|
|
|
},
|
|
|
|
/**
|
|
|
|
* Make the first letter of the string uppercase
|
|
|
|
*
|
|
|
|
* @param {String} str
|
|
|
|
* @return {String}
|
|
|
|
*/
|
|
|
|
upperCaseFirst: function upperCaseFirst(str) {
|
|
|
|
str += '';
|
|
|
|
var first = str.charAt(0).toUpperCase();
|
|
|
|
return first + str.substr(1);
|
2014-10-20 16:56:45 -04:00
|
|
|
}
|
|
|
|
};
|
2014-10-23 10:53:16 -04:00
|
|
|
|
|
|
|
// Define an 'is' method for each type
|
2015-12-02 13:01:31 -05:00
|
|
|
var types = ['Null', 'Undefined', 'Object', 'Array', 'String', 'Number', 'Boolean', 'Function', 'RegExp', 'NaN', 'Infinite'];
|
2014-10-23 10:53:16 -04:00
|
|
|
types.forEach(function (t) {
|
2014-10-23 13:50:11 -04:00
|
|
|
/**
|
2015-12-02 13:01:31 -05:00
|
|
|
* Determine whether a variable is of the type specified in the
|
|
|
|
* function name, eg isNumber
|
|
|
|
*
|
|
|
|
* Types available are Null, Undefined, Object, Array, String, Number, Boolean, Function, RegExp, NaN and Infinite
|
|
|
|
*
|
|
|
|
* @name is[type]
|
|
|
|
* @param {mixed} o
|
|
|
|
* @return {Boolean}
|
|
|
|
*/
|
|
|
|
helpers['is' + t] = function (o) {
|
|
|
|
if (t.toLowerCase() === 'infinite') {
|
|
|
|
t = 'infinity';
|
|
|
|
}
|
2014-10-28 16:46:48 -04:00
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
return helpers.type(o) === t.toLowerCase();
|
|
|
|
};
|
2014-10-23 10:53:16 -04:00
|
|
|
});
|
|
|
|
|
2015-12-02 13:01:31 -05:00
|
|
|
module.exports = helpers;
|
|
|
|
//# sourceMappingURL=helpers.js.map
|