ruby - 我可以根据命令行输入为我的 gem 指定动态依赖项吗?

标签 ruby rubygems gemspecs

简介:我正在开发一个 gem,默认情况下,它会从一些 XML 数据中提取信息并对文档进行某种处理。我正在使用 nokogiri 来解析 XML。但是,我希望允许用户自己解析 XML 并传递我的数据处理方法运行所需的信息,以防他们不想安装 nokogiri 或已经解析了 XML。

问题:有什么方法可以让用户在 gem 安装期间指定他们不希望安装 nokogiri 依赖项?例如(这里非常用手挥动),

gem install crazy_gem --no-nokogiri

在 gemspec 中可能是这样的

Gem::Specification.new do |s|
  ...
  s.add_dependency 'nokogiri' unless Proc.new { install_flags('no-nokogiri') }
  ...
end

[edit] 我不想过多地关注上面的 gemspec 代码,因为我知道它不起作用——它只是我想要的那种东西的一个例子做。 [/编辑]

gem install crazy_gem --ignore-dependencies 在有额外的依赖关系之前效果很好。

最佳答案

我认为您无法完全按照自己的意愿行事,但如果您重新构建 gem 的行为,则有可能的解决方案。默认情况下解析一些 XML 并处理数据,但可选地允许您传入预解析数据的 gem 不是主要与处理有关的 gem,而是可选地为您解析 XML(如果你有 Nokogiri)。

要做到这一点,只需将 Nokogiri 排除在您的 gemspec 依赖项之外(您可以将其添加为 development dependencyrequirement)。

在您的代码中,确保您只在 begin..end block 中使用 rescue LoadError 调用 require 'nokogiri' 并处理视情况而定。

关于ruby - 我可以根据命令行输入为我的 gem 指定动态依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6132409/

相关文章:

mysql - 如何一次合并2个ID

ruby - 如何使用 ruby​​gems 正确打包应用程序?

ruby-on-rails - 帮助 ruby​​ on rails

ruby - 在安装 RVM 和使用 gemsets 之后删除系统 gem 是否安全?

ruby - 如何修复 Rubygems 最近的弃用警告?

ruby-on-rails - 无效的 gemspec - 格式错误的要求 ["#<YAML::Syck::DefaultKey:0xb5f9c990> 3.2.0"]

ruby - 在 ruby​​ 中调用 do block 内的方法

ruby - 我如何在我的 gemspec 中使用来自 github 的依赖项?

ruby-on-rails - 如何将任何 HTTParty.get 响应转换为 UTF-8

ruby - 从Ruby文件将数组插入Postgres数据库