2015-12-02 10 views
7

Buduję silnik szyny, który wykorzystuje zagraniczne klucze podczas migracji.Warunkowe zależności ruby ​​gem w gemspec

add_foreign_key "theblog_content_nodes", 
        "theblog_content_statuses", column: :content_status_id 

od wersji 4.2 szynach obsługuje kluczy obcych przez siebie, ale zanim użyliśmy foreigner gem za to. Jeśli spróbujemy użyć foreigner z rails 4.2 i nowszym, otrzymamy błąd.

Ponieważ zamierzam obsługiwać szyny począwszy od wersji 4.0.1, w moim gemspec muszę używać zależności warunkowej.

Znalazłem możliwe rozwiązanie here, ale nie mam pojęcia, jak sprawdzić wersję rails w gemspec.

# sidekiq-spy.gemspec 

if RUBY_VERSION >= '2.1' 
    spec.add_development_dependency "curses", "~> 1.0" 
end 

UWAGA:

mam inne tymczasowe rozwiązanie: Właśnie sprawdzić Foreigner dostępność w moich wędrówek. Jeśli jest niedostępna po prostu nie tworzą klucze obce:

if defined?(Foreigner) 
    add_foreign_key "theblog_content_nodes", 
        "theblog_content_statuses", column: :content_status_id 
end 

Ale chciałbym dodać foreigner zależność dla starych wersjach szynach.

+0

Myślałeś dostarczania dwie różne wersje gem dla tego scenariusza? – iltempo

+0

@iltempo, mogę nawet użyć jednej wersji dla obu scenariuszy. Wystarczy dodać, że musimy dodać "gem" obcokrajowca "' do 'Gemfile', jeśli wersja Rails jest mniejsza niż" 4.2 "i chcemy używać kluczy obcych. –

Odpowiedz

2

dostęp do wersji szyn, możemy użyć coś jak poniżej (na podstawie this answer):

require 'rubygems' 

rails_gem = Gem::Specification.select {|z| z.name == "rails"}.max_by {|a| a.version} 
p rails_gem.version.version 
#=> "4.2.5" 
+0

Niestety wydaje się, że nie mamy dostępu do 'Rails' wewnątrz gemspec. Właśnie uzyskałem następujący błąd: 'niezainicjalizowane stałe Rails z /Users/kont/projects/theblog/theblog.gemspec:21:in„bloku w

”' –

+0

Updated odpowiedź użyć 'rubygems' API. Sprawdź, czy to zadziała dla Ciebie. –

+0

Próbowałem tego zarówno w samym silniku, jak i w aplikacji, używając tego silnika. Wygląda na to, że działa poprawnie. Dzięki! –

Powiązane problemy