diff --git a/cli.js b/cli.js index 7bcf1a0..42451c1 100755 --- a/cli.js +++ b/cli.js @@ -56,7 +56,7 @@ function addContribution(argv) { var username = argv._[1]; var contributions = argv._[2]; // Add or update contributor in the config file - return updateContributors(argv, username, contributions, argv.contributors) + return updateContributors(argv, username, contributions) .then(data => { argv.contributors = data.contributors; return startGeneration(argv) diff --git a/lib/contributors/index.js b/lib/contributors/index.js index af93b15..2cb908d 100644 --- a/lib/contributors/index.js +++ b/lib/contributors/index.js @@ -10,8 +10,8 @@ function isNewContributor(contributorList, username) { return !_.find({login: username}, contributorList); } -module.exports = function addContributor(options, username, contributions, allContributions) { - const answersP = prompt(options, username, contributions, allContributions); +module.exports = function addContributor(options, username, contributions) { + const answersP = prompt(options, username, contributions); const contributorsP = answersP .then(answers => add(options, answers.username, answers.contributions, github)); diff --git a/lib/contributors/prompt.js b/lib/contributors/prompt.js index d82c8b5..07fb3cc 100644 --- a/lib/contributors/prompt.js +++ b/lib/contributors/prompt.js @@ -18,7 +18,7 @@ var contributionChoices = _.flow( }) ); -function getQuestions(options, username, contributions, allContributions) { +function getQuestions(options, username, contributions) { return [{ type: 'input', name: 'username', @@ -31,21 +31,34 @@ function getQuestions(options, username, contributions, allContributions) { when: !contributions, default: function (answers) { // default values for contributions when updating existing users - return allContributions + answers.username = answers.username || username; + return options.contributors .filter((entry) => entry.login.toLowerCase() === answers.username.toLowerCase()) .reduce((memo, entry) => memo.concat(entry.contributions), []); }, choices: contributionChoices(options), - validate: input => input.length ? true : 'Use space to select at least one contribution type.' + validate: function (input, answers) { + answers.username = answers.username || username; + var previousContributions = options.contributors + .filter((entry) => entry.login.toLowerCase() === answers.username.toLowerCase()) + .reduce((memo, entry) => memo.concat(entry.contributions), []); + + if (!input.length) { + return 'Use space to select at least one contribution type.' + } else if (_.isEqual(input, previousContributions)) { + return 'Nothing changed, use space to select contribution types.' + } + return true; + } }]; } -module.exports = function prompt(options, username, contributions, allContributions) { +module.exports = function prompt(options, username, contributions) { var defaults = { username: username, contributions: contributions && contributions.split(',') }; - var questions = getQuestions(options, username, contributions, allContributions); + var questions = getQuestions(options, username, contributions); return inquirer.prompt(questions) .then(_.assign(defaults)); };