Skip to content

Commit ed21105

Browse files
authored
[Elm] Fix not sanitizing param name (#20171)
* Add failing example * Sanitize param name * Regenerate fixed sample * Override toParamName instead
1 parent 55f02e9 commit ed21105

File tree

5 files changed

+52
-3
lines changed

5 files changed

+52
-3
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,23 @@ public String toEnumName(CodegenProperty property) {
228228

229229
@Override
230230
public String toVarName(String name) {
231-
final String varName = camelize(name.replaceAll("[^a-zA-Z0-9_]", ""), LOWERCASE_FIRST_LETTER);
231+
// Replace space with _ (underscore) so camelize works as expected
232+
final String varName = camelize(name.replaceAll(" ", "_").replaceAll("[^a-zA-Z0-9_]", ""),
233+
LOWERCASE_FIRST_LETTER);
232234
return isReservedWord(varName) ? escapeReservedWord(name) : varName;
233235
}
234236

237+
@Override
238+
public String toParamName(String name) {
239+
// obtain the name from parameterNameMapping directly if provided
240+
if (parameterNameMapping.containsKey(name)) {
241+
return parameterNameMapping.get(name);
242+
}
243+
244+
// params should be lowerCamelCase
245+
return toVarName(name);
246+
}
247+
235248
@Override
236249
public String toEnumVarName(String value, String datatype) {
237250
String camelized = camelize(value.replace(" ", "_").replace("(", "_").replace(")", "")); // TODO FIXME escape properly
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{^required}}Maybe.map ({{/required}}{{#required}}Just <| {{/required}}{{^isFile}}Http.stringPart {{/isFile}}{{#isFile}}Http.filePart {{/isFile}}"{{paramName}}"{{#isBoolean}}(\val -> if val then "true" else "false"){{/isBoolean}}{{#isDateTime}}Api.Time.dateTimeToString{{/isDateTime}}{{#isDate}}Api.Time.dateToString{{/isDate}}{{#isInteger}}String.fromInt{{/isInteger}}{{#isLong}}String.fromInt{{/isLong}}{{#isNumber}}String.fromFloat{{/isNumber}}{{#isFloat}}String.fromFloat{{/isFloat}}{{#isDouble}}String.fromFloat{{/isDouble}}{{#allowableValues}}Api.Data.stringFrom{{#datatypeWithEnum}}{{datatypeWithEnum}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{dataType}}{{/datatypeWithEnum}}{{/allowableValues}}{{#isUuid}}Uuid.toString{{/isUuid}}{{^required}}){{/required}} {{paramName}}
1+
{{^required}}Maybe.map ({{/required}}{{#required}}Just <| {{/required}}{{^isFile}}Http.stringPart {{/isFile}}{{#isFile}}Http.filePart {{/isFile}}"{{baseName}}"{{#isBoolean}}(\val -> if val then "true" else "false"){{/isBoolean}}{{#isDateTime}}Api.Time.dateTimeToString{{/isDateTime}}{{#isDate}}Api.Time.dateToString{{/isDate}}{{#isInteger}}String.fromInt{{/isInteger}}{{#isLong}}String.fromInt{{/isLong}}{{#isNumber}}String.fromFloat{{/isNumber}}{{#isFloat}}String.fromFloat{{/isFloat}}{{#isDouble}}String.fromFloat{{/isDouble}}{{#allowableValues}}Api.Data.stringFrom{{#datatypeWithEnum}}{{datatypeWithEnum}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{dataType}}{{/datatypeWithEnum}}{{/allowableValues}}{{#isUuid}}Uuid.toString{{/isUuid}}{{^required}}){{/required}} {{paramName}}

modules/openapi-generator/src/main/resources/elm/operation.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import File exposing (File){{/includeFile}}
5656
Api.request
5757
"{{httpMethod}}"
5858
"{{path}}"
59-
[{{#pathParams}} ( "{{paramName}}", {{>paramToString}} {{>paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/pathParams}}]
59+
[{{#pathParams}} ( "{{baseName}}", {{>paramToString}} {{>paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/pathParams}}]
6060
[{{#queryParams}} ( "{{baseName}}", {{#required}}Just <| {{/required}}{{^required}}Maybe.map {{/required}}{{>paramToString}} {{>paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/queryParams}}]
6161
[{{#headerParams}} ( "{{baseName}}", {{#required}}Just <| {{/required}}{{^required}}Maybe.map {{/required}}{{>paramToString}} {{>paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/headerParams}}]
6262
{{#bodyParam}}

modules/openapi-generator/src/test/resources/3_0/elm.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,29 @@ paths:
126126
schema:
127127
type: string
128128
format: uuid
129+
/param-sanitize/{test id}:
130+
post:
131+
responses:
132+
'405':
133+
description: Invalid input
134+
parameters:
135+
- name: "query with spaces"
136+
in: query
137+
schema:
138+
type: string
139+
- name: "test id"
140+
in: path
141+
required: true
142+
schema:
143+
type: string
144+
requestBody:
145+
content:
146+
application/x-www-form-urlencoded:
147+
schema:
148+
type: object
149+
properties:
150+
"name with spaces":
151+
type: string
129152
components:
130153
schemas:
131154
Absent:

samples/openapi3/client/elm/src/Api/Request/Default.elm

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
module Api.Request.Default exposing
1717
( headerPost, HeaderType(..), headerTypeVariants
1818
, maybeGet
19+
, paramSanitizeTestIdPost
1920
, pathStringIntegerEnumerationGet, Enumeration(..), enumerationVariants
2021
, queryGet, Enum(..), enumVariants
2122
, securedPost
@@ -134,6 +135,18 @@ maybeGet =
134135
Api.Data.maybeDecoder
135136

136137

138+
paramSanitizeTestIdPost : String -> Maybe String -> Maybe String -> Api.Request ()
139+
paramSanitizeTestIdPost testId_path queryWithSpaces_query nameWithSpaces =
140+
Api.request
141+
"POST"
142+
"/param-sanitize/{test id}"
143+
[ ( "test id", identity testId_path ) ]
144+
[ ( "query with spaces", Maybe.map identity queryWithSpaces_query ) ]
145+
[]
146+
(Just <| Http.multipartBody <| List.filterMap identity [ Maybe.map (Http.stringPart "name with spaces") nameWithSpaces ])
147+
(Json.Decode.succeed ())
148+
149+
137150
pathStringIntegerEnumerationGet : String -> Int -> Enumeration -> Api.Request ()
138151
pathStringIntegerEnumerationGet string_path integer_path enumeration_path =
139152
Api.request

0 commit comments

Comments
 (0)