从包含的 gem 中查找项目的根目录

Find root of project from included gem

场景如下。我正在写 GemB,我打算在 ProjectA 中使用它,但我想以一种非特定的方式写 GemB(我应该这样做)。我希望 GemB 在 "conventional" project_a/config/gem_b.yml

下查找 "config" 文件

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

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

GemB 是否有动态方法获取 ProjectA 的根(正在使用它的项目)?如果我能预测名字,我可以调用 ProjectA.root (可能),所以你可能建议调用 Rails.root 但我不能保证它会在 Rails 项目中使用,(在这种情况下无论如何都不太可能,基于 GemB).

的目标功能

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

大多数现代 gem 不会查找特定的配置文件。相反,他们希望执行任何名称的配置文件,这将通过 gem 的 class 名称上的 .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'