Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 Ruby Cookbook | Classの変更をListenする

パンくず

Ruby Cookbook
Classの変更をListenする

概要

Classの変更をListenする

内容

undef,remove_methodの利用時は、各メソッドをオーバーライドした際に
特定の処理を実行することが可能です。

Listenメソッド 内容
method_added メソッドの追加,オーバーライド,undef時のListen
method_removed remove_method時のListen
method_undefined undef時のListen

サンプルコード

# encoding: Windows-31J
require "pp"

class Hoge
  def hoge
    "hoge"
  end
  
  def hage
    "hage"
  end

  def self.method_added(sym)
    puts %{!! #{sym} was (re)defined. !!}
  end

  def self.method_removed(sym)
    puts %{!! #{sym} was removed. !!}
  end

  def self.method_undefined(sym)
    puts %{!! #{sym} was undefined. !!}
  end
end

hoge = Hoge.new
puts hoge.hoge
puts hoge.hage

class Hoge
  def hige
    'This is a new method.'
  end
  
  def hage
    'override hage'
  end
end

override_hoge = Hoge.new
puts hoge.hoge
puts hoge.hage

class Hoge
  remove_method :hage
  undef :hoge, :hige
end

出力

hoge
hage
!! hige was (re)defined. !!
!! hage was (re)defined. !!
hoge
override hage
!! hage was removed. !!
!! hoge was (re)defined. !!
!! hoge was undefined. !!
!! hige was (re)defined. !!
!! hige was undefined. !!