Как сохранить номер версии моего кода внутри рубинового драгоценного камня?Хранение номера версии в 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'
, чтобы получить номер вашей версии!
Я счастлив пойти и бросить свое решение, но это не может быть новой проблемой, что делает сообщество, и какова общая мудрость в этом вопросе?
Итак, как бы вы справились с драгоценным камнем, который поставляет один класс (который наследуется от класса внутри зависимости)? Я думаю, вы предлагаете мне обернуть его в модуле только ради управления версиями: 'module Rack; модуль MyCoolThing; VERSION = "0.0.1"; конец; end' - а затем в моем фактическом коде: 'module Rack; модуль MyCoolThing; класс MyCoolThing; def awesomes; конец; конец; конец; конец' - это кажется неудобным! –
@JP: Это зависит от вас. Но в файле * .gemspec, созданным Bundler, вы можете определить другое местоположение версии, чем MyCoolThing :: VERSION. Это может быть «модульная стойка»; класс MyCoolThing; VERSION = '0.0.1'; def awesomes end end end'. И в * gemspec вы говорите, что версия хранится в Rack :: MyCoolThing :: VERSION, и вы туда. –
В этой ситуации возникает трудность - если «MyCoolThing» наследуется от «GiantLibrary», тогда мне также нужно объявить это наследование в файле версии («require» giant_library »; модуль Rack; class MyCoolThing