Skip to content

Conversation

@MyriamManda
Copy link

No description provided.

Copy link
Owner

@adaedra adaedra left a 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.

Comment on lines +14 to +17
in [200, Hash, nil]
Result::Success.new(api[:payload] || api.except(:success))
in [200, Hash, true]
Result::Success.new(api[:payload] || api.except(:success))
Copy link
Owner

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]
Copy link
Owner

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
Copy link
Owner

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants