Rubygems:指定对最新版gem的依赖

时间:2015-01-30 19:32:37

标签: ruby gem rubygems bundler

我正在开发一个依赖于另一个宝石B的宝石A.我需要宝石的用户拥有最新版本的B,无论它是什么。所以我想在我的gemspec中说出类似

的内容
spec.add_dependency "B", :latest

原因是B包含需要在其最新版本中的数据库驱动程序,否则数据库拒绝连接。

所以换句话说,我需要在使用gem之前强制gem update。有没有办法在gemspec中做到这一点?

我知道我可以指定版本比某个固定版本更大或更小,但这不是我想要的。

此外,我可以从git获取gem代码 - 但是从master分支获取它通常与将最新的“稳定”版本推送到rubygems不同。

1 个答案:

答案 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中是否已经解决了这个问题。