public function getCompiledPath($templatePath, $options = [])
    {
        $viewsDir = $this->getViewsDir();
        if (!isset($options['path'])) {
            $options['path'] = $viewsDir;
        }

        $relativeViewFile = trim(str_replace($viewsDir, '', $templatePath), DIRECTORY_SEPARATOR);
        if (!isset($options['hierarchical']) || !$options['hierarchical']) {
            $separator    = isset($options['separator']) ? $options['separator'] : '__';
            $compliedPath = str_replace(DIRECTORY_SEPARATOR, $separator, $relativeViewFile);
        } else {
            $relativeViewPath = substr($relativeViewFile, 0, strrpos($relativeViewFile, DIRECTORY_SEPARATOR));
            $absolutedPath    = $options['path'] . $relativeViewPath;
            if (!is_dir($absolutedPath)) {
                mkdir($absolutedPath, 0755, true);
            }

            if (!is_writable($absolutedPath)) {
                throw new Exception\RuntimeException(sprintf('Cannot write compile view to "%s"', $absolutedPath));
            }
            $compliedPath = $relativeViewFile;
        }

        $compliedPath = $options['path'] . $compliedPath;
        $compliedExt  = isset($options['extension']) ? $options['extension'] : '.php';
        $compliedPath .= $compliedExt;

        return $compliedPath;
    }