def invoke(object, args, block, called_from)
      check_arity!(args.size)

      if base_object.is_a? Class
        result = if @plan
                   check_for_too_many_arguments!(@plan)
                   @plan.call(object, *args, &block)
                 end
      else
        result = if @plan
                   check_for_too_many_arguments!(@plan)
                   @plan.call(*args, &block)
                 end
      end
    ensure
      calls << CallLog.new(object, called_from, args, block, result)
    end
def invoke(object, args, block, called_from)
      check_arity!(args.size)

      if base_object.is_a? Class
        result = if @plan
                   check_for_too_many_arguments!(@plan)
                   @plan.call(object, *args, &block)
                 end
      else
        result = if @plan
                   check_for_too_many_arguments!(@plan)
                   @plan.call(*args, &block)
                 end
      end
    ensure
      calls << CallLog.new(object, called_from, args, block, result)
    end
invoke that the method has been called. You really shouldn't use this
 method.