Ruby Gems с гибкими зависимостями от драгоценных камней?

Я собираюсь извлечь основные функции более крупного проекта в рубиновый драгоценный камень.

Созданный мной небольшой фреймворк использует несколько дополнительных драгоценных камней для различных параметров импорта/экспорта. Т.е.

  • FasterCSV (для ruby ​​1.8) для импорта/экспорта csv
  • Nokogiri для импорта/экспорта csv
  • GraphViz для граф...
  • PDF
  • ...

Я не хочу, чтобы пользователи драгоценного камня устанавливали и загружали все драгоценные камни, когда они им не нужны.

Это вообще возможно?


person seb    schedule 31.08.2010    source источник
comment
вы думаете о graphviz как о драгоценном камне?   -  person rogerdpack    schedule 31.08.2010
comment
graphviz как в драгоценном камне ruby-graphviz. не лучший пример   -  person seb    schedule 01.09.2010


Ответы (1)


Код в вашем инициализаторе - это просто код... вы можете передать своему пользователю gem набор параметров конфигурации и сделать так, чтобы зависимости config.gem загружались только в том случае, если эти параметры присутствуют. один из способов сделать это — заставить их установить глобальные значения в config environemtn, например, в config/environment.rb:

CSV_EXPORTS = XML_EXPORTS = true
PDF_EXPORTS = false

Затем в своем собственном драгоценном камне вы должны написать:

config.gem 'fastercsv' if defined?(CSV_EXPORTS)
config.gem 'nokogiri'  if defined?(XML_EXPORTS)
if defined?(PDF_EXPORTS)
  config.gem 'prawn' 
  config.gem 'prawn-layout'
end
# etc 

использовать "определено?" так что, если они вообще ничего не настроят, драгоценные камни не будут пытаться загрузиться. Это также означает, что вы можете по умолчанию использовать их так, как вам нравится.

person Taryn East    schedule 14.09.2010