Я пытаюсь написать свой первый драгоценный камень и хочу создать тот, который обеспечивает функциональность для dry -под сериализации. В данный момент я использую один драгоценный камень и не предвижу никаких проблем с ним, но я хотел бы иметь возможность добавить поддержку нескольких драгоценных камней сериализации. Единственный недостаток, который я вижу, это то, что для этого потребуется добавить их в список зависимостей и установить их в проект, использующий камень, который я пишу.
Есть ли способ, используя инициализатор, установить предпочтительный камень что пользователь может захотеть использовать и установить только один, а не какой-либо другой?
Сейчас я напишу это без этой функциональности, но в будущем я хотел бы сделать это более надежный с поддержкой нескольких драгоценных камней.
Я обновил генератор установки, который создает инициализатор со списком драгоценных камней по умолчанию, а также то, что я думал, будет работать для динамического добавления зависимости. Мой тест успешно пройден, и я могу выполнить локальную сборку без каких-либо проблем, и мой драгоценный камень, кажется, работает как положено, но когда я пытаюсь перевести sh в gemfury, я теперь получаю ошибку:
remote: Initializing build: done.
remote: ----→ Building package...
remote: RubyGem build detected
remote: Invalid gemspec in [/build/app/my_gem.gemspec]: cannot load such file -- blueprinter
remote: ERROR: Error loading gemspec. Aborting.
И в моем gemspe c
spec.add_dependency MyGem.configuration.serializer || 'blueprinter'
Вот код, соответствующий текущей попытке конфигурации:
# lib/my_gem
require "my_gem/version"
require 'my_gem/configuration'
require "my_gem/blueprinter"
module MyGem
class << self
attr_accessor :configuration
end
def self.configuration(&block)
@configuration ||= Configuration.new
end
def self.configure
yield(configuration)
end
end
# lib/my_gem/configuration
module MyGem
class Configuration
attr_accessor :serializer
def initialize
@serializer = nil
end
end
end