Sha256: 4457a36fab353283d7f37da6d149b3dac174ee1aa883999d774d6cb18cf42ca5
Contents?: true
Size: 1.05 KB
Versions: 19
Compression:
Stored size: 1.05 KB
Contents
class Module def override_prev (*mnames) mnames.each do |mname| alias_method "__org_" + mname.to_s, mname if !defined? @prev_overriden @prev_overriden = Hash.new end if @prev_overriden[mname] != nil raise Exception.new("cannot define two overriding methods for #{mname}\n") end @prev_overriden[mname] = true end end def override_prev_commit @prev_overriden.each_key do |mname| alias_method "__new_" + mname.to_s, mname module_eval %Q{ def #{"org_" + mname.to_s} (*args, &proc) k = "__#{name}__original__" if Thread.current[k] == nil Thread.current[k] = 0 end Thread.current[k] += 1 begin #{"__org_" + mname.to_s}(*args, &proc) ensure Thread.current[k] -= 1 end end def #{mname} (*args, &proc) k = "__#{name}__original__" if Thread.current[k] == nil Thread.current[k] = 0 end if Thread.current[k] > 0 #{"__org_" + mname.to_s}(*args, &proc) else #{"__new_" + mname.to_s}(*args, &proc) end end } end end end
Version data entries
19 entries across 19 versions & 1 rubygems