Advertisement
Guest User

RGSS Class Extension

a guest
Dec 27th, 2012
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.02 KB | None | 0 0
  1. class Class
  2.  
  3.   def after(method, &block)
  4.     original = create_unique_alias(method)
  5.     define_method method do |*args|
  6.       self.__send__(original, *args)
  7.       instance_exec(*args, &block)
  8.     end
  9.   end
  10.  
  11.   def before(method, &block)
  12.     original = create_unique_alias(method)
  13.     define_method method do |*args|
  14.       instance_exec(*args, &block)
  15.       self.__send__(original, *args)
  16.     end
  17.   end
  18.  
  19.   def instead_of(method, &block)
  20.     original = create_unique_alias(method)
  21.     define_method method do |*args|
  22.       original_block = proc { |*args|
  23.         self.__send__(original, *args)
  24.       }
  25.       actual_args = [ original_block ] + args
  26.       instance_exec(*actual_args, &block)
  27.     end
  28.   end
  29.  
  30.   def after_init(&block)
  31.     after :initialize, &block
  32.   end
  33.  
  34.   private
  35.   @@alias_index = 0
  36.   def create_unique_alias(method)
  37.     @@alias_index += 1
  38.     original = "_alias#{@@alias_index}_#{method}".to_sym
  39.     class_eval %Q{
  40.       alias_method :#{original}, :#{method}
  41.     }
  42.     original
  43.   end
  44.  
  45. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement