読者です 読者をやめる 読者になる 読者になる

CubicLouve

Spring_MTの技術ブログです。https://github.com/SpringMT (http://spring-mt.tumblr.com/ からの移転)

rubyで局所的にパッチを当てる方法を模索中

ruby

下記のようなコードで、Cクラスの中だけで何とかAクラスに対するパッチを当てたい。

class A
  def self.foo
    p 'foo'
  end
  def bar
    p 'bar'
  end
end

module ExtendFoo
  refine A.singleton_class do
    def foo
      p 'extend foo'
    end
  end
  refine A do
    def bar
      p 'extend bar'
    end
  end
end

class B
  def initialize
    A.foo
    A.new.bar
  end
end

class C
  using ExtendFoo
  def initialize
    B.new
  end
end

C.new

これを実行すると、

"foo"
"bar"

になるのだが、

"extend foo"
"extend bar"

にする方法がないものか。。。