Skip to content

Commit

Permalink
Parameters should convert Value objects to their values up front, so …
Browse files Browse the repository at this point in the history
…all the methods (all, except, etc) will give you augmented values instead of just get().
  • Loading branch information
jasonvarga committed Jun 26, 2020
1 parent 54ea91d commit 2c1489a
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 21 deletions.
11 changes: 4 additions & 7 deletions src/Tags/Parameters.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ public static function make($items = [], $context = null)
$value = $context->get($value, $value);
}

if ($value instanceof Value) {
$value = $value->value();
}

if ($value === 'true') {
$value = true;
}
Expand All @@ -34,11 +38,4 @@ public static function make($items = [], $context = null)

return parent::make($items);
}

public function get($keys, $default = null)
{
$value = parent::get($keys, $default);

return $value instanceof Value ? $value->value() : $value;
}
}
42 changes: 28 additions & 14 deletions tests/Tags/ParametersTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tests\Tags;

use Statamic\Fields\Fieldtype;
use Statamic\Fields\Field;
use Statamic\Fields\Value;
use Statamic\Tags\Context;
use Statamic\Tags\Parameters;
Expand All @@ -21,6 +21,13 @@ public function setUp(): void
],
]);

$fieldtype = new class extends \Statamic\Fields\Fieldtype {
public function augment($value)
{
return 'augmented '.$value;
}
};

$this->params = Parameters::make([
'string' => 'hello',
'array' => ['one', 'two'],
Expand All @@ -35,6 +42,17 @@ public function setUp(): void
'truthy' => 'true',
'falsey' => 'false',
'list' => 'one|two',
'value' => $this->value = new Value('foo', 'value', $fieldtype),
'antlersValue' => $this->antlersValue = new Value(
'parse {{ string }} antlers',
'antlersValue',
(clone $fieldtype)->setField(new Field('antlersValue', ['antlers' => true]))
),
'nonAntlersValue' => $this->nonAntlersValue = new Value(
'dont parse {{ string }} antlers',
'nonAntlersValue',
(clone $fieldtype)->setField(new Field('nonAntlersValue', ['antlers' => false]))
),
], $context);
}

Expand All @@ -55,6 +73,9 @@ public function it_gets_all_parameters()
'truthy' => true,
'falsey' => false,
'list' => 'one|two',
'value' => 'augmented foo',
'antlersValue' => 'augmented parse {{ string }} antlers',
'nonAntlersValue' => 'augmented dont parse {{ string }} antlers',
], $this->params->all());
}

Expand All @@ -72,19 +93,9 @@ public function it_gets_a_parameter()
$this->assertEquals(true, $this->params->get('truthy'));
$this->assertEquals(false, $this->params->get('falsey'));
$this->assertEquals('one|two', $this->params->get('list'));
}

/** @test */
public function it_gets_a_value_objects_value()
{
$fieldtype = $this->partialMock(Fieldtype::class);
$fieldtype->shouldReceive('augment')->with('the raw value')->andReturn('the augmented value');
$value = new Value('the raw value', 'test', $fieldtype);

$params = Parameters::make(['test' => $value], new Context);

$this->assertIsString($params->get('test'));
$this->assertSame('the augmented value', $params->get('test'));
$this->assertSame('augmented foo', $this->params->get('value'));
$this->assertSame('augmented parse {{ string }} antlers', $this->params->get('antlersValue'));
$this->assertSame('augmented dont parse {{ string }} antlers', $this->params->get('nonAntlersValue'));
}

/** @test */
Expand Down Expand Up @@ -197,6 +208,9 @@ public function it_is_iterable()
'truthy' => true,
'falsey' => false,
'list' => 'one|two',
'value' => 'augmented foo',
'antlersValue' => 'augmented parse {{ string }} antlers',
'nonAntlersValue' => 'augmented dont parse {{ string }} antlers',
];

$actual = [];
Expand Down

0 comments on commit 2c1489a

Please sign in to comment.