mirror of
https://github.com/serverless/serverless.git
synced 2026-01-18 14:58:43 +00:00
Add compileMethods functionality
This commit is contained in:
parent
d69a4ba711
commit
fe5edf1a2b
@ -7,7 +7,7 @@ const compileRestApi = require('./lib/compileRestApi');
|
||||
const compileDeployment = require('./lib/compileDeployment');
|
||||
const compileStage = require('./lib/compileStage');
|
||||
const compileResources = require('./lib/compileResources');
|
||||
const compileMethod = require('./lib/compileMethod');
|
||||
const compileMethods = require('./lib/compileMethods');
|
||||
const compilePermission = require('./lib/compilePermission');
|
||||
|
||||
class AwsCompileApigEvents {
|
||||
@ -22,7 +22,7 @@ class AwsCompileApigEvents {
|
||||
compileDeployment,
|
||||
compileStage,
|
||||
compileResources,
|
||||
compileMethod,
|
||||
compileMethods,
|
||||
compilePermission
|
||||
);
|
||||
|
||||
@ -33,7 +33,7 @@ class AwsCompileApigEvents {
|
||||
.then(this.compileDeployment)
|
||||
.then(this.compileStage)
|
||||
.then(this.compileResources)
|
||||
.then(this.compileMethod)
|
||||
.then(this.compileMethods)
|
||||
.then(this.compilePermission),
|
||||
};
|
||||
}
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
const BbPromise = require('bluebird');
|
||||
|
||||
module.exports = {
|
||||
compileMethod() {
|
||||
|
||||
return BbPromise.resolve();
|
||||
},
|
||||
};
|
||||
48
lib/plugins/awsCompileApigEvents/lib/compileMethods.js
Normal file
48
lib/plugins/awsCompileApigEvents/lib/compileMethods.js
Normal file
@ -0,0 +1,48 @@
|
||||
'use strict';
|
||||
|
||||
const BbPromise = require('bluebird');
|
||||
const forEach = require('lodash').forEach;
|
||||
const merge = require('lodash').merge;
|
||||
|
||||
module.exports = {
|
||||
compileMethods() {
|
||||
let methodIndex = 0;
|
||||
|
||||
forEach(this.serverless.service.functions, (functionObject, functionName) => {
|
||||
forEach(functionObject.events.aws.http_endpoints, (path, method) => {
|
||||
const resourceId = this.resourceLogicalIds[path];
|
||||
|
||||
const methodTemplate = `
|
||||
{
|
||||
"Type" : "AWS::ApiGateway::Method",
|
||||
"Properties" : {
|
||||
"AuthorizationType" : "NONE",
|
||||
"HttpMethod" : "${method.toUpperCase()}",
|
||||
"MethodResponses" : [
|
||||
{
|
||||
"ResponseModels" : {},
|
||||
"ResponseParameters" : {},
|
||||
"StatusCode" : "200"
|
||||
}
|
||||
],
|
||||
"RequestParameters" : {},
|
||||
"ResourceId" : { "Ref": "${resourceId}" },
|
||||
"RestApiId" : { "Ref": "RestApiApigEvent" }
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const methodObject = {
|
||||
[`${functionName}Method${methodIndex}ApigEvent`]: JSON.parse(methodTemplate),
|
||||
};
|
||||
|
||||
merge(this.serverless.service.resources.aws.Resources,
|
||||
methodObject);
|
||||
|
||||
methodIndex += 1;
|
||||
});
|
||||
});
|
||||
|
||||
return BbPromise.resolve();
|
||||
},
|
||||
};
|
||||
@ -5,3 +5,4 @@ require('./compileRestApi');
|
||||
require('./compileDeployment');
|
||||
require('./compileStage');
|
||||
require('./compileResources');
|
||||
require('./compileMethods');
|
||||
|
||||
85
lib/plugins/awsCompileApigEvents/tests/compileMethods.js
Normal file
85
lib/plugins/awsCompileApigEvents/tests/compileMethods.js
Normal file
@ -0,0 +1,85 @@
|
||||
'use strict';
|
||||
|
||||
const expect = require('chai').expect;
|
||||
const AwsCompileApigEvents = require('../awsCompileApigEvents');
|
||||
const Serverless = require('../../../Serverless');
|
||||
|
||||
describe('#compileMethods()', () => {
|
||||
let serverless;
|
||||
let awsCompileApigEvents;
|
||||
|
||||
const serviceResourcesAwsResourcesObjectMock = {
|
||||
Resources: {
|
||||
firstMethod0ApigEvent: {
|
||||
Type: 'AWS::ApiGateway::Method',
|
||||
Properties: {
|
||||
AuthorizationType: 'NONE',
|
||||
HttpMethod: 'POST',
|
||||
MethodResponses: [
|
||||
{
|
||||
ResponseModels: {},
|
||||
ResponseParameters: {},
|
||||
StatusCode: '200',
|
||||
},
|
||||
],
|
||||
RequestParameters: {},
|
||||
ResourceId: { Ref: 'firstResource0ApigEvent' },
|
||||
RestApiId: { Ref: 'RestApiApigEvent' },
|
||||
},
|
||||
},
|
||||
firstMethod1ApigEvent: {
|
||||
Type: 'AWS::ApiGateway::Method',
|
||||
Properties: {
|
||||
AuthorizationType: 'NONE',
|
||||
HttpMethod: 'GET',
|
||||
MethodResponses: [
|
||||
{
|
||||
ResponseModels: {},
|
||||
ResponseParameters: {},
|
||||
StatusCode: '200',
|
||||
},
|
||||
],
|
||||
RequestParameters: {},
|
||||
ResourceId: { Ref: 'firstResource1ApigEvent' },
|
||||
RestApiId: { Ref: 'RestApiApigEvent' },
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
serverless = new Serverless();
|
||||
serverless.init();
|
||||
serverless.service = {
|
||||
functions: {
|
||||
first: {
|
||||
events: {
|
||||
aws: {
|
||||
http_endpoints: {
|
||||
post: 'users/create',
|
||||
get: 'users/create/list',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
resources: {
|
||||
aws: {
|
||||
Resources: {},
|
||||
},
|
||||
},
|
||||
};
|
||||
awsCompileApigEvents = new AwsCompileApigEvents(serverless);
|
||||
awsCompileApigEvents.resourceLogicalIds = {
|
||||
'users/create': 'firstResource0ApigEvent',
|
||||
'users/create/list': 'firstResource1ApigEvent',
|
||||
};
|
||||
});
|
||||
|
||||
it('should create method resources', () => {
|
||||
awsCompileApigEvents.compileMethods().then(() => {
|
||||
expect(JSON.stringify(serviceResourcesAwsResourcesObjectMock.Resources))
|
||||
.to.equal(JSON.stringify(awsCompileApigEvents.serverless.service.resources.aws.Resources));
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user