diff --git a/codegen/codegen.php b/codegen/codegen.php index d1aed6cf0..9a25eb96e 100755 --- a/codegen/codegen.php +++ b/codegen/codegen.php @@ -18,6 +18,7 @@ error_reporting(E_ALL^E_NOTICE); include(__DIR__ . "/vendor/autoload.php"); function capitalize($name) { + $name = str_replace("_", "/", $name); $names = explode("/", $name); return implode("", array_map("ucfirst", $names)); } @@ -26,7 +27,7 @@ function expose($name) { if ($name == "id") { return "ID"; } - return ucfirst($name); + return capitalize($name); } function array_change_key_case_recursive($arr) { diff --git a/codegen/templates/README.tpl b/codegen/templates/README.tpl index 96aaa04c0..06ee6fbfa 100644 --- a/codegen/templates/README.tpl +++ b/codegen/templates/README.tpl @@ -3,6 +3,13 @@ {api.description} +| Method | Endpoint | Purpose | +| ------ | -------- | ------- | +{foreach $api.apis as $name => $call} +| `{call.method}` | `{api.path}{call.path}` | {call.title} | +{/foreach} + + {foreach $api.apis as $name => $call} ## {call.title} @@ -28,4 +35,6 @@ {/foreach} +--- + {/foreach} \ No newline at end of file diff --git a/codegen/templates/http_.tpl b/codegen/templates/http_.tpl index c02cbe3b6..5faf6281d 100644 --- a/codegen/templates/http_.tpl +++ b/codegen/templates/http_.tpl @@ -2,21 +2,25 @@ package {package} import ( "context" - "github.com/crusttech/crust/{project}/rest/request" + "github.com/pkg/errors" + + "github.com/crusttech/crust/{project}/rest/request" ) var _ = errors.Wrap -type {name} struct {} +type {name|expose} struct { + // xxx service.XXXService +} -func ({name}) New() *{name} { - return &{name}{ldelim}{rdelim} +func ({name|expose}) New() *{name|expose} { + return &{name|expose}{ldelim}{rdelim} } {foreach $calls as $call} -func (ctrl *{name}) {call.name|capitalize}(ctx context.Context, r *request.{name|ucfirst}{call.name|capitalize}) (interface{}, error) { - return nil, errors.New("Not implemented: {name}.{call.name}") +func (ctrl *{name|expose}) {call.name|capitalize}(ctx context.Context, r *request.{name|expose}{call.name|capitalize}) (interface{}, error) { + return nil, errors.New("Not implemented: {name|expose}.{call.name}") } {/foreach} diff --git a/codegen/templates/http_handlers.tpl b/codegen/templates/http_handlers.tpl index 871b7013a..117b7567e 100644 --- a/codegen/templates/http_handlers.tpl +++ b/codegen/templates/http_handlers.tpl @@ -9,8 +9,8 @@ import ( ) {foreach $calls as $call} -func ({self}h *{name}Handlers) {call.name|capitalize}(w http.ResponseWriter, r *http.Request) { +func ({self}h *{name|expose}Handlers) {call.name|capitalize}(w http.ResponseWriter, r *http.Request) { params := {name|capitalize}{call.name|capitalize}Request{}.new() - resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return {self}h.{name}.{call.name|capitalize}(r.Context(), params) }) + resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return {self}h.{name|expose}.{call.name|capitalize}(r.Context(), params) }) } {/foreach} diff --git a/codegen/templates/http_handlers_inline.tpl b/codegen/templates/http_handlers_inline.tpl index 9b79b8d42..4c7077ddd 100644 --- a/codegen/templates/http_handlers_inline.tpl +++ b/codegen/templates/http_handlers_inline.tpl @@ -3,31 +3,32 @@ package {package} {load warning.tpl} import ( - "net/http" "context" - "github.com/go-chi/chi" + "net/http" + + "github.com/go-chi/chi" "github.com/titpetric/factory/resputil" "github.com/crusttech/crust/{project}/rest/request" ) // Internal API interface -type {name}API interface { +type {name|expose}API interface { {foreach $calls as $call} {call.name|capitalize}(context.Context, *request.{name|expose}{call.name|capitalize}) (interface{}, error) {/foreach} } // HTTP API interface -type {name} struct { +type {name|expose} struct { {foreach $calls as $call} {call.name|capitalize} func(http.ResponseWriter, *http.Request) {/foreach} } -func New{name}({self}h {name}API) *{name} { - return &{name}{ldelim}{newline} +func New{name|expose}({self}h {name|expose}API) *{name|expose} { + return &{name|expose}{ldelim}{newline} {foreach $calls as $call} {call.name|capitalize}: func(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() @@ -40,13 +41,11 @@ func New{name}({self}h {name}API) *{name} { {rdelim} } -func ({self}h *{name})MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) { +func ({self}h *{name|expose})MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) { r.Group(func (r chi.Router) { r.Use(middlewares...) - r.Route("{api.path}", func(r chi.Router) { {foreach $api.apis as $call} - r.{eval echo capitalize(strtolower($call.method))}("{call.path}", {self}h.{call.name|capitalize}) + r.{eval echo capitalize(strtolower($call.method))}("{api.path}{call.path}", {self}h.{call.name|capitalize}) {/foreach} - }) }) } diff --git a/codegen/templates/http_request.tpl b/codegen/templates/http_request.tpl index 0ef30b8b0..d6a8bfc43 100644 --- a/codegen/templates/http_request.tpl +++ b/codegen/templates/http_request.tpl @@ -4,13 +4,14 @@ package {package} import ( "net/http" + "github.com/go-chi/chi" ) var _ = chi.URLParam {foreach $calls as $call} -// {name} {call.name} request parameters +// {name|expose} {call.name} request parameters type {name|expose}{call.name|capitalize}Request struct { {foreach $call.parameters as $params} {foreach $params as $method => $param} diff --git a/codegen/templates/http_request_inline.tpl b/codegen/templates/http_request_inline.tpl index c670a7365..0e64f21de 100644 --- a/codegen/templates/http_request_inline.tpl +++ b/codegen/templates/http_request_inline.tpl @@ -4,10 +4,11 @@ package {package} import ( "io" + "strings" + "net/http" "encoding/json" "mime/multipart" - "strings" "github.com/go-chi/chi" "github.com/pkg/errors" @@ -20,7 +21,7 @@ var _ = chi.URLParam var _ = multipart.FileHeader{} {foreach $calls as $call} -// {name} {call.name} request parameters +// {name|expose} {call.name} request parameters type {name|expose}{call.name|capitalize} struct { {foreach $call.parameters as $params} {foreach $params as $method => $param} @@ -78,7 +79,7 @@ func ({self}Req *{name|expose}{call.name|capitalize}) Fill(r *http.Request) (err return err } {else} - {self}Req.{param.name|expose} = {if ($param.type !== "string")}{$parsers[$param.type]}(val){else}val{/if}{EOL} + {self}Req.{param.name|expose} = {if ($param.type !== "string")}{if isset($parsers[$param.type])}{$parsers[$param.type]}{else}{$param.type}{/if}(val){else}val{/if}{EOL} {/if} }{/if} {/foreach} diff --git a/codegen/templates/http_routes.tpl b/codegen/templates/http_routes.tpl index 1fe19fecc..963f6e3eb 100644 --- a/codegen/templates/http_routes.tpl +++ b/codegen/templates/http_routes.tpl @@ -3,11 +3,12 @@ package {package} {load warning.tpl} import ( - "github.com/go-chi/chi" "net/http" + + "github.com/go-chi/chi" ) -func ({self}h *{name}Handlers)MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) { +func ({self}h *{name|expose}Handlers)MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) { r.Group(func (r chi.Router) { r.Use(middlewares...) r.Route("{api.path}", func(r chi.Router) {