Skip to content

Commit

Permalink
Transformers can translate labels and descriptions [fix #8]
Browse files Browse the repository at this point in the history
  • Loading branch information
nacmartin committed Jun 9, 2017
1 parent 8ba0fa2 commit 0903102
Show file tree
Hide file tree
Showing 13 changed files with 70 additions and 78 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
}
},
"require": {
"symfony/form": "~2.3|~3.0"
"symfony/form": "~2.3|~3.0",
"symfony/translation": "^3.3"
},
"require-dev": {
"squizlabs/php_codesniffer": "^2.5",
Expand Down
38 changes: 1 addition & 37 deletions src/Limenius/Liform/Resolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public function resolve(FormInterface $form)
// Perhaps a compound we don't have a specific transformer for
if (FormUtil::isCompound($form)) {
return [
'transformer' => new Transformer\CompoundTransformer($this),
'transformer' => $this->transformers['compound']['transformer'],
'widget' => null,
];
}
Expand All @@ -58,40 +58,4 @@ public function resolve(FormInterface $form)
)
);
}

/**
* Set a sensible choice of default transformers to reduce boilerplate
* when using this library
*
*/
public function setDefaultTransformers()
{
$compoundTransformer = new Transformer\CompoundTransformer($this);
$arrayTransformer = new Transformer\ArrayTransformer($this);
$integerTransformer = new Transformer\IntegerTransformer();
$choiceTransformer = new Transformer\ChoiceTransformer();
$stringTransformer = new Transformer\StringTransformer();
$numberTransformer = new Transformer\NumberTransformer();
$booleanTransformer = new Transformer\BooleanTransformer();

$this->setTransformer('compound', $compoundTransformer);
$this->setTransformer('integer', $integerTransformer);
$this->setTransformer('text', $stringTransformer);
$this->setTransformer('textarea', $stringTransformer, 'textarea');
$this->setTransformer('password', $stringTransformer, 'password');
$this->setTransformer('money', $stringTransformer, 'money');
$this->setTransformer('number', $numberTransformer);
$this->setTransformer('choice', $choiceTransformer);
$this->setTransformer('search', $stringTransformer, 'search');
$this->setTransformer('url', $stringTransformer, 'url');
$this->setTransformer('checkbox', $booleanTransformer);
$this->setTransformer('collection', $arrayTransformer);
$this->setTransformer('money', $stringTransformer, 'money');
$this->setTransformer('time', $stringTransformer);
$this->setTransformer('percent', $stringTransformer, 'percent');
$this->setTransformer('email', $stringTransformer, 'email');
$this->setTransformer('date', $stringTransformer, 'date');
$this->setTransformer('datetime', $stringTransformer, 'datetime');
$this->setTransformer('time', $stringTransformer, 'time');
}
}
21 changes: 18 additions & 3 deletions src/Limenius/Liform/Transformer/AbstractTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,21 @@
*/
abstract class AbstractTransformer
{
protected $translator;
protected $validatorGuesser;

/**
* __construct
*
* @param mixed $translator
* @param mixed $validatorGuesser
*/
public function __construct($translator, $validatorGuesser = null)
{
$this->translator = $translator;
$this->validatorGuesser = $validatorGuesser;
}

/**
* @param FormInterface $form
* @param array $extensions
Expand Down Expand Up @@ -102,9 +117,9 @@ protected function addPattern($form, $schema)
protected function addLabel($form, $schema)
{
if ($label = $form->getConfig()->getOption('label')) {
$schema['title'] = $label;
$schema['title'] = $this->translator->trans($label);
} else {
$schema['title'] = $form->getName();
$schema['title'] = $this->translator->trans($form->getName());
}

return $schema;
Expand Down Expand Up @@ -135,7 +150,7 @@ protected function addDescription($form, $schema)
{
if ($liform = $form->getConfig()->getOption('liform')) {
if (isset($liform['description']) && $description = $liform['description']) {
$schema['description'] = $description;
$schema['description'] = $this->translator->trans($description);
}
}

Expand Down
7 changes: 6 additions & 1 deletion src/Limenius/Liform/Transformer/ArrayTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,18 @@
*/
class ArrayTransformer extends AbstractTransformer
{
protected $resolver;

/**
* __construct
*
* @param mixed $translator
* @param mixed $validatorGuesser
* @param mixed $resolver
*/
public function __construct($resolver)
public function __construct($translator, $validatorGuesser, $resolver)
{
parent::__construct($translator, $validatorGuesser);
$this->resolver = $resolver;
}

Expand Down
7 changes: 6 additions & 1 deletion src/Limenius/Liform/Transformer/CompoundTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,18 @@
*/
class CompoundTransformer extends AbstractTransformer
{
protected $resolver;

/**
* __construct
*
* @param mixed $translator
* @param mixed $validatorGuesser
* @param mixed $resolver
*/
public function __construct($resolver)
public function __construct($translator, $validatorGuesser, $resolver)
{
parent::__construct($translator, $validatorGuesser);
$this->resolver = $resolver;
}

Expand Down
12 changes: 0 additions & 12 deletions src/Limenius/Liform/Transformer/StringTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,6 @@
*/
class StringTransformer extends AbstractTransformer
{
protected $validatorGuesser;

/**
* __construct
*
* @param mixed $validatorGuesser
*/
public function __construct($validatorGuesser = null)
{
$this->validatorGuesser = $validatorGuesser;
}

/**
* transform
*
Expand Down
8 changes: 8 additions & 0 deletions tests/Limenius/Liform/Tests/LiformTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use PHPUnit\Framework\TestCase;
use Symfony\Component\Form\Forms;
use Limenius\Liform\Form\Extension\AddLiformExtension;
use Symfony\Component\Translation\Translator;

/**
*
Expand All @@ -19,12 +20,19 @@ class LiformTestCase extends TestCase
*/
protected $factory;

/**
* @var Translator
*/
protected $translator;

protected function setUp()
{
$ext = new AddLiformExtension();
$this->factory = Forms::createFormFactoryBuilder()
->addExtensions([])
->addTypeExtensions([$ext])
->getFormFactory();

$this->translator = $this->createMock(Translator::class);
}
}
4 changes: 3 additions & 1 deletion tests/Limenius/Liform/Tests/ResolverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Limenius\Liform\Resolver;
use Limenius\Liform\Exception\TransformerException;
use Limenius\Liform\Transformer\StringTransformer;
use Symfony\Component\Form\Test\TypeTestCase;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
Expand Down Expand Up @@ -43,7 +44,8 @@ public function testCannotResolve()
public function testResolve()
{
$resolver = new Resolver();
$resolver->setDefaultTransformers();
$stub = $this->createMock(StringTransformer::class);
$resolver->setTransformer('text', $stub);
$form = $this->factory->create(TextType::class);
$this->assertArrayHasKey('transformer', $resolver->resolve($form));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ public function testPattern()
]
);
$resolver = new Resolver();
$resolver->setTransformer('choice', new Transformer\ChoiceTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('choice', new Transformer\ChoiceTransformer($this->translator, null));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);
$this->assertTrue(is_array($transformed));
$this->assertArrayHasKey('enum_titles', $transformed['properties']['firstName']);
Expand Down
28 changes: 16 additions & 12 deletions tests/Limenius/Liform/Tests/Transformer/CommonTransformerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ public function testRequired()
['required' => true]
);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('text', new StringTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);

$this->assertTrue(is_array($transformed));
Expand All @@ -52,8 +52,8 @@ public function testDescription()
['liform' => ['description' => 'A word that references you in the hash of the world']]
);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('text', new StringTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);

