Refactor GitHub webhooks (#1240)

* Fix a typo.

* Extract similar code to generateEvent function.

* Remove functions to use generateEvent in the switch.

* Refactor tests.
This commit is contained in:
François de Metz
2016-05-23 12:21:34 +02:00
committed by Cameron Sparr
parent 4dcb82bf08
commit d6ceae7005
2 changed files with 52 additions and 375 deletions

View File

@@ -91,193 +91,12 @@ func (gh *GithubWebhooks) eventHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
}
func newCommitComment(data []byte) (Event, error) {
commitCommentStruct := CommitCommentEvent{}
err := json.Unmarshal(data, &commitCommentStruct)
func generateEvent(data []byte, event Event) (Event, error) {
err := json.Unmarshal(data, event)
if err != nil {
return nil, err
}
return commitCommentStruct, nil
}
func newCreate(data []byte) (Event, error) {
createStruct := CreateEvent{}
err := json.Unmarshal(data, &createStruct)
if err != nil {
return nil, err
}
return createStruct, nil
}
func newDelete(data []byte) (Event, error) {
deleteStruct := DeleteEvent{}
err := json.Unmarshal(data, &deleteStruct)
if err != nil {
return nil, err
}
return deleteStruct, nil
}
func newDeployment(data []byte) (Event, error) {
deploymentStruct := DeploymentEvent{}
err := json.Unmarshal(data, &deploymentStruct)
if err != nil {
return nil, err
}
return deploymentStruct, nil
}
func newDeploymentStatus(data []byte) (Event, error) {
deploymentStatusStruct := DeploymentStatusEvent{}
err := json.Unmarshal(data, &deploymentStatusStruct)
if err != nil {
return nil, err
}
return deploymentStatusStruct, nil
}
func newFork(data []byte) (Event, error) {
forkStruct := ForkEvent{}
err := json.Unmarshal(data, &forkStruct)
if err != nil {
return nil, err
}
return forkStruct, nil
}
func newGollum(data []byte) (Event, error) {
gollumStruct := GollumEvent{}
err := json.Unmarshal(data, &gollumStruct)
if err != nil {
return nil, err
}
return gollumStruct, nil
}
func newIssueComment(data []byte) (Event, error) {
issueCommentStruct := IssueCommentEvent{}
err := json.Unmarshal(data, &issueCommentStruct)
if err != nil {
return nil, err
}
return issueCommentStruct, nil
}
func newIssues(data []byte) (Event, error) {
issuesStruct := IssuesEvent{}
err := json.Unmarshal(data, &issuesStruct)
if err != nil {
return nil, err
}
return issuesStruct, nil
}
func newMember(data []byte) (Event, error) {
memberStruct := MemberEvent{}
err := json.Unmarshal(data, &memberStruct)
if err != nil {
return nil, err
}
return memberStruct, nil
}
func newMembership(data []byte) (Event, error) {
membershipStruct := MembershipEvent{}
err := json.Unmarshal(data, &membershipStruct)
if err != nil {
return nil, err
}
return membershipStruct, nil
}
func newPageBuild(data []byte) (Event, error) {
pageBuildEvent := PageBuildEvent{}
err := json.Unmarshal(data, &pageBuildEvent)
if err != nil {
return nil, err
}
return pageBuildEvent, nil
}
func newPublic(data []byte) (Event, error) {
publicEvent := PublicEvent{}
err := json.Unmarshal(data, &publicEvent)
if err != nil {
return nil, err
}
return publicEvent, nil
}
func newPullRequest(data []byte) (Event, error) {
pullRequestStruct := PullRequestEvent{}
err := json.Unmarshal(data, &pullRequestStruct)
if err != nil {
return nil, err
}
return pullRequestStruct, nil
}
func newPullRequestReviewComment(data []byte) (Event, error) {
pullRequestReviewCommentStruct := PullRequestReviewCommentEvent{}
err := json.Unmarshal(data, &pullRequestReviewCommentStruct)
if err != nil {
return nil, err
}
return pullRequestReviewCommentStruct, nil
}
func newPush(data []byte) (Event, error) {
pushStruct := PushEvent{}
err := json.Unmarshal(data, &pushStruct)
if err != nil {
return nil, err
}
return pushStruct, nil
}
func newRelease(data []byte) (Event, error) {
releaseStruct := ReleaseEvent{}
err := json.Unmarshal(data, &releaseStruct)
if err != nil {
return nil, err
}
return releaseStruct, nil
}
func newRepository(data []byte) (Event, error) {
repositoryStruct := RepositoryEvent{}
err := json.Unmarshal(data, &repositoryStruct)
if err != nil {
return nil, err
}
return repositoryStruct, nil
}
func newStatus(data []byte) (Event, error) {
statusStruct := StatusEvent{}
err := json.Unmarshal(data, &statusStruct)
if err != nil {
return nil, err
}
return statusStruct, nil
}
func newTeamAdd(data []byte) (Event, error) {
teamAddStruct := TeamAddEvent{}
err := json.Unmarshal(data, &teamAddStruct)
if err != nil {
return nil, err
}
return teamAddStruct, nil
}
func newWatch(data []byte) (Event, error) {
watchStruct := WatchEvent{}
err := json.Unmarshal(data, &watchStruct)
if err != nil {
return nil, err
}
return watchStruct, nil
return event, nil
}
type newEventError struct {
@@ -288,51 +107,51 @@ func (e *newEventError) Error() string {
return e.s
}
func NewEvent(r []byte, t string) (Event, error) {
log.Printf("New %v event recieved", t)
switch t {
func NewEvent(data []byte, name string) (Event, error) {
log.Printf("New %v event received", name)
switch name {
case "commit_comment":
return newCommitComment(r)
return generateEvent(data, &CommitCommentEvent{})
case "create":
return newCreate(r)
return generateEvent(data, &CreateEvent{})
case "delete":
return newDelete(r)
return generateEvent(data, &DeleteEvent{})
case "deployment":
return newDeployment(r)
return generateEvent(data, &DeploymentEvent{})
case "deployment_status":
return newDeploymentStatus(r)
return generateEvent(data, &DeploymentStatusEvent{})
case "fork":
return newFork(r)
return generateEvent(data, &ForkEvent{})
case "gollum":
return newGollum(r)
return generateEvent(data, &GollumEvent{})
case "issue_comment":
return newIssueComment(r)
return generateEvent(data, &IssueCommentEvent{})
case "issues":
return newIssues(r)
return generateEvent(data, &IssuesEvent{})
case "member":
return newMember(r)
return generateEvent(data, &MemberEvent{})
case "membership":
return newMembership(r)
return generateEvent(data, &MembershipEvent{})
case "page_build":
return newPageBuild(r)
return generateEvent(data, &PageBuildEvent{})
case "public":
return newPublic(r)
return generateEvent(data, &PublicEvent{})
case "pull_request":
return newPullRequest(r)
return generateEvent(data, &PullRequestEvent{})
case "pull_request_review_comment":
return newPullRequestReviewComment(r)
return generateEvent(data, &PullRequestReviewCommentEvent{})
case "push":
return newPush(r)
return generateEvent(data, &PushEvent{})
case "release":
return newRelease(r)
return generateEvent(data, &ReleaseEvent{})
case "repository":
return newRepository(r)
return generateEvent(data, &RepositoryEvent{})
case "status":
return newStatus(r)
return generateEvent(data, &StatusEvent{})
case "team_add":
return newTeamAdd(r)
return generateEvent(data, &TeamAddEvent{})
case "watch":
return newWatch(r)
return generateEvent(data, &WatchEvent{})
}
return nil, &newEventError{"Not a recognized event type"}
}