是否有可能增加一个宝石依赖只有当人是使用红宝石的某个版本?
背景:我工作的一个项目的叉子 ,使用测试::单位:: Autorunner等。 他们在红宝石1.8标准库的一部分,但不是标准库的一部分,1.9.1,是不是在“测试单位”的宝石。 我想补充的依赖,指出如果有人使用Ruby 1.9.1或更高版本,安装了“测试单位”的宝石,但如果他们使用的是1.8或更早版本,他们不需要安装任何东西。
是否有可能增加一个宝石依赖只有当人是使用红宝石的某个版本?
背景:我工作的一个项目的叉子 ,使用测试::单位:: Autorunner等。 他们在红宝石1.8标准库的一部分,但不是标准库的一部分,1.9.1,是不是在“测试单位”的宝石。 我想补充的依赖,指出如果有人使用Ruby 1.9.1或更高版本,安装了“测试单位”的宝石,但如果他们使用的是1.8或更早版本,他们不需要安装任何东西。
如果你看一下对add_dependency gemspec文档 ,没有一个红宝石版本的选项。 也许你可以使用post_install_message属性来告诉用户,如果他们使用Ruby 1.9的安装宝石。
创业板不支持有条件的依赖(除创业板生成器环境之上-如提到的),并且捆绑器不解决这个一个可行的选择要么-见https://github.com/carlhuda/bundler/issues/1281
我这样做确切的事情的一个项目。 诀窍是添加脚本作为一个扩展,它随后会在用户的计算机上安装的时间执行。
以下是代码片段和链接到我们的github上:
首先,当gemspec(我们实际上使用的Rakefile生成它,但结果最终是相同的) 源
# This file *needs* to be named this, there are other files
# for other extension processors
s.extensions << 'ext/mkrf_conf.rb'
然后将相关线路在mkrf_conf.rb 源
require 'rubygems/dependency_installer.rb'
inst = Gem::DependencyInstaller.new
inst.install "test-unit" if RUBY_VERSION > "1.9"
干草...我是怎样的一个红宝石新手......如果这是做到这一点的最好办法。
任何方式...我希望我能做到这一点只用红宝石....但是u可以使用操作系统的shell来做到这一点,在你的程序的安装程序使用此,只是执行(用于基于Linux操作系统的工作原理):
$ruby --version
:(U能够执行从红宝石安装程序文件,就像ruby --version
根据产出和投入的可能性,如果是1.9.1添加一个额外的行执行):
$ sudo gem install gem_name
否则,就让它是。
检出有些教程在这里: http://wiki.github.com/rdp/ruby_tutorials_core/gem
它显示了如何安装不同的版本取决于什么版本的红宝石installee使用依赖。
(简短的回答 - 这是不容易,因为它应该是)
你不能。 你需要建立两种宝石,一个用
spec.required_ruby_version = '~> 1.8.6'
和一个用
spec.required_ruby_version = '~> 1.9.1'
spec.add_dependency 'test-unit', '~> 2.0.5'
Gemspecs只是Ruby文件,所以你可以在里面都可以执行任意Ruby代码,那么:
spec.add_dependency = 'test-unit', '>= 2.0' if RUBY_VERSION =~ '1.9'
编辑:规格只有建设者的机器上运行。