2013-07-02 11 views
7

Qual è il modo corretto di gestire il flusso condizionale in una gemma basata sulla versione di Rails?Modo corretto per testare la versione di Rails per la creazione gemma

Rails 4 modifica alcune cose, quindi ho bisogno di flusso condizionale in base alla versione principale di Rails 4 contro 3 o precedente.

Il più vicino Sono venuto a dire:

if Rails.version.split(".").first.to_i < 4 
    # Do the Rails 4 thing 
else 
    # Do it the old way 
end 
+0

Non hai specificato la versione di Rails nel tuo Gemfile? – Nobita

+0

Sto creando una gemma e ha bisogno di supportare Rails dalla versione 2.x alla 4.x. Sfortunatamente, Rails 4 ha cambiato uno dei componenti di base di ActiveSupport (fattorizzato in realtà in una gemma, in realtà), quindi ho bisogno di cambiare il comportamento della gemma per Rails 4 (funziona ancora bene per le versioni 2.x - 3.x). –

+0

Non sono sicuro che tu sia in grado di farlo. Penso che una volta che il tuo gioiello sarà stato creato, Rubygems eseguirà quel codice e ne creerà una rappresentazione statica ... – Nobita

risposta

15

Rotaie definisce costanti sotto Rails::VERSION per i vari livelli di patch: MAJOR, MINOR, TINY e PRE (se applicabile). La stringa di versione è constructed from these integers, e si possono usare direttamente:

if Rails::VERSION::MAJOR >= 4 
    # Do the new thing 
else 
    # Do it the old way 
end 

Questi risalgono to at least Rails 2.0.x in modo che dovrebbe essere sicuro da utilizzare per specifiche dipendenza consentito del vostro gioiello.

0

Personalmente, penso che Rails.version =~ /^4/ legge molto meglio.

+0

'Rails.version.to_i> = 4' è anche un'alternativa. – tadman

Problemi correlati