Merge pull request #1910 from mrlamroger/add-name-flag-to-create

Fix #1902 - Add --name option to create plugin
This commit is contained in:
Florian Motlik 2016-09-23 18:09:15 +02:00 committed by GitHub
commit e10ff9ee23
2 changed files with 58 additions and 4 deletions

View File

@ -36,6 +36,10 @@ class Create {
usage: 'The path where the service should be created (e.g. --path my-service)',
shortcut: 'p',
},
name: {
usage: 'Name for the service. Overwrites the default name of the created service.',
shortcut: 'n',
},
},
},
};
@ -57,8 +61,9 @@ class Create {
throw new this.serverless.classes.Error(errorMessage);
}
// store the path option for the service if given
// store the custom options for the service if given
const servicePath = this.options.path && this.options.path.length ? this.options.path : null;
const serviceName = this.options.name && this.options.name.length ? this.options.name : null;
// create (if not yet present) and chdir into the directory for the service
if (servicePath) {
@ -78,8 +83,8 @@ class Create {
'plugins', 'create', 'templates', this.options.template), this.serverless.config.servicePath);
// rename the service if the user has provided a path via options
if (servicePath) {
const serviceName = servicePath.split(path.sep).pop();
if (servicePath || serviceName) {
const newServiceName = serviceName || servicePath.split(path.sep).pop();
const serverlessYmlFilePath = path
.join(this.serverless.config.servicePath, 'serverless.yml');
@ -87,7 +92,7 @@ class Create {
.readFileSync(serverlessYmlFilePath).toString();
serverlessYmlFileContent = serverlessYmlFileContent
.replace(/service: .+/, `service: ${serviceName}`);
.replace(/service: .+/, `service: ${newServiceName}`);
fse.writeFileSync(serverlessYmlFilePath, serverlessYmlFileContent);
}

View File

@ -48,6 +48,23 @@ describe('Create', () => {
expect(() => create.create()).to.throw(Error);
});
it('should overwrite the name for the service if user passed name', () => {
const cwd = process.cwd();
fse.mkdirsSync(tmpDir);
process.chdir(tmpDir);
create.options.template = 'aws-nodejs';
create.options.name = 'my_service';
return create.create().then(() =>
create.serverless.yamlParser.parse(
path.join(tmpDir, 'serverless.yml')
).then((obj) => {
expect(obj.service).to.equal('my_service');
process.chdir(cwd);
})
);
});
it('should set servicePath based on cwd', () => {
const cwd = process.cwd();
fse.mkdirsSync(tmpDir);
@ -165,6 +182,7 @@ describe('Create', () => {
process.chdir(tmpDir);
create.options.path = 'my-new-service';
create.options.name = null;
// using the nodejs template (this test is completely be independent from the template)
create.options.template = 'aws-nodejs';
@ -187,5 +205,36 @@ describe('Create', () => {
process.chdir(cwd);
});
});
it('should create a custom renamed service in the directory if using ' +
'the "path" and "name" option', () => {
const cwd = process.cwd();
fse.mkdirsSync(tmpDir);
process.chdir(tmpDir);
create.options.path = 'my-new-service';
create.options.name = 'my-custom-new-service';
// using the nodejs template (this test is completely be independent from the template)
create.options.template = 'aws-nodejs';
return create.create().then(() => {
const serviceDir = path.join(tmpDir, create.options.path);
// check if files are created in the correct directory
expect(create.serverless.utils.fileExistsSync(
path.join(serviceDir, 'serverless.yml'))).to.be.equal(true);
expect(create.serverless.utils.fileExistsSync(
path.join(serviceDir, 'handler.js'))).to.be.equal(true);
// check if the service was renamed
const serverlessYmlfileContent = fse
.readFileSync(path.join(serviceDir, 'serverless.yml')).toString();
expect((/service: my-custom-new-service/).test(serverlessYmlfileContent)).to.equal(true);
process.chdir(cwd);
});
});
});
});