2013-07-02 26 views
7

什麼是正確的方式來管理基於Rails版本的寶石中的條件流?正確的方式來測試Rails版本的寶石創作

Rails 4改變了一些東西,所以我需要有條件地基於Rails主要版本是4比3還是之前的版本。

我來最接近的是:

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

難道你不在你的Gemfile中指定你的Rails版本嗎? – Nobita

+0

我正在編寫一個gem,它需要將Rails從2.x版本支持到4.x.不幸的是,Rails 4改變了其中一個核心ActiveSupport組件(實際上已將它分解爲自己的寶石),所以我需要更改Rails 4的Gem行爲(對於2.x版本,它仍然可以正常工作 - 3.x )。 –

+0

我不知道你是否可以做到這一點..我的想法是,一旦你的寶石建成,Rubygems將運行該代碼並創建它的靜態表示... – Nobita

回答

15

滑軌定義常量Rails::VERSION下用於各種補丁級別:MAJORMINORTINYPRE(如果適用)。版本字符串是constructed from these integers,你可以直接使用它們:

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

這些回去to at least Rails 2.0.x所以他們應該是安全的使用您的創業板公司的許可依賴規範。

0

我個人認爲,Rails.version =~ /^4/讀取好得多。

+0

'Rails.version.to_i> = 4'也是一種選擇。 – tadman