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

Version Path
YkLib-0.1.8.9 lib/Yk/overrider.rb
YkLib-0.1.8.8 lib/Yk/overrider.rb
YkLib-0.1.8.7 lib/Yk/overrider.rb
YkLib-0.1.8.6 lib/Yk/overrider.rb
YkLib-0.1.8.5 lib/Yk/overrider.rb
YkLib-0.1.8.4 lib/Yk/overrider.rb
YkLib-0.1.8.3 lib/Yk/overrider.rb
YkLib-0.1.8.2 lib/Yk/overrider.rb
YkLib-0.1.8.1 lib/Yk/overrider.rb
YkLib-0.1.8 lib/Yk/overrider.rb
YkLib-0.1.7.1 lib/Yk/overrider.rb
YkLib-0.1.7 lib/Yk/overrider.rb
YkLib-0.1.6 lib/Yk/overrider.rb
YkLib-0.1.5 lib/Yk/overrider.rb
YkLib-0.1.4 lib/Yk/overrider.rb
YkLib-0.1.3 lib/Yk/overrider.rb
YkLib-0.1.2 lib/Yk/overrider.rb
YkLib-0.1.1 lib/Yk/overrider.rb
YkLib-0.1.0 lib/YkLib/Yk/overrider.rb