2017-01-16 69 views
1

我正在构建一个管道以将Ruby部署到Rubygems。普遍的共识是,它会读取github库中的更改并迭代版本中的未成年人。我挣扎拿出如何做到这一点的想法,因为它的立场,makefile文件将被用于执行一些,遍历该version.rb文件:Ruby迭代版本号

如: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 
+0

对于最后一行使用字符串插值或'Array#join',也就是''#{release_no}。#{patch_no}。#{hotfix_no}“或'[release_no,patch_no,hotfix_no ]。加入( '')'。我会用'MAJOR','MINOR','PATCH'来代替局部变量。 – Stefan

回答

4

没有理由重新发明轮子,有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

最简单的方法可能是纯净版移动到一个文本文件,然后在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}")}