Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #===============================================================================
- # Monkeypatch v 0.5 by BakaCoder aka XXX
- #===============================================================================
- # monkeypatch <method_name (sym)> (&block)
- #===============================================================================
- proc do
- # Example
- class Scene_Base
- monkeypatch :initialize do
- puts "A Scene has been initialized!"
- end
- end
- # End
- end
- module Monkeypatch
- $monkeypatch_blocks = {}
- $monkeypatch_count = 0
- def monkeypatch(*args,&block)
- pos = :none
- if args.length == 0
- raise
- elsif args.length == 1
- pos = :after
- elsif args.length == 2
- pos = args[1]
- else
- raise
- end
- method_name = args[0]
- old_name = method_name.to_sym
- new_name = "monkeypatch_#{self.inspect.downcase}_#{method_name.to_s}_lbq_#{$monkeypatch_count}".to_sym
- alias_method new_name, old_name
- $monkeypatch_count += 1
- monkeypathcblockname = self.inspect.downcase+"_"+ method_name.to_s + rand(99999).to_s + $monkeypatch_count.to_s
- $monkeypatch_blocks[monkeypathcblockname.to_sym] = block
- if pos == :after
- class_eval %{
- def #{method_name}(*args)
- #{new_name.to_s}(*args)
- instance_eval(&$monkeypatch_blocks[:#{monkeypathcblockname}])
- end
- }
- else
- class_eval %{
- def #{method_name}(*args)
- instance_eval(&$monkeypatch_blocks[:#{monkeypathcblockname}])
- #{new_name.to_s}(*args)
- end
- }
- end
- end
- end
- class Module
- include Monkeypatch
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement