metaprogrammazione rubino - blocco del rendimento non funzionante con metodo aggiunto dinamicamente
-
05-07-2019 - |
Domanda
Sto lavorando per estendere il NotAMock per i metodi di stubbing in rspec e fare in modo che gli stub cedano a un blocco di metodi.
Il codice in questo Gist funziona perfettamente quando lo codifico da solo (che è stato creato per assomigliare al modo in cui NotAMock blocca i metodi).
ma quando incorporo il codice object.instance_eval ... nel framework NotAMock, il " block_given? " restituisce sempre false e non riesco mai a far funzionare la mia resa per questo. Il metodo viene aggiunto correttamente e posso chiamare il metodo stubbed ... ma non riconoscerà il blocco che passo al metodo, dalla versione stubbed di NotAMock.
Per vedere come ho incorporato questo codice nel framework NotAMock, vai a my clone di NotAMock e controlla " add_hook " metodo nei metodi privati.
So che è un po 'troppo da chiedere ... spero di trovare qualche consiglio. mi ha fatto impazzire tutto il giorno.
Soluzione 2
Si scopre che il problema non è correlato al codice a cui mi sono collegato ... il framework NotAMock sta eseguendo una ridefinizione del metodo aggiuntiva che sta causando il mio problema. Ho ridotto il problema a una specifica riga di codice e sto studiando come risolverlo ora.
Altri suggerimenti
Non sono nemmeno sicuro che sia possibile. I nuovi proc non riconoscono nemmeno i blocchi.
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
Si suppone che Ruby 1.9 consenta ai blocchi di prendere il blocco & amp; come parametri. Ma non so se funzionerà o anche se consentirà blocchi condizionali.