Skip to content

Commit 8800131

Browse files
committed
Refactor to decouple from Twig
1 parent 35add09 commit 8800131

File tree

3 files changed

+76
-17
lines changed

3 files changed

+76
-17
lines changed

src/aleksip/DataTransformPlugin/DataTransformer.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,24 @@
22

33
namespace aleksip\DataTransformPlugin;
44

5+
use aleksip\DataTransformPlugin\Renderer;
56
use Drupal\Core\Template\Attribute;
67
use Drupal\Core\Url;
78
use PatternLab\Data;
89
use PatternLab\PatternData;
910

1011
class PatternNotFoundException extends \Exception {}
1112

13+
/**
14+
* @author Aleksi Peebles <[email protected]>
15+
*/
1216
class DataTransformer
1317
{
1418
protected static $processed = array();
1519

1620
protected $reservedKeys;
1721
protected $patternDataStore;
18-
protected $env;
22+
protected $renderer;
1923
protected $hasRun;
2024

2125
public function __construct()
@@ -25,12 +29,12 @@ public function __construct()
2529
$this->patternDataStore = PatternData::get();
2630
}
2731

28-
public function run(\Twig_Environment $env)
32+
public function run(Renderer $renderer)
2933
{
30-
$this->env = $env;
3134
if ($this->hasRun) {
3235
return;
3336
}
37+
$this->renderer = $renderer;
3438
// Process global data.
3539
$dataStore = $this->processData(Data::get());
3640
Data::replaceStore($dataStore);
@@ -158,7 +162,7 @@ protected function renderPattern($pattern, $data)
158162
foreach (array_keys($data) as $key) {
159163
$data = $this->cloneObjects($data, $key);
160164
}
161-
$pattern = $this->env->render(
165+
$pattern = $this->renderer->render(
162166
$this->patternDataStore[$pattern]['patternRaw'],
163167
$data
164168
);

src/aleksip/DataTransformPlugin/PatternLabListener.php

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,60 @@
55
use aleksip\DataTransformPlugin\Twig\PatternDataNodeVisitor;
66
use PatternLab\Config;
77
use PatternLab\Listener;
8+
use PatternLab\PatternEngine;
89
use PatternLab\PatternEngine\Twig\TwigUtil;
910

11+
/**
12+
* @author Aleksi Peebles <[email protected]>
13+
*/
1014
class PatternLabListener extends Listener
1115
{
12-
protected $dt;
13-
protected $nv;
16+
/**
17+
* @var DataTransformer
18+
*/
19+
protected $dataTransformer;
1420

1521
public function __construct()
1622
{
17-
$this->addListener(
18-
'twigPatternLoader.customize',
19-
'twigPatternLoaderCustomize'
20-
);
23+
$this->addListener('patternData.codeHelperStart', 'dataTransformer');
24+
$this->addListener('twigPatternLoader.customize', 'addNodeVisitor');
2125
}
2226

23-
public function twigPatternLoaderCustomize()
27+
public function dataTransformer()
2428
{
25-
$enabled = Config::getOption('plugins.dataTransform.enabled');
26-
if (!is_null($enabled) && !((bool)$enabled)) {
29+
if (!$this->isEnabled()) {
2730
return;
2831
}
2932

30-
$this->dt ?: $this->dt = new DataTransformer();
31-
$this->nv ?: $this->nv = new PatternDataNodeVisitor($this->dt);
33+
$this->dataTransformer = new DataTransformer();
34+
35+
if (Config::getOption('patternExtension') !== 'twig') {
36+
$patternEngineBasePath = PatternEngine::getInstance()->getBasePath();
37+
$patternLoaderClass = $patternEngineBasePath.'\Loaders\PatternLoader';
38+
$patternLoader = new $patternLoaderClass(array());
39+
$this->dataTransformer->run(new Renderer($patternLoader));
40+
}
41+
}
42+
43+
public function addNodeVisitor()
44+
{
45+
if (!$this->isEnabled()) {
46+
return;
47+
}
48+
49+
$nodeVisitor = new PatternDataNodeVisitor($this->dataTransformer);
3250

3351
$env = TwigUtil::getInstance();
34-
$env->addNodeVisitor($this->nv);
52+
$env->addNodeVisitor($this->nodeVisitor);
3553
TwigUtil::setInstance($env);
36-
$this->dt->run($env);
54+
55+
$this->dataTransformer->run(new Renderer($env));
56+
}
57+
58+
protected function isEnabled()
59+
{
60+
$enabled = Config::getOption('plugins.dataTransform.enabled');
61+
62+
return (is_null($enabled) || (bool)$enabled);
3763
}
3864
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace aleksip\DataTransformPlugin;
4+
5+
/**
6+
* @author Aleksi Peebles <[email protected]>
7+
*/
8+
class Renderer
9+
{
10+
protected $renderer;
11+
12+
public function __construct($renderer)
13+
{
14+
$this->renderer = $renderer;
15+
}
16+
17+
public function render($pattern, $data = array())
18+
{
19+
if ($this->renderer instanceof \Twig_Environment) {
20+
return $this->renderer->render($pattern, $data);
21+
}
22+
else {
23+
return $this->renderer->render(array(
24+
'pattern' => $pattern,
25+
'data' => $data,
26+
));
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)