Ruby迭代版本号

时间:2017-01-16 10:25:13

标签: ruby-on-rails ruby makefile

我正在构建一个管道来为Rubygems部署gem。普遍的共识是,它将读取github库中的更改并在版本中迭代次要内容。我正在努力想出如何做到这一点,因为它代表一个makefile将用于执行迭代version.rb文件的东西:

例如:make deploy update=minor

或类似的东西,但我不知道如何以'ruby'y的方式迭代文件,而不是试图修改它,好像它只是另一个文本文件。

当前版本文件如下所示:

module Pugin
  release_no = 0
  patch_no = 1
  hotfix_no = 0
  VERSION = release_no.to_s + "." + patch_no.to_s + "." + hotfix_no.to_s
end

2 个答案:

答案 0 :(得分:6)

没有理由重新发明轮子,有Gem::Version

require 'rubygems/version.rb'
#⇒ false
gv = Gem::Version.new "1.0.2.a"
#⇒ #<Gem::Version "1.0.2.a">
gv.segments
#⇒ [1, 0, 2, "a"]
gv.release
#⇒ #<Gem::Version "1.0.2">
gv.bump
#⇒ #<Gem::Version "1.1">

我相信你明白了。

答案 1 :(得分:1)

最简单的方法可能是将纯版本移动到文本文件,然后在version.rb中读取它

version.txt:

"1.2.3"

pugin.rb:

module Pugin
  VERSION = File.read("version.txt").split("\n").first
end

要增加版本,请使用解析版本的ruby脚本:

major, minor, patch = File.read("version.txt").
                           split("\n").
                           first.
                           split(".").
                           map(&:to_i)

然后您可以轻松地增加所需的部分并将其写回文件

minor += 1
File.open("version.txt", "wb") {|f| f.write("#{major}.#{minor}.#{patch}")}