Ruby Gems具有灵活的gem依赖性?

时间:2010-08-31 11:36:02

标签: ruby rubygems dependencies gem bundler

我即将将更大项目的主要功能提取到红宝石中。

我创建的小框架使用了一些额外的宝石,用于不同的导入/导出选项。即

  • 用于csv导入/导出的FasterCSV(用于ruby 1.8)
  • Nokogiri for csv import / export
  • GraphViz for graph ...
  • PDF
  • ...

我不希望gem的用户在不需要时安装和加载所有gem。

这可能吗?

1 个答案:

答案 0 :(得分:0)

初始化程序中的代码只是代码...您可以让您的gem-user通过一组配置选项,并且只有在存在这些选项时才会加载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 

使用“已定义?”因此,如果他们根本没有设置,宝石将不会尝试加载。这也意味着您可以将它们默认为您喜欢的任何内容。