Advertisement
Guest User

Yet Another Monkeypatch Script

a guest
Nov 17th, 2013
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rails 1.66 KB | None | 0 0
  1. #===============================================================================
  2. #  Monkeypatch v 0.5 by BakaCoder aka XXX
  3. #===============================================================================
  4. # monkeypatch <method_name (sym)> (&block)
  5. #===============================================================================
  6.  
  7.  
  8.  
  9. proc do
  10. # Example
  11.   class Scene_Base
  12.     monkeypatch :initialize do
  13.       puts "A Scene has been initialized!"
  14.     end
  15.   end
  16. # End
  17. end
  18.  
  19.  
  20.  
  21.  
  22. module Monkeypatch
  23.  
  24.   $monkeypatch_blocks = {}
  25.   $monkeypatch_count  = 0
  26.  
  27.   def monkeypatch(*args,&block)
  28.  
  29.     pos = :none
  30.     if args.length == 0
  31.       raise
  32.     elsif args.length == 1
  33.       pos = :after
  34.     elsif args.length == 2
  35.       pos = args[1]
  36.     else
  37.       raise
  38.     end
  39.  
  40.  
  41.     method_name = args[0]
  42.     old_name = method_name.to_sym
  43.     new_name = "monkeypatch_#{self.inspect.downcase}_#{method_name.to_s}_lbq_#{$monkeypatch_count}".to_sym
  44.     alias_method new_name, old_name
  45.     $monkeypatch_count += 1
  46.  
  47.     monkeypathcblockname = self.inspect.downcase+"_"+ method_name.to_s + rand(99999).to_s + $monkeypatch_count.to_s
  48.     $monkeypatch_blocks[monkeypathcblockname.to_sym] = block
  49.  
  50.  
  51.  
  52.     if pos == :after
  53.       class_eval %{
  54.         def #{method_name}(*args)
  55.           #{new_name.to_s}(*args)
  56.           instance_eval(&$monkeypatch_blocks[:#{monkeypathcblockname}])
  57.         end
  58.       }
  59.     else
  60.       class_eval %{
  61.         def #{method_name}(*args)
  62.           instance_eval(&$monkeypatch_blocks[:#{monkeypathcblockname}])
  63.           #{new_name.to_s}(*args)
  64.         end
  65.       }
  66.     end
  67.  
  68.   end
  69. end
  70.  
  71.  
  72. class Module
  73.   include Monkeypatch
  74. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement