从 gem 扩展模块而不是猴子修补
Extending Modules from a gem instead of monkey patching
假设 "clean" Ruby 猴子补丁不是一个选项,并且所有 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" 开头的单例方法,那么哪一个是扩展 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
提供方法,否则我认为您可能无法得到您想要的.
假设 "clean" Ruby 猴子补丁不是一个选项,并且所有 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" 开头的单例方法,那么哪一个是扩展 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
提供方法,否则我认为您可能无法得到您想要的.