$this->assertTrue(is_array($transformed));
Expand All @@ -73,8 +73,12 @@ public function testLabel()
['label' => 'a label']
);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('text', new StringTransformer($this->translator));
$this->translator
->expects($this->exactly(2))
->method('trans')
->willReturn('a label');
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);

$this->assertTrue(is_array($transformed));
Expand All @@ -95,8 +99,8 @@ public function testPlaceholder()
['attr' => ['placeholder' => 'default value']]
);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('text', new StringTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);

$this->assertTrue(is_array($transformed));
Expand All @@ -116,8 +120,8 @@ public function testWidget()
['liform' => ['widget' => 'my widget']]
);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('text', new StringTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);

$this->assertTrue(is_array($transformed));
Expand All @@ -136,8 +140,8 @@ public function testWidgetViaTransformerDefinition()
TextType::class
);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer(), 'widg');
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('text', new StringTransformer($this->translator), 'widg');
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);

$this->assertTrue(is_array($transformed));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
use Symfony\Component\Form\Tests\AbstractFormTest;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Test\TypeTestCase;

use Limenius\Liform\Transformer\CompoundTransformer;
use Limenius\Liform\Transformer\StringTransformer;
use Limenius\Liform\Resolver;
use Limenius\Liform\Tests\LiformTestCase;

/**
* Class: CompoundTransformerTest
*
* @see TypeTestCase
*/
class CompoundTransformerTest extends TypeTestCase
class CompoundTransformerTest extends LiformTestCase
{

/**
Expand All @@ -32,8 +32,8 @@ public function testOrder()
->add('firstName', TextType::class)
->add('secondName', TextType::class);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('text', new StringTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);
$this->assertTrue(is_array($transformed));
$this->assertEquals(1, $transformed['properties']['firstName']['propertyOrder']);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ public function testPattern()
['liform' => ['widget' => 'widget']]
);
$resolver = new Resolver();
$resolver->setTransformer('number', new NumberTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('number', new NumberTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);
$this->assertTrue(is_array($transformed));
$this->assertEquals('number', $transformed['properties']['somefield']['type']);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ public function testPattern()
['attr' => ['pattern' => '.{5,}' ]]
);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer());
$transformer = new CompoundTransformer($resolver);
$resolver->setTransformer('text', new StringTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);
$this->assertTrue(is_array($transformed));
$this->assertEquals('.{5,}', $transformed['properties']['firstName']['pattern']);
Expand Down

0 comments on commit 0903102

Please sign in to comment.