Skip to content

Commit

Permalink
Merge pull request #3 from phug-php/array-object-options
Browse files Browse the repository at this point in the history
Array object options
  • Loading branch information
kylekatarnls authored Jul 25, 2017
2 parents fccc487 + 3c6e481 commit fb18001
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 30 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"minimum-stability": "stable",
"require": {
"php": ">=5.5.0",
"phug/renderer": "^0.1.0"
"phug/renderer": "^0.2.0"
},
"require-dev": {
"phug/dev-tool": "^0.1.0"
Expand Down
66 changes: 48 additions & 18 deletions src/Phug/Phug.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ class Phug
*/
private static $extensions = [];

/**
* @var Renderer
*/
private static $renderer = null;

private static function normalizeFilterName($name)
{
return str_replace('-', '', strtolower($name));
Expand All @@ -24,6 +29,16 @@ private static function normalizeExtensionClassName($name)
return ltrim('\\', strtolower($name));
}

/**
* Reset all static options, filters and extensions.
*/
public static function reset()
{
static::$renderer = null;
static::$extensions = [];
static::$filters = [];
}

/**
* Get a renderer with global options and argument options merged.
*
Expand All @@ -33,58 +48,62 @@ private static function normalizeExtensionClassName($name)
*/
public static function getRenderer(array $options = [])
{
return new Renderer(array_merge_recursive(
[
'compiler_options' => [
if (!static::$renderer) {
static::$renderer = new Renderer(array_merge_recursive(
[
'filters' => static::getFilters(),
],
],
$options
));
$options
));
} elseif (!empty($options)) {
static::$renderer->setOptions($options);
}

return static::$renderer;
}

/**
* @param string $path path to template
* @param string $input pug source
* @param array $parameters variables values
* @param array $options custom options
*
* @return string
*/
public static function render($path, array $parameters = [], array $options = [])
public static function render($input, array $parameters = [], array $options = [])
{
return static::getRenderer($options)->render($path, $parameters);
return static::getRenderer($options)->render($input, $parameters);
}

/**
* @param string $input pug source
* @param string $path path to template
* @param array $parameters variables values
* @param array $options custom options
*
* @return string
*/
public static function renderString($input, array $parameters = [], array $options = [])
public static function renderFile($path, array $parameters = [], array $options = [])
{
return static::getRenderer($options)->renderString($input, $parameters);
return static::getRenderer($options)->renderFile($path, $parameters);
}

/**
* @param string $path path to template
* @param string $input pug source
* @param array $parameters variables values
* @param array $options custom options
*/
public static function display($path, array $parameters = [], array $options = [])
public static function display($input, array $parameters = [], array $options = [])
{
return static::getRenderer($options)->display($path, $parameters);
return static::getRenderer($options)->display($input, $parameters);
}

/**
* @param string $input pug source
* @param string $path path to template
* @param array $parameters variables values
* @param array $options custom options
*/
public static function displayString($input, array $parameters = [], array $options = [])
public static function displayFile($path, array $parameters = [], array $options = [])
{
return static::getRenderer($options)->displayString($input, $parameters);
return static::getRenderer($options)->displayFile($path, $parameters);
}

/**
Expand Down Expand Up @@ -117,6 +136,12 @@ class_exists($filter) ||
}

self::$filters[$name] = $filter;

if (static::$renderer) {
static::$renderer->setOptionsRecursive([
'filters' => self::$filters,
]);
}
}

/**
Expand Down Expand Up @@ -168,4 +193,9 @@ public static function getExtensions()
{
return self::$extensions;
}

public static function __callStatic($name, $arguments)
{
return call_user_func_array([static::getRenderer(), $name], $arguments);
}
}
26 changes: 15 additions & 11 deletions tests/Phug/PhugTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,32 @@ class PhugTest extends AbstractPhugTest
* @covers ::getRenderer
* @covers ::render
*/
public function testRender()
public function testRenderFile()
{
static::assertSame(
'<p>Hello world!</p>',
Phug::render(__DIR__.'/../templates/test.pug')
Phug::renderFile(__DIR__.'/../templates/test.pug')
);
}

/**
* @covers ::renderString
* @covers ::render
*/
public function testRenderString()
public function testRender()
{
static::assertSame(
'<section><div></div></section>',
Phug::renderString('section: div')
Phug::render('section: div')
);
}

/**
* @covers ::display
*/
public function testDisplay()
public function testDisplayFile()
{
ob_start();
Phug::display(__DIR__.'/../templates/test.pug');
Phug::displayFile(__DIR__.'/../templates/test.pug');
$actual = ob_get_contents();
ob_end_clean();

Expand All @@ -49,12 +49,12 @@ public function testDisplay()
}

/**
* @covers ::displayString
* @covers ::display
*/
public function testDisplayString()
public function testDisplay()
{
ob_start();
Phug::displayString('section: div');
Phug::display('section: div');
$actual = ob_get_contents();
ob_end_clean();

Expand All @@ -65,6 +65,7 @@ public function testDisplayString()
}

/**
* @covers ::reset
* @covers ::normalizeFilterName
* @covers ::hasFilter
* @covers ::addFilter
Expand All @@ -81,8 +82,11 @@ public function testFilters()
self::assertTrue(Phug::hasFilter('up-per'));
static::assertSame(
'WORD',
Phug::renderString(':upper word')
Phug::render(':upper word')
);
Phug::reset();
self::assertFalse(Phug::hasFilter('upper'));
self::assertFalse(Phug::hasFilter('up-per'));
}

/**
Expand Down

0 comments on commit fb18001

Please sign in to comment.