Skip to content

Commit 38dca53

Browse files
sallyxdg
authored andcommitted
NeonAdapter: fixed dump() for data with simple Nette\DI\Statement
Fixed support for chained entities Like: - ent(1) - ent(3)::inner(5)
1 parent 100040e commit 38dca53

File tree

3 files changed

+166
-0
lines changed

3 files changed

+166
-0
lines changed

src/DI/Config/Adapters/NeonAdapter.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,43 @@ public function dump(array $data)
9191
}
9292
$tmp[$name] = $secData;
9393
}
94+
array_walk_recursive(
95+
$tmp,
96+
function (& $val) {
97+
if ($val instanceof Statement) {
98+
$val = self::statementToEntity($val);
99+
}
100+
}
101+
);
102+
94103
return "# generated by Nette\n\n" . Neon\Neon::encode($tmp, Neon\Neon::BLOCK);
95104
}
96105

106+
107+
/**
108+
* @return Neon\Entity
109+
*/
110+
private static function statementToEntity(Statement $val)
111+
{
112+
array_walk_recursive(
113+
$val->arguments,
114+
function (& $val) {
115+
if ($val instanceof Statement) {
116+
$val = self::statementToEntity($val);
117+
}
118+
}
119+
);
120+
if (is_array($val->entity) && $val->entity[0] instanceof Statement) {
121+
return new Neon\Entity(
122+
Neon\Neon::CHAIN,
123+
[
124+
self::statementToEntity($val->entity[0]),
125+
new Neon\Entity('::' . $val->entity[1], $val->arguments)
126+
]
127+
);
128+
} else {
129+
return new Neon\Entity($val->entity, $val->arguments);
130+
}
131+
}
132+
97133
}

tests/DI/NeonAdapter.phpt

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,76 @@ Assert::equal([
134134
[5]
135135
),
136136
], $data);
137+
138+
139+
$data = $config->load('files/neonAdapter.entity.neon');
140+
$config->save($data, TEMP_FILE);
141+
Assert::match(<<<EOD
142+
# generated by Nette
143+
144+
- ent(1)
145+
- ent(2)::inner(3, 4)
146+
- ent(3)::inner(5)
147+
EOD
148+
, file_get_contents(TEMP_FILE));
149+
150+
151+
$data = $config->load('files/neonAdapter.save.neon');
152+
$config->save($data, TEMP_FILE);
153+
Assert::match(<<<'EOD'
154+
# generated by Nette
155+
156+
parameters:
157+
class: Ipsum
158+
159+
services:
160+
referencedService: @one
161+
referencedServiceWithSetup:
162+
factory: @one
163+
setup:
164+
- $x(10)
165+
166+
serviceAsParam: Ipsum(@one)
167+
calledService: @one()
168+
calledServiceWithArgs: @one(1)
169+
calledServiceAsParam: Ipsum(@one())
170+
calledServiceWithArgsAsParam: Ipsum(@one(1))
171+
one:
172+
class: %class%
173+
arguments:
174+
- 1
175+
176+
two:
177+
class: %class%(1)
178+
179+
three:
180+
class: Lorem
181+
create: Factory::createLorem
182+
arguments:
183+
- 1
184+
185+
four:
186+
create: Factory::createLorem(1)
187+
188+
five:
189+
create: [Factory, createLorem](1)
190+
191+
six: Factory::createLorem(1)
192+
seven: @factory
193+
eight: @factory()
194+
nine:
195+
- @three
196+
- foo
197+
198+
stdClass: stdClass
199+
factory: Lorem
200+
rich1: Lorem(1)::foo()
201+
rich2:
202+
create: Lorem(Ipsum(@one))::foo(1)
203+
204+
rich3: Factory::createLorem(1)::foo()
205+
rich4: Factory()::createLorem(1)::foo()
206+
0: Lorem(1)::foo()
207+
208+
EOD
209+
, file_get_contents(TEMP_FILE));
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
parameters:
2+
class: Ipsum
3+
4+
services:
5+
referencedService: @one
6+
7+
referencedServiceWithSetup:
8+
factory: @one
9+
setup:
10+
- $x(10)
11+
12+
serviceAsParam: Ipsum(@one)
13+
calledService: @one()
14+
calledServiceWithArgs: @one(1)
15+
calledServiceAsParam: Ipsum(@one())
16+
calledServiceWithArgsAsParam: Ipsum(@one(1))
17+
18+
one:
19+
class: %class%
20+
arguments: [1]
21+
22+
two:
23+
class: %class%(1)
24+
25+
three:
26+
class: Lorem
27+
create: Factory::createLorem
28+
arguments: [1]
29+
30+
four:
31+
create: Factory::createLorem(1)
32+
33+
five:
34+
create: [Factory, createLorem](1)
35+
36+
six: Factory::createLorem(1)
37+
38+
seven: @factory
39+
40+
eight: @factory()
41+
42+
nine: [@three, foo]
43+
44+
stdClass: stdClass
45+
46+
factory: Lorem
47+
48+
rich1: Lorem(1)::foo
49+
50+
rich2:
51+
create: Lorem(Ipsum(@one))::foo(1)
52+
53+
rich3: Factory::createLorem(1)::foo
54+
55+
rich4: Factory()::createLorem(1)::foo
56+
57+
- Lorem(1)::foo

0 commit comments

Comments
 (0)