Skip to content

Commit d99c0ad

Browse files
authored
Allow properties mapping in reflected names (#125)
1 parent d0126bd commit d99c0ad

File tree

4 files changed

+37
-7
lines changed

4 files changed

+37
-7
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,19 @@ class Order implements ClassStructureContract
249249
$properties->dateTime->format = Format::DATE_TIME;
250250
$properties->price = Schema::number();
251251

252-
$ownerSchema->required[] = self::names()->id;
252+
$ownerSchema->setFromRef('#/definitions/order');
253253

254254
// Define default mapping if any
255255
$ownerSchema->addPropertyMapping('date_time', Order::names()->dateTime);
256256

257+
// Use mapped name references after the default mapping was configured.
258+
$names = self::names($ownerSchema->properties);
259+
$ownerSchema->required = array(
260+
$names->id,
261+
$names->dateTime,
262+
$names->price
263+
);
264+
257265
// Define additional mapping
258266
$ownerSchema->addPropertyMapping('DaTe_TiMe', Order::names()->dateTime, self::FANCY_MAPPING);
259267
$ownerSchema->addPropertyMapping('Id', Order::names()->id, self::FANCY_MAPPING);

src/NameMirror.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,23 @@
44

55
class NameMirror
66
{
7+
/**
8+
* NameMirror constructor.
9+
* @param null|string[] $mapping a map of propertyName to dataName
10+
*/
11+
public function __construct($mapping = null)
12+
{
13+
$this->mapping = $mapping;
14+
}
15+
16+
private $mapping;
17+
718
public function __get($name)
819
{
20+
if ($this->mapping !== null && isset($this->mapping[$name])) {
21+
return $this->mapping[$name];
22+
}
23+
924
return $name;
1025
}
1126

src/Structure/ClassStructureTrait.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,12 @@ public function jsonSerialize()
146146
/**
147147
* @return static|NameMirror
148148
*/
149-
public static function names()
149+
public static function names(Properties $properties = null, $mapping = Schema::DEFAULT_MAPPING)
150150
{
151+
if ($properties !== null) {
152+
return new NameMirror($properties->getDataKeyMap($mapping));
153+
}
154+
151155
static $nameflector = null;
152156
if (null === $nameflector) {
153157
$nameflector = new NameMirror();

tests/src/Helper/Order.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,19 @@ public static function setUpProperties($properties, Schema $ownerSchema)
3737
$properties->dateTime->format = Format::DATE_TIME;
3838
$properties->price = Schema::number();
3939

40-
$ownerSchema->required = array(
41-
self::names()->id,
42-
'date_time',
43-
self::names()->price
44-
);
4540
$ownerSchema->setFromRef('#/definitions/order');
4641

4742
// Define default mapping if any
4843
$ownerSchema->addPropertyMapping('date_time', Order::names()->dateTime);
4944

45+
// Use mapped name references after the default mapping was configured.
46+
$names = self::names($ownerSchema->properties);
47+
$ownerSchema->required = array(
48+
$names->id,
49+
$names->dateTime,
50+
$names->price
51+
);
52+
5053
// Define additional mapping
5154
$ownerSchema->addPropertyMapping('DaTe_TiMe', Order::names()->dateTime, self::FANCY_MAPPING);
5255
$ownerSchema->addPropertyMapping('Id', Order::names()->id, self::FANCY_MAPPING);

0 commit comments

Comments
 (0)