2013-07-02 5 views
7

Wie kann der bedingte Datenfluss in einem auf der Rails-Version basierenden Gem verwaltet werden?Korrekte Methode zum Testen der Rails-Version für Gem-Authoring

Rails 4 ändert einige Dinge, so dass ich bedingt auf Rails Hauptversion fließen muss, die 4 vs. 3 oder vorher ist.

Der nächstgelegene ich gekommen ist:

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

Sie geben Ihre Rails-Version nicht in Ihrer Gemfile an? – Nobita

+0

Ich erstelle ein Juwel und muss Rails von Version 2.x bis 4.x unterstützen. Unglücklicherweise hat Rails 4 eine der Kern-ActiveSupport-Komponenten geändert (eigentlich zu einem eigenen Juwel ausgegliedert), daher muss ich das Verhalten des Edelsteins für Rails 4 ändern (es funktioniert immer noch für die Versionen 2.x - 3.x)). –

+0

Ich bin nicht sicher, ob Sie in der Lage sein werden, das zu tun. Mein Denken ist, dass Rubygems, sobald Ihr Juwel gebaut ist, diesen Code ausführen und eine statische Darstellung davon erstellen wird ... – Nobita

Antwort

15

Rails definiert Konstanten unter Rails::VERSION für die verschiedenen Ebenen Patch: MAJOR, MINOR, TINYPRE und (falls zutreffend). Die Versionszeichenfolge ist constructed from these integers, und Sie können sie direkt verwenden:

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

Diese gehen zurück to at least Rails 2.0.x so sollten sie sicher sein für Ihr Juwel der zulässigen Abhängigkeit spec zu verwenden.

0

Ich persönlich denke, Rails.version =~ /^4/ viel besser liest.

+0

'Rails.version.to_i> = 4 'ist auch eine Alternative. – tadman