class AfterDo::Loader::AspectApplier

Attributes

aspect[R]

Public Class Methods

new(aspect) click to toggle source
# File lib/after_do/loader/aspect_applier.rb, line 4
def initialize(aspect)
  @aspect = aspect
end

Public Instance Methods

apply() click to toggle source
# File lib/after_do/loader/aspect_applier.rb, line 8
def apply
  aspect.advices.each do |advice|
    advice.targets.each do |target|
      target.klass.each do |target_klass|
        extend_and_apply(
          target_klass, target.target_methods, aspect, advice
        )
      end
    end
  end
end

Protected Instance Methods

extend_and_apply(target_klass, methods, aspect, advice) click to toggle source
# File lib/after_do/loader/aspect_applier.rb, line 24
def extend_and_apply(target_klass, methods, aspect, advice)
  target_klass.extend(AfterDo)

  methods.each do |method|
    advice.names.each do |advice_name|
      aspect.klass.new(target_klass).send(advice_name, method)
    end
  end
rescue
  raise Errors::CannotApplyAspect
end