Decorator

DESCRIPTION:

the Decorator make a decorator like Python.

Usage

require 'decorator'

または

require 'decorator/only'

require 'decorator' だと Module#decorator だけでなく Module#kwargsable も一緒に使えます。 require 'decorator/only' だと Module#decorator だけがロードされます

普通、このモジュールで使う関数はModule#decoratorのみです。 それはデコレータを作成するデコレータです。デコレータを作る場合は通常これをデコレータとします。 example: class Module decorator def wrap func, *args, &blk puts "wrapped!" proc { func.call *args, &blk }

デコレータの第一引数は必ずMethodです。 この場合のwrapはデコレータとして使用できます。

 class TestClass
   wrap
   def wrapped *args, &blk
     puts "IN!"

もしデコレータに引数を渡した場合、それはすべてデコレータに一緒に渡されます。

 class TestClass
   wrap(*example_args)
   def wrapped *args, &blk
     puts "IN!"

=> 

デコレータの戻り値がProcである場合、関数はそのProcに置き換えられます。 たとえばこの場合、wrappedはwrap内のprocに置き換えられます。