Skip to content

Commit 75ad5f2

Browse files
tchsskRaphaël Simon
authored and
Raphaël Simon
committed
Fix goagen to not call panic when API definition is missing (goadesign#1050)
Fix goagen so it does not panic when API definition is missing.
1 parent 420eb77 commit 75ad5f2

File tree

6 files changed

+41
-8
lines changed

6 files changed

+41
-8
lines changed

goagen/gen_client/generator.go

+18-8
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ func Generate() (files []string, err error) {
7979

8080
// Generate generats the client package and CLI.
8181
func (g *Generator) Generate() (_ []string, err error) {
82+
if g.API == nil {
83+
return nil, fmt.Errorf("missing API definition, make sure design is properly initialized")
84+
}
85+
8286
go utils.Catch(nil, func() { g.Cleanup() })
8387

8488
defer func() {
@@ -87,16 +91,19 @@ func (g *Generator) Generate() (_ []string, err error) {
8791
}
8892
}()
8993

90-
if g.Target == "" {
91-
g.Target = "client"
92-
}
93-
if g.ToolDirName == "" {
94-
g.ToolDirName = "tool"
95-
}
96-
if g.Tool == "" {
97-
g.Tool = defaultToolName(g.API)
94+
firstNonEmpty := func(args ...string) string {
95+
for _, value := range args {
96+
if len(value) > 0 {
97+
return value
98+
}
99+
}
100+
return ""
98101
}
99102

103+
g.Target = firstNonEmpty(g.Target, "client")
104+
g.ToolDirName = firstNonEmpty(g.ToolDirName, "tool")
105+
g.Tool = firstNonEmpty(g.Tool, defaultToolName(g.API))
106+
100107
codegen.Reserved[g.Target] = true
101108

102109
// Setup output directories as needed
@@ -201,6 +208,9 @@ func (g *Generator) Generate() (_ []string, err error) {
201208
}
202209

203210
func defaultToolName(api *design.APIDefinition) string {
211+
if api == nil {
212+
return ""
213+
}
204214
return strings.Replace(strings.ToLower(api.Name), " ", "-", -1) + "-cli"
205215
}
206216

goagen/gen_controller/generator.go

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package gencontroller
22

33
import (
44
"flag"
5+
"fmt"
56
"os"
67

78
"github.com/goadesign/goa/design"
@@ -63,6 +64,10 @@ func Generate() (files []string, err error) {
6364

6465
// Generate produces the skeleton controller service factory.
6566
func (g *Generator) Generate() (_ []string, err error) {
67+
if g.API == nil {
68+
return nil, fmt.Errorf("missing API definition, make sure design is properly initialized")
69+
}
70+
6671
go utils.Catch(nil, func() { g.Cleanup() })
6772

6873
defer func() {

goagen/gen_js/generator.go

+4
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ func Generate() (files []string, err error) {
7070

7171
// Generate produces the skeleton main.
7272
func (g *Generator) Generate() (_ []string, err error) {
73+
if g.API == nil {
74+
return nil, fmt.Errorf("missing API definition, make sure design is properly initialized")
75+
}
76+
7377
go utils.Catch(nil, func() { g.Cleanup() })
7478

7579
defer func() {

goagen/gen_main/generator.go

+4
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ func Generate() (files []string, err error) {
6464

6565
// Generate produces the skeleton main.
6666
func (g *Generator) Generate() (_ []string, err error) {
67+
if g.API == nil {
68+
return nil, fmt.Errorf("missing API definition, make sure design is properly initialized")
69+
}
70+
6771
go utils.Catch(nil, func() { g.Cleanup() })
6872

6973
defer func() {

goagen/gen_schema/generator.go

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package genschema
22

33
import (
44
"flag"
5+
"fmt"
56
"io/ioutil"
67
"os"
78
"path/filepath"
@@ -49,6 +50,10 @@ func Generate() (files []string, err error) {
4950

5051
// Generate produces the skeleton main.
5152
func (g *Generator) Generate() (_ []string, err error) {
53+
if g.API == nil {
54+
return nil, fmt.Errorf("missing API definition, make sure design is properly initialized")
55+
}
56+
5257
go utils.Catch(nil, func() { g.Cleanup() })
5358

5459
defer func() {

goagen/gen_swagger/generator.go

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package genswagger
33
import (
44
"encoding/json"
55
"flag"
6+
"fmt"
67
"io/ioutil"
78
"os"
89
"path/filepath"
@@ -54,6 +55,10 @@ func Generate() (files []string, err error) {
5455

5556
// Generate produces the skeleton main.
5657
func (g *Generator) Generate() (_ []string, err error) {
58+
if g.API == nil {
59+
return nil, fmt.Errorf("missing API definition, make sure design is properly initialized")
60+
}
61+
5762
go utils.Catch(nil, func() { g.Cleanup() })
5863

5964
defer func() {

0 commit comments

Comments
 (0)