之所以有这个问题,是因为我在开发的个人项目 (KindleNote,解析管理你的 Kindle 标记与笔记) 中用到了一个 QQ 互联 - 账户登录的gem。
该 gem 会require 'const.rb'
,而const.rb会默认读取qq_secrets.yml文件。
由于指定的文件是qq_secrets.yml,因此它默认读取的是项目根目录下的qq_secrets.yml文件。
我想完成的是:使这个 gem 读取config/qq_secrets.yml,而非qq_secrets.yml。
我的想法是:监测require事件,当发现它要加载的是const.rb时,设置 Module*QQ里的变量f为config/qq_secrets.yml*,并使其不可更改。
所以,能否能通过元编程来完成这个需求?或者,这是不切实际的幻想.....
以下是 gem 的部分代码:
const.rb 的代码
module QQ
f = 'qq_secrets.yml'
return raise 'qq_secrets.yml not found!' unless File.exist?(f)
s = YAML.load_file(f)
.......
end
qq.rb 的代码
class Qq
require 'const.rb'
end