Bonjour,
On m'a donné un test Rspec et à partir de ce test je dois écrire une classe qui retourne un Hash.
Seulement là je suis étonné de la fin du test.
Si on admet un Hash comme suit:
object = { :name => 'John' , :lastname => 'Doe'}
et que la fin du test ressemble à ça :
expect(object).to be_an_instance_of(Hash)
expect(object.name).not_to be_nil
On est bien d'accord qu'il n'est pas possible de faire
object.name
sur un Hash ?
PS: c'est pour un recrutement, j'ai le test qui est écrit et je dois implémenter la classe.
Tu ne peux pas faire object.name
car ton hash n'a pas de méthode name
. Il faut faire object[:name]
Voici la solution que j'ai trouvé .
J'ai override Hash
class Hash
def method_missing(m, *args, &block)
self[m.to_sym]
end
end
Bien entendu je vous laisse le plaisir de gérer les erreurs si la clef n'exite pas, si la clef est une chaine de caratére ou un symbole, etc...