如何在metagem中分享所有宝石的版本?

时间:2014-07-06 17:54:48

标签: ruby rubygems

我正在构建一个Ruby库作为相关宝石的集合。所有的宝石都属于一个metagem。结构如下所示:

mygem/
  lib/
  mygem-piece1/
    lib/
  mygem-piece2/
    lib/

我希望所有这些宝石共享一个版本。我可以手动保持同步,但这将是乏味和容易出错的。有一个更好的方法吗?

1 个答案:

答案 0 :(得分:1)

假设mygem是元宝石,您需要创建mygem/lib/mygem/version.rb

# mygem/lib/mygem/version.rb
module MyGem
  VERSION = '1.0.0'
end

然后,在复合宝石的每个子文件夹中,您将拥有gemspec。例如:

# mygem/mygem-piece1/mygem-piece1.gemspec
require_relative '../../lib/mygem/version'

Gem::Specification.new do |gem|
  # ...
  gem.version = MyGem::VERSION
end

(注意:此解决方案需要Ruby 1.9 +)。

然后,当您想要更改版本时,只需编辑单个版本文件并释放新的gem。当您推送到Rubygems时,Gemspecs被解释然后写成YAML,因此该值将在运行时“计算”。