Skip to content

Commit 2a8d8e1

Browse files
authored
Add method to swap registered generators (#238)
1 parent 80e4761 commit 2a8d8e1

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/Blueprint.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,15 @@ public function registerGenerator(Generator $generator)
9191
{
9292
$this->generators[] = $generator;
9393
}
94+
95+
public function swapGenerator(string $concrete, Generator $generator)
96+
{
97+
foreach ($this->generators as $key => $registeredGenerator) {
98+
if (get_class($registeredGenerator) === $concrete) {
99+
unset($this->generators[$key]);
100+
}
101+
}
102+
103+
$this->registerGenerator($generator);
104+
}
94105
}

tests/Feature/BlueprintTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,34 @@ public function generate_uses_registered_generators_and_returns_generated_files(
355355
], $this->subject->generate($tree));
356356
}
357357

358+
/**
359+
* @test
360+
*/
361+
public function generate_uses_swapped_generator_and_returns_generated_files()
362+
{
363+
$generatorOne = \Mockery::mock(Generator::class);
364+
$tree = ['branch' => ['code', 'attributes']];
365+
$generatorOne->expects('output')->never();
366+
367+
$generatorSwap = \Mockery::mock(Generator::class);
368+
$generatorSwap->expects('output')
369+
->with($tree)
370+
->andReturn([
371+
'created' => ['swapped/new.php'],
372+
'updated' => ['swapped/existing.php'],
373+
'deleted' => ['swapped/trashed.php']
374+
]);
375+
376+
$this->subject->registerGenerator($generatorOne);
377+
$this->subject->swapGenerator(get_class($generatorOne), $generatorSwap);
378+
379+
$this->assertEquals([
380+
'created' => ['swapped/new.php'],
381+
'updated' => ['swapped/existing.php'],
382+
'deleted' => ['swapped/trashed.php'],
383+
], $this->subject->generate($tree));
384+
}
385+
358386
/**
359387
* @test
360388
* @dataProvider namespacesDataProvider

0 commit comments

Comments
 (0)