在Ruby Gem中存储版本号

时间:2013-02-11 10:26:29

标签: ruby version

我应该如何将我的代码的版本号存储在ruby gem中?

我在野外看过两种技巧:

  1. <gem root>/VERSION仅包含您的semver
  2. <gem root>/lib/your_gem/version.rb,其中包含以下代码:
  3. module IfYourCodeIsInAModule
      class YourGem
        VERSION="0.0.1"
      end
    end
    

    我喜欢1.因为它非常明显。我喜欢2.因为它是我的代码的一部分,我可以轻松地用我的版本号写入日志。

    我不喜欢1.因为如果我想从我的代码中访问版本号我必须做一个文件读取(不是最糟糕的事情),我不喜欢2.因为如果我的核心类从另一个类延伸,然后我必须在version.rb中有这种优势(或者得到一个superclass mismatch) - 例如。

    module IfYourCodeIsInAModule
      class YourGem < OtherWork
        VERSION = "0.0.1"
      end
    end
    

    当您需要来自实际运行代码的文件时,这一切都很好。当您将其包含在gemspec中时,您突然需要require 'other_work'来获取版本号!

    我很高兴能够推出自己的解决方案,但这不是一个新问题,社区在做什么,以及这方面的一般智慧是什么?

1 个答案:

答案 0 :(得分:1)

我不是宝石版VERSION民族学的专家,但也许这种非专业知识使我更平均,更适合回答“一般智慧”的问题。

所以,一般的智慧是use Bundler。一旦您通过bundle gem my_gem_name创建了gem,您就会看到捆绑包会自动创建lib/my_gem_name/version.rb文件并从lib/my_gem_name.rb开始需要它。所以我建议如果你决定不使用bundler并自己推出自己的gem,你仍然应该保留一个单独的version.rb文件,只包含

module MyGemName
  VERSION = "0.0.1"
end

也就是说,直接在主模块下面。然后,您从version.rb加载lib/my_gem_name.rb。当然,如果您的代码以更外来的方式组织,那么您需要进一步改进。