From cbce3c1b0832b13c8ab6fae664eeb79293df5c41 Mon Sep 17 00:00:00 2001 From: muxator Date: Wed, 22 Aug 2018 00:32:46 +0200 Subject: [PATCH] AbsolutePaths: written utility function popIfEndsWith() It will be necessary in the next commit to evaluate the Etherpad base install path. --- src/node/utils/AbsolutePaths.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/node/utils/AbsolutePaths.js b/src/node/utils/AbsolutePaths.js index 34751304f..2736599b6 100644 --- a/src/node/utils/AbsolutePaths.js +++ b/src/node/utils/AbsolutePaths.js @@ -19,5 +19,33 @@ */ var log4js = require('log4js'); +var _ = require('underscore'); var absPathLogger = log4js.getLogger('AbsolutePaths'); + +/** + * If stringArray's last elements are exactly equal to lastDesiredElements, + * returns a copy in which those last elements are popped, or false otherwise. + * + * @param {string[]} stringArray - The input array. + * @param {string[]} lastDesiredElements - The elements to remove from the end + * of the input array. + * @return {string[]|boolean} The shortened array, or false if there was no + * overlap. + */ +var popIfEndsWith = function(stringArray, lastDesiredElements) { + if (stringArray.length <= lastDesiredElements.length) { + absPathLogger.debug(`In order to pop "${lastDesiredElements.join(path.sep)}" from "${stringArray.join(path.sep)}", it should contain at least ${lastDesiredElements.length + 1 } elements`); + + return false; + } + + const lastElementsFound = _.last(stringArray, lastDesiredElements.length); + + if (_.isEqual(lastElementsFound, lastDesiredElements)) { + return _.initial(stringArray, lastDesiredElements.length); + } + + absPathLogger.debug(`${stringArray.join(path.sep)} does not end with "${lastDesiredElements.join(path.sep)}"`); + return false; +};