module Forwardable::Extended
def def_modern_delegator(accessor, method, alias_ = method, args: \
def def_modern_delegator(accessor, method, alias_ = method, args: \ { :before => [], :after => [] }, **kwd) prefix, suffix, wrap = prepare_delegate(**kwd) args = { :before => args } unless args.is_a?(Hash) b = [args[:before]].flatten.compact.map(&:to_s).join(", ") a = [args[ :after]].flatten.compact.map(&:to_s).join(", ") b = b + ", " unless args[:before].nil? || args[:before].empty? a = ", " + a unless args[ :after].nil? || args[ :after].empty? alias_ = alias_.to_s.gsub(/\?$/, "") if suffix class_eval delegate_debug(<<-STR), __FILE__, __LINE__ - 10 def #{alias_}#{suffix}(*args, &block) #{wrap}(#{prefix}#{accessor}.send( #{method.inspect}, #{b}*args#{a}, &block )) rescue Exception if !Forwardable.debug && $@ && $@.respond_to?(:delete_if) $@.delete_if do |source| source =~ %r"#{Regexp.escape(__FILE__)}"o end end raise end STR end