123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php declare(strict_types=1);
- /*
- * This file is part of phpunit/php-text-template.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace SebastianBergmann\Template;
- use function array_keys;
- use function array_merge;
- use function file_get_contents;
- use function file_put_contents;
- use function is_file;
- use function sprintf;
- use function str_replace;
- final class Template
- {
- private string $template = '';
- private string $openDelimiter;
- private string $closeDelimiter;
- /**
- * @psalm-var array<string,string>
- */
- private array $values = [];
- /**
- * @throws InvalidArgumentException
- */
- public function __construct(string $file = '', string $openDelimiter = '{', string $closeDelimiter = '}')
- {
- $this->setFile($file);
- $this->openDelimiter = $openDelimiter;
- $this->closeDelimiter = $closeDelimiter;
- }
- /**
- * @throws InvalidArgumentException
- */
- public function setFile(string $file): void
- {
- if (is_file($file)) {
- $this->template = file_get_contents($file);
- return;
- }
- $distFile = $file . '.dist';
- if (is_file($distFile)) {
- $this->template = file_get_contents($distFile);
- return;
- }
- throw new InvalidArgumentException(
- sprintf(
- 'Failed to load template "%s"',
- $file
- )
- );
- }
- /**
- * @psalm-param array<string,string> $values
- */
- public function setVar(array $values, bool $merge = true): void
- {
- if (!$merge || empty($this->values)) {
- $this->values = $values;
- return;
- }
- $this->values = array_merge($this->values, $values);
- }
- public function render(): string
- {
- $keys = [];
- foreach (array_keys($this->values) as $key) {
- $keys[] = $this->openDelimiter . $key . $this->closeDelimiter;
- }
- return str_replace($keys, $this->values, $this->template);
- }
- /**
- * @codeCoverageIgnore
- */
- public function renderTo(string $target): void
- {
- if (!@file_put_contents($target, $this->render())) {
- throw new RuntimeException(
- sprintf(
- 'Writing rendered result to "%s" failed',
- $target
- )
- );
- }
- }
- }
|