如何将我的代码的版本号存储在ruby gem中?将版本号存储在Ruby Gem中
我见过在野外两种技术:
<gem root>/VERSION
只包含您semver。<gem root>/lib/your_gem/version.rb
它包含以下代码:
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'
才能获得您的版本号!
我很高兴地去推出自己的解决方案,但是这不能成为一个新的问题,什么是社区做的,什么是一般的智慧对此有何看法?
那么,如何处理一个提供单个类的gem(它从一个依赖类中的类继承)呢?我想你建议我将它封装在一个模块中,只是为了版本控制:'module Rack;模块MyCoolThing; VERSION =“0.0.1”;结束;结束“ - 然后在我的实际代码中:'module Rack;模块MyCoolThing; class MyCoolThing; def awesomes;结束;结束;结束;结束' - 这看起来很尴尬! – 2013-02-20 10:07:40
@JP:这取决于你。但是在由Bundler创建的* .gemspec文件中,您可以定义与MyCoolThing :: VERSION不同的版本位置。它可以是'module Rack; class MyCoolThing; VERSION ='0.0.1'; def awesomes end end end'。在* gemspec中,你说这个版本存储在Rack :: MyCoolThing :: VERSION下,然后你就去了。 – 2013-03-11 01:57:34
正是这种情况的出现困难 - 如果'MyCoolThing'从'GiantLibrary'然后我需要声明中的版本文件的继承太(继承'需要“giant_library”;模块机架;类MyCoolThing
2013-03-11 10:55:23