Skip to content

Commit 522a1a2

Browse files
ccouzensautopp
authored andcommitted
Ruby client: escape path parameters (#3039)
* Ruby client: escape path parameters Path parameters should be escaped when encoded into the path. In the path '/pet/{petId}' let's pretend petId is a string instead of a number. If the user uses "Bobby" as the petId then they correctly get the path '/pet/Bobby'. But if they put 'Bobby/Tables' as the petId then they used to get the path '/pet/Bobby/Tables' which will be interpreted by the server as a different route. Using CGI::Escape they now get '/pet/Bobby%2FTables' which is correct. * Ruby client- regenerate further files Thank you @autopp for noticing I needed to update `samples/openapi3/client/petstore/ruby`. Regenerated by running `bin/openapi3/ruby-client-petstore.sh`. PR #3039
1 parent f667eff commit 522a1a2

File tree

14 files changed

+35
-21
lines changed

14 files changed

+35
-21
lines changed

modules/openapi-generator/src/main/resources/ruby-client/api.mustache

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
=end
44

55
require 'uri'
6+
require 'cgi'
67

78
module {{moduleName}}
89
{{#operations}}
@@ -123,7 +124,7 @@ module {{moduleName}}
123124
{{/hasValidation}}
124125
{{/allParams}}
125126
# resource path
126-
local_var_path = '{{{path}}}'{{#pathParams}}.sub('{' + '{{baseName}}' + '}', {{paramName}}.to_s){{/pathParams}}
127+
local_var_path = '{{{path}}}'{{#pathParams}}.sub('{' + '{{baseName}}' + '}', CGI.escape({{paramName}}.to_s)){{/pathParams}}
127128

128129
# query parameters
129130
query_params = opts[:query_params] || {}

samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class AnotherFakeApi

samples/client/petstore/ruby/lib/petstore/api/fake_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class FakeApi

samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class FakeClassnameTags123Api

samples/client/petstore/ruby/lib/petstore/api/pet_api.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class PetApi
@@ -103,7 +104,7 @@ def delete_pet_with_http_info(pet_id, opts = {})
103104
fail ArgumentError, "Missing the required parameter 'pet_id' when calling PetApi.delete_pet"
104105
end
105106
# resource path
106-
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', pet_id.to_s)
107+
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
107108

108109
# query parameters
109110
query_params = opts[:query_params] || {}
@@ -290,7 +291,7 @@ def get_pet_by_id_with_http_info(pet_id, opts = {})
290291
fail ArgumentError, "Missing the required parameter 'pet_id' when calling PetApi.get_pet_by_id"
291292
end
292293
# resource path
293-
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', pet_id.to_s)
294+
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
294295

295296
# query parameters
296297
query_params = opts[:query_params] || {}
@@ -414,7 +415,7 @@ def update_pet_with_form_with_http_info(pet_id, opts = {})
414415
fail ArgumentError, "Missing the required parameter 'pet_id' when calling PetApi.update_pet_with_form"
415416
end
416417
# resource path
417-
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', pet_id.to_s)
418+
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
418419

419420
# query parameters
420421
query_params = opts[:query_params] || {}
@@ -480,7 +481,7 @@ def upload_file_with_http_info(pet_id, opts = {})
480481
fail ArgumentError, "Missing the required parameter 'pet_id' when calling PetApi.upload_file"
481482
end
482483
# resource path
483-
local_var_path = '/pet/{petId}/uploadImage'.sub('{' + 'petId' + '}', pet_id.to_s)
484+
local_var_path = '/pet/{petId}/uploadImage'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
484485

485486
# query parameters
486487
query_params = opts[:query_params] || {}
@@ -552,7 +553,7 @@ def upload_file_with_required_file_with_http_info(pet_id, required_file, opts =
552553
fail ArgumentError, "Missing the required parameter 'required_file' when calling PetApi.upload_file_with_required_file"
553554
end
554555
# resource path
555-
local_var_path = '/fake/{petId}/uploadImageWithRequiredFile'.sub('{' + 'petId' + '}', pet_id.to_s)
556+
local_var_path = '/fake/{petId}/uploadImageWithRequiredFile'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
556557

557558
# query parameters
558559
query_params = opts[:query_params] || {}

samples/client/petstore/ruby/lib/petstore/api/store_api.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class StoreApi
@@ -43,7 +44,7 @@ def delete_order_with_http_info(order_id, opts = {})
4344
fail ArgumentError, "Missing the required parameter 'order_id' when calling StoreApi.delete_order"
4445
end
4546
# resource path
46-
local_var_path = '/store/order/{order_id}'.sub('{' + 'order_id' + '}', order_id.to_s)
47+
local_var_path = '/store/order/{order_id}'.sub('{' + 'order_id' + '}', CGI.escape(order_id.to_s))
4748

4849
# query parameters
4950
query_params = opts[:query_params] || {}
@@ -167,7 +168,7 @@ def get_order_by_id_with_http_info(order_id, opts = {})
167168
end
168169

169170
# resource path
170-
local_var_path = '/store/order/{order_id}'.sub('{' + 'order_id' + '}', order_id.to_s)
171+
local_var_path = '/store/order/{order_id}'.sub('{' + 'order_id' + '}', CGI.escape(order_id.to_s))
171172

172173
# query parameters
173174
query_params = opts[:query_params] || {}

samples/client/petstore/ruby/lib/petstore/api/user_api.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class UserApi
@@ -219,7 +220,7 @@ def delete_user_with_http_info(username, opts = {})
219220
fail ArgumentError, "Missing the required parameter 'username' when calling UserApi.delete_user"
220221
end
221222
# resource path
222-
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', username.to_s)
223+
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', CGI.escape(username.to_s))
223224

224225
# query parameters
225226
query_params = opts[:query_params] || {}
@@ -277,7 +278,7 @@ def get_user_by_name_with_http_info(username, opts = {})
277278
fail ArgumentError, "Missing the required parameter 'username' when calling UserApi.get_user_by_name"
278279
end
279280
# resource path
280-
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', username.to_s)
281+
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', CGI.escape(username.to_s))
281282

282283
# query parameters
283284
query_params = opts[:query_params] || {}
@@ -465,7 +466,7 @@ def update_user_with_http_info(username, body, opts = {})
465466
fail ArgumentError, "Missing the required parameter 'body' when calling UserApi.update_user"
466467
end
467468
# resource path
468-
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', username.to_s)
469+
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', CGI.escape(username.to_s))
469470

470471
# query parameters
471472
query_params = opts[:query_params] || {}

samples/openapi3/client/petstore/ruby/lib/petstore/api/another_fake_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class AnotherFakeApi

samples/openapi3/client/petstore/ruby/lib/petstore/api/default_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class DefaultApi

samples/openapi3/client/petstore/ruby/lib/petstore/api/fake_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class FakeApi

samples/openapi3/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class FakeClassnameTags123Api

samples/openapi3/client/petstore/ruby/lib/petstore/api/pet_api.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class PetApi
@@ -103,7 +104,7 @@ def delete_pet_with_http_info(pet_id, opts = {})
103104
fail ArgumentError, "Missing the required parameter 'pet_id' when calling PetApi.delete_pet"
104105
end
105106
# resource path
106-
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', pet_id.to_s)
107+
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
107108

108109
# query parameters
109110
query_params = opts[:query_params] || {}
@@ -290,7 +291,7 @@ def get_pet_by_id_with_http_info(pet_id, opts = {})
290291
fail ArgumentError, "Missing the required parameter 'pet_id' when calling PetApi.get_pet_by_id"
291292
end
292293
# resource path
293-
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', pet_id.to_s)
294+
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
294295

295296
# query parameters
296297
query_params = opts[:query_params] || {}
@@ -414,7 +415,7 @@ def update_pet_with_form_with_http_info(pet_id, opts = {})
414415
fail ArgumentError, "Missing the required parameter 'pet_id' when calling PetApi.update_pet_with_form"
415416
end
416417
# resource path
417-
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', pet_id.to_s)
418+
local_var_path = '/pet/{petId}'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
418419

419420
# query parameters
420421
query_params = opts[:query_params] || {}
@@ -480,7 +481,7 @@ def upload_file_with_http_info(pet_id, opts = {})
480481
fail ArgumentError, "Missing the required parameter 'pet_id' when calling PetApi.upload_file"
481482
end
482483
# resource path
483-
local_var_path = '/pet/{petId}/uploadImage'.sub('{' + 'petId' + '}', pet_id.to_s)
484+
local_var_path = '/pet/{petId}/uploadImage'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
484485

485486
# query parameters
486487
query_params = opts[:query_params] || {}
@@ -552,7 +553,7 @@ def upload_file_with_required_file_with_http_info(pet_id, required_file, opts =
552553
fail ArgumentError, "Missing the required parameter 'required_file' when calling PetApi.upload_file_with_required_file"
553554
end
554555
# resource path
555-
local_var_path = '/fake/{petId}/uploadImageWithRequiredFile'.sub('{' + 'petId' + '}', pet_id.to_s)
556+
local_var_path = '/fake/{petId}/uploadImageWithRequiredFile'.sub('{' + 'petId' + '}', CGI.escape(pet_id.to_s))
556557

557558
# query parameters
558559
query_params = opts[:query_params] || {}

samples/openapi3/client/petstore/ruby/lib/petstore/api/store_api.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class StoreApi
@@ -43,7 +44,7 @@ def delete_order_with_http_info(order_id, opts = {})
4344
fail ArgumentError, "Missing the required parameter 'order_id' when calling StoreApi.delete_order"
4445
end
4546
# resource path
46-
local_var_path = '/store/order/{order_id}'.sub('{' + 'order_id' + '}', order_id.to_s)
47+
local_var_path = '/store/order/{order_id}'.sub('{' + 'order_id' + '}', CGI.escape(order_id.to_s))
4748

4849
# query parameters
4950
query_params = opts[:query_params] || {}
@@ -167,7 +168,7 @@ def get_order_by_id_with_http_info(order_id, opts = {})
167168
end
168169

169170
# resource path
170-
local_var_path = '/store/order/{order_id}'.sub('{' + 'order_id' + '}', order_id.to_s)
171+
local_var_path = '/store/order/{order_id}'.sub('{' + 'order_id' + '}', CGI.escape(order_id.to_s))
171172

172173
# query parameters
173174
query_params = opts[:query_params] || {}

samples/openapi3/client/petstore/ruby/lib/petstore/api/user_api.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
=end
1212

1313
require 'uri'
14+
require 'cgi'
1415

1516
module Petstore
1617
class UserApi
@@ -225,7 +226,7 @@ def delete_user_with_http_info(username, opts = {})
225226
fail ArgumentError, "Missing the required parameter 'username' when calling UserApi.delete_user"
226227
end
227228
# resource path
228-
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', username.to_s)
229+
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', CGI.escape(username.to_s))
229230

230231
# query parameters
231232
query_params = opts[:query_params] || {}
@@ -283,7 +284,7 @@ def get_user_by_name_with_http_info(username, opts = {})
283284
fail ArgumentError, "Missing the required parameter 'username' when calling UserApi.get_user_by_name"
284285
end
285286
# resource path
286-
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', username.to_s)
287+
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', CGI.escape(username.to_s))
287288

288289
# query parameters
289290
query_params = opts[:query_params] || {}
@@ -471,7 +472,7 @@ def update_user_with_http_info(username, user, opts = {})
471472
fail ArgumentError, "Missing the required parameter 'user' when calling UserApi.update_user"
472473
end
473474
# resource path
474-
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', username.to_s)
475+
local_var_path = '/user/{username}'.sub('{' + 'username' + '}', CGI.escape(username.to_s))
475476

476477
# query parameters
477478
query_params = opts[:query_params] || {}

0 commit comments

Comments
 (0)