如何將我的代碼的版本號存儲在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