使用实例方法扩展gem模块

时间:2015-03-18 19:48:10

标签: ruby-on-rails ruby

我试图扩展gem的InstanceMethods(Globalize)

module Globalize
  module ActiveRecord
    module InstanceMethods 
      def foo
        puts "Bar!"
      end
    end
  end
end

但是,这会覆盖Globalize的现有实例方法。

为先前声明的模块提供其他实例方法的正确方法是什么?

更新: 试图要求它们似乎也不起作用:

module Globalize
  require 'globalize'
  module ActiveRecord
    require 'globalize/active_record'
    module InstanceMethods
      require 'globalize/active_record/instance_methods'
      def foo
        puts "Bar!"
      end
    end
  end
end

更新:通过使用roxxypoxxy提供的答案,我可以通过将他的答案添加到初始化程序来扩展实例方法

2 个答案:

答案 0 :(得分:2)

你可以做到

Globalize::ActiveRecord::InstanceMethods.class_eval do
    # patch methods
end

答案 1 :(得分:1)

您可能只需确保在进行monkeypatching之前需要该模块;如果它依赖自动加载器加载这些文件,那么定义它们将阻止自动加载器尝试要求它们。 Globalize确实依赖于自动加载器,seen here

要修复它,请在修补之前明确要求这些模块:

 require 'globalize'
 require 'globalize/active_record'
 require 'globalize/active_record/instance_methods'

 # Patch your stuff here.