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.

2 réponses


Grafikart
Réponse acceptée

Tu ne peux pas faire object.name car ton hash n'a pas de méthode name. Il faut faire object[:name]

WilliamB17
Auteur
Réponse acceptée

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...