假设"清洁" 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
如果原始宝石代码有一些以" self"
开头的单例方法,那么这些是扩展gem的更好方法module ARubyGemExtension
class GemClassOneExtension < ARubyGem::GemClassOne
def method_to_override
# new code here
end
end
end
VS
module ARubyGemExtension
include ARubyGem
class GemClassOneExtension
def method_to_override
# new code here
end
end
end
答案 0 :(得分:1)
好像你需要一起去:
module ARubyGemExtension
class GemClassOneExtension < ARubyGem::GemClassOne
def method_to_override
# new code here
end
end
end
(请记住命名空间GemClassOne
。)
我对您正在使用的宝石一无所知,但除非专门设置通过include
提供方法,否则我认为您可能无法获得所追求的宝石。