-
-
Notifications
You must be signed in to change notification settings - Fork 6.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Ruby] Client: fix base_url when no server_operation_index is defined #15162
Conversation
As discussed in OpenAPITools#7415 (comment), it seems unlikely the code was correct. server_operation_index is a hash table. In Ruby, `hash[key]` will return the value associated with `key`. If key is absent, `nil` is returned. Because that is sometimes undesirable, there is also `hash.fetch(key)`, which raises an error if the key is absent. It also allows you to specify a default to fall back on: `hash.fetch(key, default)` will return `default` if the key is absent. So, since not all users will specify a 'server per operation' (or at least: I'm not), the old code would usually set `index` to the `server_index`, which is initialized to 0. The subsequent `if index == nil` will usually return false (`0 != nil` in Ruby), after which the `server_url` call on line 177 constructs the url based on the `server_operation_variables` and `operation_server_settings`, assuming we are dealing with the case where a server per operation is configured. The case where the url should be constructed from `scheme`, `host`, etc. is only called if either `server_index` is explicitly set to `nil` or the key `operation` is explicitly associated with the value `nil` in the `server_operation_index` hash table, both of which seem inappropriate.
LGTM but I've not tested it locally. Let's give it a try. |
… defined (OpenAPITools#15162)" This reverts commit 2679819.
This commit breaks functionality to allow switching between servers. Specifically, this is useful for fetching from dev/prod. Example usage: openapi: "3.0.3"
paths: Usage: Client.configure do |config| |
The previous version didn't work for anyone outside of your use case, so reverting this change doesn't seem like the best thing for the general good. A fix would be to replace: index = server_operation_index[operation] by index = server_operation_index[operation || server_index] I didn't understand how the |
#16144 has been merged into master. Please pull the latest master to give it a try. (or use the snapshot version) |
@cliffano, @zlx, @autopp
As discussed in #7415 (comment), it seems unlikely the code was correct.
server_operation_index is a hash table. In Ruby,
hash[key]
will return the value associated withkey
. If key is absent,nil
is returned. Because that is sometimes undesirable, there is alsohash.fetch(key)
, which raises an error if the key is absent. It also allows you to specify a default to fall back on:hash.fetch(key, default)
will returndefault
if the key is absent.So, since not all users will specify a 'server per operation' (or at least: I'm not), the old code would usually set
index
to theserver_index
, which is initialized to 0. The subsequentif index == nil
will usually return false (0 != nil
in Ruby), after which theserver_url
call on line 177 constructs the url based on theserver_operation_variables
andoperation_server_settings
, assuming we are dealing with the case where a server per operation is configured. The case where the url should be constructed fromscheme
,host
, etc. is only called if eitherserver_index
is explicitly set tonil
or the keyoperation
is explicitly associated with the valuenil
in theserver_operation_index
hash table, both of which seem inappropriate.PR checklist
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*
.For Windows users, please run the script in Git BASH.
master
(6.3.0) (minor release - breaking changes with fallbacks),7.0.x
(breaking changes without fallbacks)