2012-06-29 42 views
5

Digamos que tengo la clase siguiente:¿Hay alguna manera de ver el código fuente de un método desde la consola de Rails?

class User < ActiveRecord::Base 
    def fullname 
    "#{self.first_name} #{self.last_name}" 
    end 
end 

¿Es posible para mí entrar en la consola y ver la salida de código fuente del método de nombre completo en la consola de alguna manera? Al igual, se vería como ...

irb(main):010:0> omg_console_you_are_awesome_show_source(User.fullname) 
[Fri Jun 29 14:11:31 -0400 2012] => def fullname 
[Fri Jun 29 14:11:31 -0400 2012] => "#{self.first_name} #{self.last_name}" 
[Fri Jun 29 14:11:31 -0400 2012] => end 

¿O realmente alguna forma de ver el código fuente? ¡Gracias!

+0

https://github.com/banister/method_source – carlosvini

Respuesta

18

También puede usar pry (http://pry.github.com/) que es como IRB con esteroides. Puede hacer cosas como:

[1] pry(main)> show-source Array#each 

From: array.c in Ruby Core (C Method): 
Number of lines: 11 
Owner: Array 
Visibility: public 

VALUE 
rb_ary_each(VALUE ary) 
{ 
    long i; 

    RETURN_ENUMERATOR(ary, 0, 0); 
    for (i=0; i<RARRAY_LEN(ary); i++) { 
    rb_yield(RARRAY_PTR(ary)[i]); 
    } 
    return ary; 
} 
[2] pry(main)> show-doc Array#each 

From: array.c in Ruby Core (C Method): 
Number of lines: 11 
Owner: Array 
Visibility: public 
Signature: each() 

Calls block once for each element in self, passing that 
element as a parameter. 

If no block is given, an enumerator is returned instead. 

    a = [ "a", "b", "c" ] 
    a.each {|x| print x, " -- " } 

produces: 

    a -- b -- c -- 
+0

Woah, nunca lo supo. Increíble. – dojosto

2

No es exactamente lo que está preguntando, pero este Railscast podría ayudar.

Te enseña un truco que te permitirá abrir el método en tu editor de texto desde la consola de Rails.

ACTUALIZACIÓN:

Me acabo de dar cuenta que enlazan está detrás de un muro de pago ... He aquí un resumen del truco.

añadir esto a su archivo ~/.irbrc

class Object 
    def mate(method_name) 
    file, line = method(method_name).source_location 
    `mate '#{file}' -l #{line}` 
    end 
end 

... donde el mate es el comando CLI para abrir TextMate (de subl supuesto podría ser utilizado aquí para Sublime Text).

Luego, en la consola simplemente llaman

helper.mate(:number_to_currency) 

... donde number_to_currency es el método que es la fuente que desea ver.

Por cierto, si no lo hace ya, debe suscribirse a Railscast Pro. IMO, no hay una mejor manera de gastar 9 dólares por mes. Y para divulgar, no tengo ninguna relación con ese sitio aparte de ser un cliente satisfecho.

+0

el enfoque de palanca es más fresco;) – horseyguy

+0

de acuerdo. Pry es mucho más genial. :) –

Cuestiones relacionadas