Module: Luruju::MethodWrappable::ClassMethods

Defined in:
lib/luruju/enjoy_ruby.rb

Constant Summary collapse

@@wrapped_class_methods =
[]

Instance Method Summary collapse

Instance Method Details

#bucket_brigade(wraps, *args) ⇒ Object



50
51
52
53
54
55
# File 'lib/luruju/enjoy_ruby.rb', line 50

def bucket_brigade wraps, *args
  current = wraps.shift
  send(current, *args) do |*args|
	  wraps.empty? ? send(current, *args) : bucket_brigade(wraps, *args)
  end
end

#do_wrap_class_method(name) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/luruju/enjoy_ruby.rb', line 39

def do_wrap_class_method name
	self.module_eval <<-EOD
	  class << self
	    alias :original_#{name.to_s} :#{name.to_s}
	    def #{name.to_s} *args
 bucket_brigade methods.select{|x|/^wrap_#{name}/=~x}.sort!.push("original_#{name.to_s}"), *args
	    end
	  end
	EOD
end

#singleton_method_added(name) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/luruju/enjoy_ruby.rb', line 30

def singleton_method_added(name)
	return if /^original_/ =~ name.to_s
	file, line, method = caller[1].match(/^(.+?):(\d+)(?::in `(.*?)')?/).captures
	return if file == __FILE__ and ["do_wrap_class_method","singleton_method_added"].include?(method) 
	do_wrap_class_method(name) if @@wrapped_class_methods.include? name.to_sym
ensure
	super
end

#wrap_class_method(*names) ⇒ Object



25
26
27
28
# File 'lib/luruju/enjoy_ruby.rb', line 25

def wrap_class_method *names
	@@wrapped_class_methods += names
  names.each { |name|  do_wrap_class_method name rescue NameError }
end