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