metaprogrammazione rubino - blocco del rendimento non funzionante con metodo aggiunto dinamicamente

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

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top