UNPKG

fluro

Version:

Promise based HTTP Fluro client for the browser and node.js

343 lines (246 loc) 12.5 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>api/fluro.utils.js - Documentation</title> <script src="scripts/prettify/prettify.js"></script> <script src="scripts/prettify/lang-css.js"></script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc.css"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <input type="checkbox" id="nav-trigger" class="nav-trigger" /> <label for="nav-trigger" class="navicon-button x"> <div class="navicon"></div> </label> <label for="nav-trigger" class="overlay"></label> <nav > <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="FluroAccess.html">FluroAccess</a><ul class='methods'><li data-type='method'><a href="FluroAccess.html#.retrieveCurrentSession">retrieveCurrentSession</a></li><li data-type='method'><a href="FluroAccess.html#.setDefaultApplication">setDefaultApplication</a></li></ul></li><li><a href="FluroAPI.html">FluroAPI</a></li><li><a href="FluroAsset.html">FluroAsset</a><ul class='methods'><li data-type='method'><a href="FluroAsset.html#.avatarUrl">avatarUrl</a></li><li data-type='method'><a href="FluroAsset.html#.downloadUrl">downloadUrl</a></li><li data-type='method'><a href="FluroAsset.html#.filesize">filesize</a></li><li data-type='method'><a href="FluroAsset.html#.getUrl">getUrl</a></li><li data-type='method'><a href="FluroAsset.html#.imageUrl">imageUrl</a></li><li data-type='method'><a href="FluroAsset.html#.posterUrl">posterUrl</a></li></ul></li><li><a href="FluroAuth.html">FluroAuth</a><ul class='methods'><li data-type='method'><a href="FluroAuth.html#.addEventListener">addEventListener</a></li><li data-type='method'><a href="FluroAuth.html#.changeAccount">changeAccount</a></li><li data-type='method'><a href="FluroAuth.html#.getCurrentToken">getCurrentToken</a></li><li data-type='method'><a href="FluroAuth.html#.getCurrentUser">getCurrentUser</a></li><li data-type='method'><a href="FluroAuth.html#.login">login</a></li><li data-type='method'><a href="FluroAuth.html#.logout">logout</a></li><li data-type='method'><a href="FluroAuth.html#.refreshAccessToken">refreshAccessToken</a></li><li data-type='method'><a href="FluroAuth.html#.removeAllListeners">removeAllListeners</a></li><li data-type='method'><a href="FluroAuth.html#.removeEventListener">removeEventListener</a></li><li data-type='method'><a href="FluroAuth.html#.sendResetPasswordRequest">sendResetPasswordRequest</a></li><li data-type='method'><a href="FluroAuth.html#.set">set</a></li><li data-type='method'><a href="FluroAuth.html#.signup">signup</a></li></ul></li><li><a href="FluroCache.html">FluroCache</a><ul class='methods'><li data-type='method'><a href="FluroCache.html#.get">get</a></li><li data-type='method'><a href="FluroCache.html#.reset">reset</a></li></ul></li><li><a href="FluroContent.html">FluroContent</a><ul class='methods'><li data-type='method'><a href="FluroContent.html#.external">external</a></li><li data-type='method'><a href="FluroContent.html#.get">get</a></li><li data-type='method'><a href="FluroContent.html#.query">query</a></li><li data-type='method'><a href="FluroContent.html#.retrieve">retrieve</a></li><li data-type='method'><a href="FluroContent.html#.search">search</a></li><li data-type='method'><a href="FluroContent.html#.slug">slug</a></li></ul></li><li><a href="FluroCore.html">FluroCore</a></li><li><a href="FluroDate.html">FluroDate</a><ul class='methods'><li data-type='method'><a href="FluroDate.html#.localDate">localDate</a></li><li data-type='method'><a href="FluroDate.html#.readableEventDate">readableEventDate</a></li></ul></li><li><a href="FluroTypes.html">FluroTypes</a><ul class='methods'><li data-type='method'><a href="FluroTypes.html#.retrieve">retrieve</a></li></ul></li><li><a href="FluroUtils.html">FluroUtils</a><ul class='methods'><li data-type='method'><a href="FluroUtils.html#.arrayIDs">arrayIDs</a></li><li data-type='method'><a href="FluroUtils.html#.comma">comma</a></li><li data-type='method'><a href="FluroUtils.html#.errorMessage">errorMessage</a></li><li data-type='method'><a href="FluroUtils.html#.getStringID">getStringID</a></li><li data-type='method'><a href="FluroUtils.html#.mapParameters">mapParameters</a></li></ul></li></ul><h3>Modules</h3><ul><li><a href="module-fluro.html">fluro</a></li></ul> </nav> <div id="main"> <h1 class="page-title">api/fluro.utils.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>import _ from 'lodash'; /////////////////////////////////////////////////////////////////////////////// /** * @classdesc A static service that provides useful helper functions and tools for other Fluro services * @class * @hideconstructor */ var FluroUtils = {}; /////////////////////////////////////////////////////////////////////////////// /** * A helpful function that can take a keyed object literal and map it to url query string parameters * @alias FluroUtils.mapParameters * @param {Object} parameters The object you want to transalte * @return {String} The query string * @example * //Returns &amp;this=that&amp;hello=world * FluroUtils.mapParameters({"this":"that", "hello":"world"}) */ FluroUtils.mapParameters = function(parameters) { return _.map(parameters, function(v, k) { return encodeURIComponent(k) + '=' + encodeURIComponent(v); }).join('&amp;'); } /////////////////////////////////////////////////////////////////////////////// /** * A helpful class that can take an array of values and return them as a comma seperated * string, If the values are objects, then a property to use as the string representation can be specified * @alias FluroUtils.comma * @param {Array} array The array of values to translate * @param {String} path An optional property key to use for each value * @return {String} The resulting comma seperated string * @example * //Returns 'cat, dog, bird' * FluroUtils.comma(['cat', 'dog', 'bird']); * * //Returns 'cat, dog, bird' * FluroUtils.comma([{title:'cat'}, {title:'dog'}, {title:'bird'}], 'title'); */ FluroUtils.comma = function(array, path) { return _.chain(array) .compact() .map(function(item) { if(path) { return _.get(item, path); } return item; }) .value() .join(', '); } /////////////////////////////////////////////////////////////////////////////// //Helper function to get an id of an object /** * Returns a specified _id for an object * @alias FluroUtils.getStringID * @param {Object} input An object that is or has an _id property * @param {Boolean} asObjectID Whether to convert to a Mongo ObjectId * @return {String} Will return either a string or a Mongo ObjectId * * @example * * //Returns '5cb3d8b3a2219970e6f86927' * FluroUtils.getStringID('5cb3d8b3a2219970e6f86927') * * //Returns true * typeof FluroUtils.getStringID({_id:'5cb3d8b3a2219970e6f86927', title, ...}) == 'string'; * //Returns true * typeof FluroUtils.getStringID({_id:'5cb3d8b3a2219970e6f86927'}, true) == 'object'; */ FluroUtils.getStringID = function(input, asObjectID) { if (!input) { return input; } ///////////////////////////////// var output; if (input._id) { output = String(input._id); } else { output = String(input); } if (!asObjectID) { return output; } return output; // var mongoose = require('mongoose'); // var ObjectId = mongoose.Types.ObjectId; // var isValid = ObjectId.isValid(String(output)); // if(!isValid) { // return; // } // return new ObjectId(output); } /////////////////////////////////////////////////////////////////////////////// /** * Cleans and maps an array of objects to an array of IDs * @alias FluroUtils.arrayIDs * @param {Array} array An array of objects or object ids * @param {Boolean} asObjectID Whether or not to map the ids as Mongo ObjectIds * @return {Array} An array of Ids * * @example * //Returns ['5cb3d8b3a2219970e6f86927', '5cb3d8b3a2219970e6f86927', '5cb3d8b3a2219970e6f86927'] * FluroUtils.arrayIDs([{_id:'5cb3d8b3a2219970e6f86927'}, {_id:'5cb3d8b3a2219970e6f86927'}, null, '5cb3d8b3a2219970e6f86927']) */ FluroUtils.arrayIDs = function(array, asObjectID) { if (!array) { return array; } return _.chain(array) .compact() .map(function(input) { return FluroUtils.getStringID(input, asObjectID); }) .compact() .uniq() .value(); } /////////////////////////////////////////////////////////////////////////////// /** * Helper function for retrieving a human readable error message from server error response objects * @alias FluroUtils.errorMessage * @param {Object} error The error object to translate * @return {String} The resulting human readable error message */ FluroUtils.errorMessage = function(err) { var candidates = [ 'response.data.message', 'response.data', 'message', ] //////////////////////////////////// var message = _.chain(candidates) .map(function(path) { return _.get(err, path); }) .compact() .first() .value(); //////////////////////////////////// if (!message || !message.length) { return String(err); } //////////////////////////////////// return message; } export default FluroUtils; ///////////////////////////////////////////// //Export the event dispatcher export function EventDispatcher() { var listeners = {}; ///////////////////////////////////////////// var dispatcher = {} ///////////////////////////////////////////// //Remove all listeners dispatcher.removeAllListeners = function() { listeners = {}; } ///////////////////////////////////////////// dispatcher.dispatch = function(event, details) { if(listeners[event]) { // console.log('Listeners', event, listeners[event]); //For each listener listeners[event].forEach(function(callback) { //Fire the callback // console.log('Fire listener', event, details); return callback(details); }); } } ///////////////////////////////////////////// dispatcher.addEventListener = function(event, callback) { if(!listeners[event]) { listeners[event] = []; } if(listeners[event].indexOf(callback) == -1) { //Add to the listeners listeners[event].push(callback) } else { //Already listening } } ///////////////////////////////////////////// dispatcher.removeEventListener = function(event, callback) { if(!listeners[event]) { listeners[event] = []; } //Get the index of the listener var index = listeners[event].indexOf(callback); if(index != -1) { //Remove from the listeners listeners[event].splice(index,1); } } ///////////////////////////////////////////// //Wrap the event listener functionality dispatcher.bootstrap = function(service) { if(!service) { // console.log('No service to bootstrap to') return; } service.addEventListener = dispatcher.addEventListener; service.removeEventListener = dispatcher.removeEventListener; service.removeAllListeners = dispatcher.removeAllListeners; } ///////////////////////////////////////////// return dispatcher; }</code></pre> </article> </section> </div> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Apr 24 2019 19:46:45 GMT+1000 (Australian Eastern Standard Time) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme. </footer> <script>prettyPrint();</script> <script src="scripts/polyfill.js"></script> <script src="scripts/linenumber.js"></script> </body> </html>