在Ruby Gem中描述脚本依赖关系的最佳方法-我应该在哪里要求?

时间:2018-10-15 15:26:16

标签: ruby-on-rails ruby rubygems

我是Ruby世界的新手,并开始构建我的第一个Ruby gem。

我注意到需求与我预期的完全不同。假设我在gem中有以下脚本

-  My Gem
  -  lib
       script-1.rb
       script-2.rb
       script-3.rb
       ...
       main.rb
  + bin
  + exe
  ...

在exe文件中,我校准了main.rb-我的宝石的主要入口点。

它使用script-1.rb中的类来完成其工作。 script-1.rb代表它取决于代码script-2.rb。依此类推。

这是我的问题。

哪里是require脚本的最佳位置。主要从可维护性的角度来看。假设在我的可执行文件有效期内,所有脚本都将被加载。我看到2个选项:

  1. require在main.rb中我的应用程序的所有脚本
  2. 每个脚本仅对其依赖的脚本执行require
  3. 引入新的启动脚本

我开始使用选项2。但是很快我就知道,require进行了全局修改,并且某些脚本丢失了require,因为其他一些脚本已经这样做了。

那么这里的最佳实践是什么。我宁愿创建一个单独的脚本来进行初始化-就像定义我的gem的依赖关系一样,但是我想知道是否还有更好的方法?您如何描述宝石中脚本之间的相似度?

1 个答案:

答案 0 :(得分:2)

如果您的宝石不适用于Bundler,请声明:

gem 'mygem'

然后您必须在文档中解释原因。出于难以解决的技术原因,某些gem要求您加载特定文件,或在某些情况下建议这样做。捆绑器本身就是这样的一颗宝石:

require 'bundler/setup'

不仅会加载Bundler,还将启动Bundler环境设置并导入Gemfile设置。

通常,您的gem应该有一个与gem本身同名的主库文件,并负责加载所有依赖项。

例如,mygem如下:

mygem.rb
mygem/some_module.rb
mygem/other_module.rb

mygem如下所示:

module MyGem
  # ...
end

require_relative './mygem/some_module'
require_relative './mygem/other_module'

require调用进行排序,以便正确解决所有依赖项。

如果您的模块具有自己的其他依赖关系,则模式会重复,例如在mygem/submodule.rb中:

module MyGem::Submodule
  # ...
end

require_relative './submodule/something'