依存gemの拡張を開発中のgem内に留める
module内でクラス拡張しても、そのファイルをrequireするとクラス拡張はモジュール外にまで影響してしまう。module内でrefineを使えば問題ありません。refineを使ったmoduleを、自作クラスの中でusingで読みこめば、クラス拡張を自作クラス内に閉じ込めることができます。
module ExtendArray
refine Array do
def hello
"Array hello"
end
end
end
class HasArray
using ExtendArray
def hello_with_array(array)
array.hello
end
end
クラスではなく、オブジェクトにメソッドを追加するにはextendを使います。これならgemからオブジェクトを生成するゲッターの中で、そのオブジェクトだけに拡張を留めることができます。依存しているgemの拡張を、今のgemの利用ユーザーにまで影響させたくない場合は、この方法がいいかもしれません。
module ExtendArray
def say
"ExtendArray module say"
end
end
class HasArray
def get_extend_array
[5,6].extend(ExtendArray)
end
end