|
@@ -24,18 +24,49 @@ exports.warnOn = '*';
|
|
|
|
|
|
// The actual init template.
|
|
|
exports.template = function(grunt, init, done) {
|
|
|
+ var remembered = {};
|
|
|
+ function rememberViaValidator(name) {
|
|
|
+ var old = init.prompts[name].validator || function (line) {
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ init.prompts[name].validator = old.length == 1 ? function (line) {
|
|
|
+ remembered[name] = line;
|
|
|
+ return old.call(this, line);
|
|
|
+ } : function (line, next) {
|
|
|
+ remembered[name] = line;
|
|
|
+ return old.call(this, line, next);
|
|
|
+ }; //apply would not work, .length is used to call it differently.
|
|
|
+ }
|
|
|
+
|
|
|
init.prompts.name.message= 'Name of the Amber application.';
|
|
|
- init.prompts.name.validator= /^[A-Z][A-Za-z0-9]*$/;
|
|
|
+ init.prompts.name.validator= function (line) { return /^[A-Z][A-Za-z0-9]*$/.test(line) };
|
|
|
init.prompts.name.warning= 'Must be a valid class name: only alphanumeric and starting with an uppercase letter!';
|
|
|
+ rememberViaValidator('author_email');
|
|
|
+ rememberViaValidator('repository');
|
|
|
+ rememberViaValidator('name');
|
|
|
|
|
|
init.process({type: 'amber'}, [
|
|
|
// Prompt for these values.
|
|
|
init.prompt('name', 'AmberApplication'),
|
|
|
init.prompt('title'),
|
|
|
init.prompt('description', 'Amber Application.'),
|
|
|
+ init.prompt('author_name'),
|
|
|
+ init.prompt('author_email'),
|
|
|
+ init.prompt('version'),
|
|
|
+ init.prompt('repository'),
|
|
|
{
|
|
|
name: 'namespace',
|
|
|
message: 'Namespace of the new Amber package.',
|
|
|
+ altDefault: function(value, data, done) {
|
|
|
+ var mail = remembered.author_email || "none";
|
|
|
+ var repo = remembered.repository || "none";
|
|
|
+ var match = repo.match(/:\/\/([^/]*)\/((.*)\/)?/);
|
|
|
+ var source = match && match[1] ? match[1].split(/\W/).reverse().concat(match[3] ? match[3].split(/\W/) : [])
|
|
|
+ : mail !== "none" ? mail.split(/\W/).reverse()
|
|
|
+ : ('st' + Math.random().toString(32)).split(/\W/);
|
|
|
+ value = (source.join('-') + '-' + remembered.name).toLowerCase();
|
|
|
+ done(null, value);
|
|
|
+ },
|
|
|
validator: /^[a-z][a-z0-9\-]*$/,
|
|
|
warning: 'Only lowercase letters, numbers, and - are allowed in namespaces!'
|
|
|
},
|
|
@@ -44,14 +75,10 @@ exports.template = function(grunt, init, done) {
|
|
|
default: '>=0.12.4',
|
|
|
message: 'Version of Amber to use. Must be >=0.12.4'
|
|
|
},
|
|
|
- init.prompt('version'),
|
|
|
- init.prompt('repository'),
|
|
|
+ init.prompt('author_url'),
|
|
|
init.prompt('homepage'),
|
|
|
init.prompt('bugs'),
|
|
|
- init.prompt('licenses', 'MIT'),
|
|
|
- init.prompt('author_name'),
|
|
|
- init.prompt('author_email'),
|
|
|
- init.prompt('author_url')
|
|
|
+ init.prompt('licenses', 'MIT')
|
|
|
], function(err, props) {
|
|
|
// Files to copy (and process).
|
|
|
var files = init.filesToCopy(props);
|