Imprimiendo el código fuente de un bloque Ruby

Tengo un método que toma un bloque.

Obviamente, no sé qué se va a transmitir y por razones extrañas en las que no voy a entrar aquí, quiero imprimir el contenido del bloque.

¿Hay alguna forma de hacer esto?

Puedes hacer esto con Ruby2Ruby que implementa un método to_ruby.

require 'rubygems' require 'parse_tree' require 'parse_tree_extensions' require 'ruby2ruby' def meth &block puts block.to_ruby end meth { some code } 

saldrá:

 "proc { some(code) }" 

También me gustaría ver esta increíble charla de Chris Wanstrath de Github http://goruco2008.confreaks.com/03_wanstrath.html Muestra algunos ejemplos interesantes de uso de ruby2ruby y parsetree.

Sobre la base de la respuesta de Evangenieur, aquí está la respuesta de Corban si tuvo Ruby 1.9:

 # Works with Ruby 1.9 require 'sourcify' def meth &block # Note it's to_source, not to_ruby puts block.to_source end meth { some code } 

Mi compañía usa esto para mostrar el código de Ruby usado para hacer cálculos de carbono … usamos ParseTree con Ruby 1.8 y ahora sourcify con Ruby 1.9 .

En Ruby 1.9, puedes probar esta gem que extrae el código del archivo fuente.

https://github.com/ngty/sourcify

En Ruby 1.9+ (probado con 2.1.2), puede usar https://github.com/banister/method_source

Imprima la fuente a través del block#source :

 #! /usr/bin/ruby require 'rubygems' require 'method_source' def wait &block puts "Running the following code: #{block.source}" puts "Result: #{yield}" puts "Done" end def run! x = 6 wait { x == 5 } wait { x == 6 } end run! 

Tenga en cuenta que para que se lea la fuente, debe usar un archivo y ejecutar el archivo (al probarlo desde irb se generará el siguiente error: MethodSource::SourceNotFoundError: Could not load source for : No such file or directory @ rb_sysopen - (irb)