4

我即将将一个更大项目的主要功能提取到一个 ruby​​ gem 中。

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

  • FasterCSV(用于 ruby​​ 1.8)用于 csv 导入/导出
  • 用于 csv 导入/导出的 Nokogiri
  • GraphViz 用于图形...
  • PDF格式
  • ...

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

这有可能吗?

4

1 回答 1

0

初始化程序中的代码只是代码...您可以让 gem-user 传递一组配置选项,并仅在存在这些选项时才加载 config.gem 依赖项。一种方法是让他们在 config environemtn 中设置全局值,例如在 config/environment.rb 中:

CSV_EXPORTS = XML_EXPORTS = true
PDF_EXPORTS = false

然后在你自己的 gem 中,你会写:

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 

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

于 2010-09-14T11:29:59.590 回答