metaprogramación de rubíes: el bloque de rendimiento no funciona en un método agregado dinámicamente
-
05-07-2019 - |
Pregunta
Estoy trabajando en extender el marco NotAMock para los métodos de apéndice en rspec, y obteniendo los talones para ceder a un bloque de métodos.
El código en este Gist funciona perfectamente cuando lo codifico por mi cuenta (que se hace para parecerse a los métodos de apéndices de NotAMock).
pero cuando incorporo el código object.instance_eval ... en el marco NotAMock, " block_given? " siempre devuelve falso y nunca puedo hacer que mi rendimiento funcione debido a eso. El método se agregó correctamente, y puedo llamar al método "stubbed" ... pero no reconocerá el bloque que paso al método, de la versión "Notamock stubbed".
Para ver cómo he incorporado este código en el marco de NotAMock, vaya a mi clone de NotAMock y echa un vistazo a " add_hook " Método en los métodos privados.
Sé que es mucho pedir, espero encontrar alguna orientación. Me ha estado volviendo loco todo el día.
Solución 2
Resulta que el problema no está relacionado con el código al que estoy vinculado ... el marco NotAMock está realizando una redefinición del método adicional que está causando mi problema. He reducido el problema a una línea específica de código y estoy trabajando en cómo solucionarlo ahora.
Otros consejos
Ni siquiera estoy seguro de que esto sea posible. Los nuevos Procs ni siquiera reconocen los bloques.
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
Se supone que Ruby 1.9 permite que los bloques tomen & amp; block como parámetros. Pero no sé si eso funcionará o incluso si permitirá los bloqueos condicionales.