srs_extension/reqparser.js (61 lines of code) (raw):
// Reference regex: /SRS_[0-9A-Z_]+_\d{2}_\d{3}/g
var getAllReqTags = function (text, prefix, devId) {
if (!text) return;
var regexStr = "";
if (prefix) {
regexStr = prefix;
} else {
regexStr = "SRS_[0-9A-Z_]+_";
}
if (devId) {
regexStr += zeroFill(devId, 2);
} else {
regexStr += "\\d{2}";
}
regexStr += "_\\d{3}";
if (regexStr === "") {
return;
} else {
var regex = new RegExp(regexStr, 'g');
var reqTags = text.match(regex);
return reqTags;
}
};
// from : http://stackoverflow.com/questions/1267283/how-can-i-create-a-zerofilled-value-using-javascript
function zeroFill(number, width) {
width -= number.toString().length;
if (width > 0) {
return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number;
}
return number + ""; // always return a string
}
var getPrefixes = function (text) {
// This will match (prefix as group 1_)(devId_reqId)
// Then we can strip off the dev ID and requirement ID, but we allow numbers in the prefix
var regex = /(SRS_[0-9A-Z_]+_)([0-9]{2}_[0-9]{3})/g;
var prefixes = Array.from(text.matchAll(regex));
var dedupedPrefixes = null;
if (prefixes != null) {
// First strip the dev ID and requirement ID's (first array item in regex match is everything, second is the first group that we want, index 1)
prefixes = prefixes.map(function (item){
return item[1];
});
// Then de-duplicate
dedupedPrefixes = prefixes.filter(function (item, pos, self) {
return self.indexOf(item) == pos;
});
}
return dedupedPrefixes || [];
};
var getNextReq = function (text, prefix, devId) {
var maxId = 0;
var tags = getAllReqTags(text, prefix, devId);
if (tags) {
tags.forEach(function (val) {
var elements = val.split('_');
var number = elements[elements.length - 1];
var id = parseInt(number);
if (id > maxId) {
maxId = id;
}
});
}
var reqTag = prefix + zeroFill(devId, 2) + "_" + zeroFill(maxId + 1, 3);
return reqTag;
};
exports.getPrefixes = getPrefixes;
exports.getNextReq = getNextReq;