2012-06-29 8 views
5

Diciamo che ho la seguente classe:C'è un modo per visualizzare il codice sorgente di un metodo dalla console di Rails?

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

E 'possibile per me di andare nella console e vista di origine in uscita il codice del metodo di fullname nella console in qualche modo? Ad esempio, sembrerebbe ...

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 davvero un modo per visualizzare il codice sorgente? Grazie!

+0

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

risposta

18

È inoltre possibile utilizzare pry (http://pry.github.com/ che è come IRB su steroidi. È possibile fare cose come:

[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, non lo sapeva mai. Eccezionale. – dojosto

2

Non esattamente quello che stai chiedendo, ma questo Railscast potrebbe essere d'aiuto.

Ti insegna un trucco che ti consentirà di aprire il metodo nel tuo editor di testo dalla console di Rails.

UPDATE:

Ho appena realizzato che collegamento è dietro un paywall ... Ecco una sintesi del trucco.

Aggiungi questo al vostro file ~/.irbrc

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

... dove il compagno è il comando CLI per aprire TextMate (ovviamente subl potrebbero essere utilizzati qui per Sublime Text).

Poi nella console semplicemente chiamano

helper.mate(:number_to_currency) 

... dove number_to_currency è il metodo che è fonte che si desidera visualizzare.

BTW, se non lo si è già, è necessario abbonarsi allo Railscast Pro. IMO, non c'è un modo migliore per spendere 9 dollari al mese. E per divulgare, non ho alcuna relazione con quel sito, ma sono un cliente soddisfatto.

+0

l'approccio di leva è più fresca;) – horseyguy

+0

Accetto. La leva è molto più fresca. :) –

Problemi correlati