Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conditional ruby gem dependencies within a gemspec

I'm building a rails engine which uses foreign keys in migrations.

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

From the version 4.2 rails supports foreign keys by itself but before we used foreigner gem for this. If we try to use foreigner with rails 4.2 and newer we get an error.

So since I'm going to support rails starting from 4.0.1 I have to use conditional dependency in my gemspec.

I found possible solution here but I have no idea how to check rails version in the gemspec.

# sidekiq-spy.gemspec

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

NOTE:

I have another temporary solution: I just check Foreigner availability in my migrations. If it is unavailable I just don't create foreign keys:

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

But I'd like to add foreigner dependency for old rails versions.

like image 555
Nickolay Kondratenko Avatar asked Dec 02 '15 11:12

Nickolay Kondratenko


1 Answers

To access rails version, we can use something like below (based on 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"
like image 79
Wand Maker Avatar answered Oct 08 '22 01:10

Wand Maker