从包含的gem

时间:2018-01-30 18:36:27

标签: ruby rubygems

这是场景。我正在编写GemB,我打算在ProjectA中使用它,但我想以非特定方式编写GemB(我应该这样做)。我希望GemB在“常规”project_a/config/gem_b.yml

下查找“配置”文件

如果该文件不存在,GemB可以默认为自己的gemb/config/default.yml

ProjectA(可能是gem / rails-engine / rails-app等的变体) GemB(绝对是宝石)

GemB是否有动态方式获取ProjectA(它正在使用的项目)的根目录?如果我可以预测名称,我可以致电ProjectA.root(可能),因此您可能会建议调用Rails.root,但我不能保证它会在Rails项目中使用,(在这种情况下,无论如何,基于GemB)的目标功能。

相信这是一个充分的解释,请告诉我是否需要澄清!

1 个答案:

答案 0 :(得分:2)

大多数现代宝石都不会寻找特定的配置文件。相反,他们希望执行任何名称的配置文件,这将通过gem的类名称上的.config变量设置配置。例如,我可能有这个配置文件:

# config/initializers/ams.rb

ActiveModelSerializers.config.adapter = :json_api
ActiveModelSerializers.config.key_transform = :camel_lower

现在文件的位置或调用内容无关紧要。只要执行代码,ActiveModelSerializers就可以查看自己的ActiveModelSerializers.config变量,这样做很好。

如果您想要进行广泛的配置(例如通过.yml文件),您可以创建一个.config.path设置,并指示您的gem用户自己设置路径,然后在现场创建一个文件他们选择:

# config/initializers/gem_b.rb

GemB.config.path = '/config/gem_b.yml'