-
Notifications
You must be signed in to change notification settings - Fork 3
myriam #2
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
base: main
Are you sure you want to change the base?
myriam #2
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C'est bien, je voyais un résultat plus poussé encore en écrivant l'exercise, mais ce n'est pas une mauvaise solution.
| in [200, Hash, nil] | ||
| Result::Success.new(api[:payload] || api.except(:success)) | ||
| in [200, Hash, true] | ||
| Result::Success.new(api[:payload] || api.except(:success)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Du coup, vu que tu as deux fois le même bloc et pas d'assignation de variables, tu peux dé-dupliquer avec in [200, Hash, nil | true], ou alors, vu que tu as déjà élidé le cas false, juste faire in [200, Hash, _] (même si c'est pas exactement identique, vu que ca va alors prendre toute ce qui ne serait pas booléen, mais c'est anectotique ici).
Tu peux aussi pousser le matching pour te débarasser de success et de-nester le payload si besoin:
in [200, { success:, payload:, **nil }]
Result::Success.new(payload)
in [200, { success:, **payload }]
Result::Success.new(payload)
in [200, { payload:, **nil }]
Result::Success.new(payload)
in [200, { **payload }]
Result::Success.new(payload)Après c'est pousser ça au maximum.
| case [status, api, success] | ||
| in [200, {}, nil] | ||
| Result::Success.new(nil) | ||
| in [200, Hash, false] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Vu que c'est le seul cas ou tu vérifies vraiment success, tu pourrais aussi ne pas le prendre dans ton pattern matching et utiliser un if guard (que j'ai pas présenté par manque de temps):
in [200, Hash] if success == false
| RSpec.describe 'Result for API' do | ||
| def result_for_api(status, api) | ||
| # TODO | ||
| success = api.is_a?(Hash) ? api[:success] : nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je pense en vrai que tu pourrais défaulter sur true et complètement ignorer le cas nil
L'exercise était pensé pour que result_for_api ne soit que un simple case in, mais si on se permet effectivement cette assignation avant, on pourrait aussi directement prendre en compte le status dans la même étape, ce qui donnerait:
success = (api.is_a?(Hash) && api[:success]) || status == 200(Même si à nouveau, ca autoriserait a avoir un status 500 qui a un success: true, mais bon, en dehors des cas d'exemple).
Du coup, ton case in se simplifie pas mal.
No description provided.