def run_methods(object, context = {}, index = 0, *args, &block)
        if type == :around
          if current_method = @methods[index]
            yielded = false
            evaluate_method(object, current_method, *args) do
              yielded = true
              run_methods(object, context, index + 1, *args, &block)
            end
            
            throw :halt unless yielded
          else
            yield if block_given?
          end
        else
          @methods.each do |method|
            result = evaluate_method(object, method, *args)
            throw :halt if @terminator && @terminator.call(result)
          end
        end
      end
def run_methods(object, context = {}, index = 0, *args, &block)
        if type == :around
          if current_method = @methods[index]
            yielded = false
            evaluate_method(object, current_method, *args) do
              yielded = true
              run_methods(object, context, index + 1, *args, &block)
            end
            
            throw :halt unless yielded
          else
            yield if block_given?
          end
        else
          @methods.each do |method|
            result = evaluate_method(object, method, *args)
            throw :halt if @terminator && @terminator.call(result)
          end
        end
      end
Runs all of the methods configured for this callback.

 When running +around+ callbacks, this will evaluate each method and
 yield when the last method has yielded.  The callback will only halt if
 one of the methods does not yield.

 For all other types of callbacks, this will evaluate each method in
 order.  The callback will only halt if the resulting value from the
 method passes the terminator.