métaprogrammation ruby ??- le bloc de rendement ne fonctionne pas selon la méthode de l'ajout dynamique

StackOverflow https://stackoverflow.com/questions/1604776

Question

Je travaille sur l'extension du cadre NotAMock pour les méthodes de stubbing dans rspec, et obtenir les stubs à céder à un bloc de méthodes.

Le le code de ce Gist fonctionne parfaitement lorsque je le code. seul (ce qui est fait pour ressembler à la méthode des stubs de NotAMock).

mais lorsque j'intègre le code object.instance_eval ... dans le framework NotAMock, l'option "block_given?" retourne toujours faux et je ne peux jamais obtenir mon rendement au travail à cause de cela. La méthode est ajoutée correctement et je peux appeler la méthode stubbed ... mais elle ne reconnaîtra pas le bloc que je passe à la méthode, à partir de la version NotAMock stubbed.

Pour savoir comment j'ai intégré ce code dans le cadre NotAMock, accédez à my clone de NotAMock et consultez le " add_hook " méthode dans les méthodes privées.

Je sais que c'est un peu trop demander ... j'espère trouver des conseils. ça m'a rendu fou toute la journée.

Était-ce utile?

La solution 2

Il se trouve que le problème n’est pas lié au code auquel je suis lié ... le framework NotAMock effectue une redéfinition de méthode supplémentaire qui cause mon problème. J'ai limité le problème à une ligne de code spécifique et je cherche actuellement un moyen de résoudre le problème.

Autres conseils

Je ne suis même pas sûr que ce soit possible. Les nouveaux procs ne reconnaissent même pas les blocs.

proc = Proc.new do
  if block_given?
    yield
  else
    puts "Not in a block"
  end
end

proc.call { puts "In a block"} # => puts Not in a block

Ruby 1.9 est censé permettre aux blocs de prendre et bloquer en tant que paramètres. Mais je ne sais pas si cela fonctionnera ou même si cela autorisera les blocs conditionnels.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top