我正在开发一个依赖于另一个宝石B的宝石A.我需要宝石的用户拥有最新版本的B,无论它是什么。所以我想在我的gemspec中说出类似
的内容spec.add_dependency "B", :latest
原因是B包含需要在其最新版本中的数据库驱动程序,否则数据库拒绝连接。
所以换句话说,我需要在使用gem之前强制gem update
。有没有办法在gemspec中做到这一点?
我知道我可以指定版本比某个固定版本更大或更小,但这不是我想要的。
此外,我可以从git获取gem代码 - 但是从master分支获取它通常与将最新的“稳定”版本推送到rubygems不同。
答案 0 :(得分:0)
这样的事情怎么样:
require 'json'
require 'uri'
require 'open-uri'
nokogiri_uri = URI('https://rubygems.org/api/v1/gems/nokogiri.json')
version = nil
open(nokogiri_uri) do |f|
json_str = f.read
puts json_str
hash = JSON.parse json_str
version = hash['version']
puts version
end
if version
spec.add_dependency "nokogiri", version
else
puts "My gem won't work because its dependencies are buggered."
--output:--
{"name":"nokogiri","downloads":33177312,"version":"1.6.6.2", ... }
1.6.6.2
由于文章How to Cure Net::HTTP’s Risky Default HTTPS Behavior,我使用了open-uri
而不是net/http
库。我不知道在最新版本的ruby中是否已经解决了这个问题。