/** * @test */ public function test_evaluate_field_with_formatting() { $obj = new Target\PrivateClass(new \DateTime('2015/12/13 14:15:36', new \DateTimeZone('Asia/Tokyo')), 'bb', 999, 12345, 'xyz'); $evaluator = new Strategy\ObjectFieldEvaluator($obj, []); $formatter = new \JsonEncoder\Formatter\DateTimeFormatter(); $this->assertEquals(['a' => '2015-12-13T14:15:36+0900', 'b' => 'bb'], $evaluator->evaluate(['a', 'b'], [\DateTime::class => $formatter])); }
/** * {inheritdoc} */ public function serialize($value, array $formatters) { if (!is_object($value)) { return []; } $evaluator = new ObjectFieldEvaluator($value); if ($this->rule->isFieldAllIncludes()) { $this->rule->includes($evaluator->listFields()); } return $evaluator->evaluate($this->rule->listIncludeFields(), $formatters); }
/** * {inheritdoc} */ public function serialize($value, array $formatters) { if (!is_object($value)) { return []; } $evaluator = new ObjectFieldEvaluator($value); $value1 = $this->builtin !== null ? $this->builtin->serialize($value, $formatters) : []; $value2 = array_reduce(array_keys($this->strategies), function (&$tmp, $f) use($evaluator, $formatters) { list($valid, $v) = $evaluator->evaluateField($f); return $valid ? $tmp + [$f => $this->strategies[$f]->serialize($v, $formatters)] : $tmp; }, []); return $value1 + $value2; }