我正在处理具有多个最低版本的gem(它将在Rails上使用不同的主要版本,但出于安全性和其他原因,它不应该用于较低的次要版本级别)。我希望它至少需要(例如):
Rails 3.2.19
Rails 4.0.8
Rails 4.1.4
我可以从RubyGems Guides看到我可以使用twiddle-wakka和Greater-Than-Or-Equal-To来获取,例如,至少3.2.19 - 但我认为,排除我也要求4.0.8或4.1.4的替代方案。这只适用于Gemfile中的3.2.19,只要我想要3.2.x而不是4.0.x或4.1.x:
gem 'rails', '~> 3.2', '>= 3.2.19'
在gemspec中,下面显示的下一个运行时依赖项,FAILS匹配4.0.8或4.1.4,即使两者都已安装且本地可用:
s.add_runtime_dependency('rails', ['~> 4.0', '>= 4.0.8', '~> 4.1', '>= 4.1.4'])
与捆绑者说:
#{my-gem} (= 1.0.0) ruby depends on
rails (>= 4.0.8, >= 4.1.4, ~> 4.0, ~> 4.1) ruby
rails (4.0.8)
bundler看到我安装的4.0.8或4.1.4,并说它无法满足要求。令人惊讶的是,4.1.4与最高要求相匹配 - 但可能未达到像4.0这样的wakka测试。
也许我需要三条需求线而不是一条复合线?
s.add_runtime_dependency('rails', ['~> 4.1', '>= 4.1.4'])
s.add_runtime_dependency('rails', ['~> 4.0', '>= 4.0.8'])
s.add_runtime_dependency('rails', ['~> 3.2', '>= 3.2.19'])
那也失败了。并且切换需求线的顺序并没有帮助(例如,从最高到最低排序,从最低到最高的排序也无法匹配)。
是否可以指定两个或更多版本的最低版本,或者仅仅是一个未被考虑的用例?我应该如何创建一个gemspec,允许gem支持3.2.19,4.0.8和4.1.4 - 但不是更低的版本?
也许我应该只是推测Rails> = 3.2.19而不是试图将用户推送到Rails的其他后续版本中的特定最小值(尽管可以说,4.0.0版本比3.2.19更小 - 在至少在安全方面)?我只是在思考整件事吗?
上下文:ruby 1.9.3,2.1.2; bundler 1.6.2,Rails 3.2.19,4.0.8或4.1.4