2014-05-15 9 views
9

Secondo questa article, possiamo testare intorno al nostro codice di gioiello con l'aggiunta di quelle linee al nostro rakefile:Rubino - creare gemma: ricaricare console con contenuti aggiornati gemma

task :console do 
    require 'irb' 
    require 'irb/completion' 
    require 'my_gem' # You know what to do. 
    ARGV.clear 
    IRB.start 
end 

Funziona davvero bene, solo che ogni volta che un il cambiamento è fatto per la gemma, ho bisogno di exit e rieseguire rake console per ottenere il codice aggiornato. Non è davvero conveniente come uno strumento di creazione/debug ...

C'è un modo per scrivere un metodo personalizzato che possa agire come il fantastico metodo reload! da Rails?

Uno script bash non funzionerà come il primo comando è nella console Ruby, e preferirei avere una soluzione al 100% rubino.

Grazie!

+1

'load 'any_file_that_was_changed.rb'' –

risposta

10

È possibile utilizzare il $LOADED_FEATURES globale per trovare i componenti del gioiello e ricaricare usando il comando load (usando require non funziona, come si salta gli elementi che Ruby ha già trasformati):

task :console do 
    require 'irb' 
    require 'irb/completion' 
    require 'my_gem' # You know what to do. 

    def reload! 
    # Change 'my_gem' here too: 
    files = $LOADED_FEATURES.select { |feat| feat =~ /\/my_gem\// } 
    files.each { |file| load file } 
    end 

    ARGV.clear 
    IRB.start 
end 

Nota che questo non funzionerà se stai scrivendo estensioni native, dovrai escluderle e vorresti un passo di compilazione e uscire/ricominciare comunque se cambiano.

+0

Bellissimo grazie! –

+0

Aggiunta una variabile per ottenere il nome della gemma da 'my_gem.gemspec':' @gemname = Dir ["# {Dir.pwd}/*. Gemspec"]. First.split ('/'). Last.sub (' .gemspec ',' ') ' –

Problemi correlati