all-contributors-cli/lib/generate/index.js

58 lines
1.8 KiB
JavaScript
Raw Normal View History

2016-03-01 22:30:14 +00:00
'use strict';
var _ = require('lodash/fp');
var formatBadge = require('./formatBadge');
2016-03-01 22:30:14 +00:00
var formatContributor = require('./formatContributor');
function injectContentBetween(lines, content, startIndex, endIndex) {
return [].concat(
lines.slice(0, startIndex),
content,
lines.slice(endIndex)
);
}
var injectBetweenTags = _.curry(function(tag, newContent, previousContent) {
var lines = previousContent.split('\n');
var openingTagIndex = _.findIndex(_.startsWith('<!-- ALL-CONTRIBUTORS-' + tag + ':START '), lines);
var closingTagIndex = _.findIndex(_.startsWith('<!-- ALL-CONTRIBUTORS-' + tag + ':END '), lines);
if (openingTagIndex === -1 || closingTagIndex === -1) {
return previousContent;
}
return injectContentBetween(lines, newContent, openingTagIndex + 1, closingTagIndex)
.join('\n');
});
2016-03-01 22:30:14 +00:00
function formatLine(contributors) {
return '| ' + contributors.join(' | ') + ' |';
}
function createColumnLine(options, contributors) {
var nbColumns = Math.min(options.contributorsPerLine, contributors.length);
return _.repeat(nbColumns, '| :---: ') + '|';
}
2016-03-01 22:30:14 +00:00
function generateContributorsList(options, contributors) {
return _.flow(
_.map(function formatEveryContributor(contributor) {
2016-03-01 22:30:14 +00:00
return formatContributor(options, contributor);
}),
_.chunk(options.contributorsPerLine),
_.map(formatLine),
function insertColumns(lines) {
var columnLine = createColumnLine(options, contributors);
return injectContentBetween(lines, columnLine, 1, 1);
},
_.join('\n')
2016-03-01 22:30:14 +00:00
)(contributors);
}
module.exports = function generate(options, contributors, fileContent) {
var contributorsList = generateContributorsList(options, contributors);
var badge = formatBadge(options, contributors);
2016-03-01 22:30:14 +00:00
return _.flow(
injectBetweenTags('LIST', contributorsList),
injectBetweenTags('BADGE', badge)
)(fileContent);
2016-03-01 22:30:14 +00:00
};