そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

Ruby - 2.0.0 の新機能 - Module#prepend

前回に引き続きruby-2.0の新機能を調べてみます。

Module#prepend です。 

 

Module をインクルードと同じようにMix-Inします。ただし継承関係はインクルード先クラスの子となるように挿入します。

そうすることで、クラスのメソッドを名前も上書きすることができます。

実例でみてみます。継承関係を表示するメソッド Module#ancestors を使うと便利です。

posting.rb

class Posting
   def name
      @name
   end
end

posting_capitalize.rb

require 'posting.rb'
module PostingCapitalize
   def name
      @name.split(" ").map(&:capitalize).join(" ")
   end
end
class Posting
  prepend PostingCapitalize
end

実行してみます。

$ irb -I.
> require 'posting_capitalize'
> Posting.ancestors
=> [PostingCapitalize, Posting, Object, Kernel, BasicObject]
> Posting.new("abe shinzo").name