def self.include_advice_modules(target)
add_advices = []
del_advices = []
for a in target.advices
if a.code.is_a?(Module) and (!a.code.class.ancestors.include?(Class))
target.module_eval %{ include #{a.code} }
options = a.options.reject { |k,v| k == :pre || k == :post }
method = (a.options[:pre] || 'pre').to_s
if a.code.instance_methods.include?(method)
options.update(:where => :prepend, :join => :pre)
add_advices << Advice.new(method.to_sym, options)
end
method = (a.options[:post] || 'post').to_s
if a.code.instance_methods.include?(method)
options.update(:where => :append, :join => :post)
add_advices << Advice.new(method.to_sym, options)
end
del_advices << a
end
end
for a in del_advices
target.advices!.delete(a)
end
target.advices!.concat(add_advices)
end