Skip to content

Commit

Permalink
add DefaultReturns to RouteBuilder emicklei/go-restful-openapi#10
Browse files Browse the repository at this point in the history
  • Loading branch information
Ernest Micklei authored and Ernest Micklei committed Mar 27, 2017
1 parent cf834cf commit 1d2cd46
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 7 deletions.
31 changes: 25 additions & 6 deletions route_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,10 @@ func (b *RouteBuilder) ReturnsError(code int, message string, model interface{})
// The model parameter is optional ; either pass a struct instance or use nil if not applicable.
func (b *RouteBuilder) Returns(code int, message string, model interface{}) *RouteBuilder {
err := ResponseError{
Code: code,
Message: message,
Model: model,
Code: code,
Message: message,
Model: model,
IsDefault: false,
}
// lazy init because there is no NewRouteBuilder (yet)
if b.errorMap == nil {
Expand All @@ -168,6 +169,22 @@ func (b *RouteBuilder) Returns(code int, message string, model interface{}) *Rou
return b
}

// DefaultReturns is a special Returns call that sets the default of the response ; the code is zero.
func (b *RouteBuilder) DefaultReturns(message string, model interface{}) *RouteBuilder {
b.Returns(0, message, model)
// Modify the ResponseError just added/updated
re := b.errorMap[0]
// errorMap is initialized
b.errorMap[0] = ResponseError{
Code: re.Code,
Message: re.Message,
Model: re.Model,
IsDefault: true,
}
return b
}

// Metadata adds or updates a key=value pair to the metadata map.
func (b *RouteBuilder) Metadata(key string, value interface{}) *RouteBuilder {
if b.metadata == nil {
b.metadata = map[string]interface{}{}
Expand All @@ -176,10 +193,12 @@ func (b *RouteBuilder) Metadata(key string, value interface{}) *RouteBuilder {
return b
}

// ResponseError represents a response; not necessarily an error.
type ResponseError struct {
Code int
Message string
Model interface{}
Code int
Message string
Model interface{}
IsDefault bool
}

func (b *RouteBuilder) servicePath(path string) *RouteBuilder {
Expand Down
6 changes: 5 additions & 1 deletion route_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package restful

import (
"testing"
"time"
)

func TestRouteBuilder_PathParameter(t *testing.T) {
Expand Down Expand Up @@ -41,7 +42,7 @@ func TestRouteBuilder(t *testing.T) {
json := "application/json"
b := new(RouteBuilder)
b.To(dummy)
b.Path("/routes").Method("HEAD").Consumes(json).Produces(json).Metadata("test", "test-value")
b.Path("/routes").Method("HEAD").Consumes(json).Produces(json).Metadata("test", "test-value").DefaultReturns("default", time.Now())
r := b.Build()
if r.Path != "/routes" {
t.Error("path invalid")
Expand All @@ -58,6 +59,9 @@ func TestRouteBuilder(t *testing.T) {
if r.Metadata["test"] != "test-value" {
t.Errorf("Metadata not set")
}
if _, ok := r.ResponseErrors[0]; !ok {
t.Fatal("expected default response")
}
}

func TestAnonymousFuncNaming(t *testing.T) {
Expand Down

0 comments on commit 1d2cd46

Please sign in to comment.