module SupportSegment::MethodDecorator

Public Instance Methods

after(method, &block) click to toggle source
# File lib/support_segment/method_decorator.rb, line 8
def after(method, &block)
  decorate(method, :after, block)
end
around(method, &block) click to toggle source
# File lib/support_segment/method_decorator.rb, line 12
def around(method, &block)
  decorate(method, :around, block)
end
before(method, &block) click to toggle source
# File lib/support_segment/method_decorator.rb, line 4
def before(method, &block)
  decorate(method, :before, block)
end

Private Instance Methods

decorate(method, callback, block) click to toggle source
# File lib/support_segment/method_decorator.rb, line 17
def decorate(method, callback, block)
  old_method = instance_method(method)

  define_method(method) do |*args|
    if [:before, :around].include? callback
      self.instance_eval &block
    end

    old_method.bind(self).call(*args)
    
    if [:after, :around].include? callback
      self.instance_eval &block
    end
  end
end