从gem扩展模块,而不是猴子补丁



假设"干净"的Ruby monkey补丁不是一个选项,并且所有的gem扩展方法都需要完全包含在自己的命名空间中,并给定类似的结构

module ARubyGem
  class GemClassOne
    def method1
      # instance method to be available when calling extended module 
    end
    def self.method2
      # singleton method to also be available in extended module
    end
  end
end

那么,如果原始gem代码有一些以"self"开头的singleton方法,那么以下哪种方法是扩展gem的更好方法呢?

module ARubyGemExtension
  class GemClassOneExtension < ARubyGem::GemClassOne
    def method_to_override
      # new code here
    end
  end
end

与。

module ARubyGemExtension
  include ARubyGem 
  class GemClassOneExtension
    def method_to_override
      # new code here
    end
  end
end

似乎您需要使用:

  module ARubyGemExtension
    class GemClassOneExtension < ARubyGem::GemClassOne
      def method_to_override
        # new code here
      end
    end
  end

(记住命名GemClassOne。)

我对您正在使用的gem一无所知,但除非它是专门为通过include提供方法而设置的,否则我认为您可能无法获得所需的东西。

最新更新