如何在 ruby​​ 中自动增加“xyz”形式的数字

Kar*_*ter -5 ruby

我有一个值为 的变量x.x.x,我需要一个函数,该函数首先将最右边的值增加到10,当它达到 时11,增加最左边的值。相同的规则适用于所有值;当它们到达 时11,它们将增加最左边的值。我需要这个来在 fastlane 中自动生成版本号。

Kim*_*hto 5

简单的分割、递增、比较和重新连接::

def increment_version(version)
  major, minor, patch = version.split('.').map(&:to_i)
  if (patch += 1) > 10
    patch = 0
    if (minor += 1) > 10
      minor = 0
      major += 1
    end
  end
  [major, minor, patch].join('.')
end
Run Code Online (Sandbox Code Playgroud)

并测试一下:

{
  '0.0.9' => '0.0.10',
  '0.0.10' => '0.1.0',
  '0.10.9' => '0.10.10',
  '0.10.10' => '1.0.0'
}.each do |version, expected|
  puts "%-10s -> %-10s (should be %s)" % [version, increment_version(version), expected]
end
Run Code Online (Sandbox Code Playgroud)

输出:

0.0.9      -> 0.0.10     (should be 0.0.10)
0.0.10     -> 0.1.0      (should be 0.1.0)
0.10.9     -> 0.10.10    (should be 0.10.10)
0.10.10    -> 1.0.0      (should be 1.0.0)
Run Code Online (Sandbox Code Playgroud)

但正如评论中提到的,这种版本控制违背了“xyz”类型版本控制的整个理念。如semver.org中所述:

给定版本号 MAJOR.MINOR.PATCH,递增:

当您进行不兼容的 API 更改时的主要版本,

当您以向后兼容的方式添加功能时,次要版本,以及

当您进行向后兼容的错误修复时,请使用 PATCH 版本。

如果您只是像上面的方法一样自动递增版本,则版本号绝对没有任何意义,您最好只使用单个运行版本号或当前时间,例如build-20180213101500