好吧,我有一个我正在研究的rails gem,我希望它覆盖sprockets中的特定方法.
我想覆盖的方法是:Sprockets :: Base.digest,以便在编译应用程序的资产时,我可以将指纹从我的gem版本中删除.
我该怎么做呢?
在我的gem中,我创建了一个文件lib/sprockets/base.rb并放置以下代码:
class Sprockets::Base
def digest
@digest = digest_class.new.update(MyGem::VERSION)
@digest.dup
end
end
当我跑步时,bundle exec rake assets:precompile我得到:
undefined method 'logger=' for #<Sprockets::Environment:0x1315b040>
因此,在我看来,整个类都会以某种方式被覆盖(这会丢失它,以及其他方法),而不是仅仅覆盖一个方法.
如果我将这段代码直接包含在使用两个宝石的应用程序的rakefile中,那么事情就可以完美地运行.