Module: Luruju::MethodWrappable::ClassMethods
- Defined in:
- lib/luruju/enjoy_ruby.rb
Constant Summary collapse
- @@wrapped_class_methods =
[]
Instance Method Summary collapse
- #bucket_brigade(wraps, *args) ⇒ Object
- #do_wrap_class_method(name) ⇒ Object
- #singleton_method_added(name) ⇒ Object
- #wrap_class_method(*names) ⇒ Object
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 |