2012-05-21 40 views
0

我想將我的寶石猴補丁放入例如/lib/gem_ext/i18n.rb:如何在Rails初始化程序中混入模塊

module GemExt 
    module I18n 
    def self.translate(*args) 
     raise 'ok' 
    end 
    end 
end 

...並混入到通過Rails的初始化gem_ext.rb寶石。

我想:

a) I18n.send :include, GemExt::I18n 

b) I18n.send :include, GemExt::I18nExt 

c) I18n.module_eval { include ::GemExt::I18n } 

d) I18n.module_eval { include ::GemExt::I18nExt } 

但在重新啓動Rails的安慰不提高對I18n.translate此異常(「密鑰」),表示的是原來的行爲和新聲明的方法後,引發NoMethodError。

回答

0

配置/初始化/ gem_ext.rb

Dir[Rails.root.join("lib/gem_ext/**/*.rb")].each {|f| require f} 

的lib/gem_ext/i18n.rb

module GemExt::I18n 
    extend ActiveSupport::Concern 

    included do 
    class << self 
     def translate(*args) 
     raise 'ok' 
     end 
    end 
    end 
end 

I18n.send(:include, ::GemExt::I18n) 
2

如果你想monkeypatch I18n.translate方法只需寫入/lib/gem_ext/i18n.rb不需要 GemExt模塊。

module I18n 
def self.translate(*args) 
    raise 'ok' 
end 
end 
+0

它只是爲我工作,當我打電話發(:包括,MyModule),並在這樣的初始化程序中需要這個lib文件:Dir [Rails.root.join(「lib/gem_ext/**/*。rb」)]。each {| f |要求f} – Murdoch