Skip to content

Commit bb0dd93

Browse files
committed
Refactor back to seperate classes for cloud/cli shorts
1 parent 582e1ce commit bb0dd93

File tree

14 files changed

+205
-187
lines changed

14 files changed

+205
-187
lines changed

app/config.php

Lines changed: 65 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -3,108 +3,109 @@
33
declare(strict_types=1);
44

55
use Colors\Color;
6-
use League\CommonMark\ElementRendererInterface;
7-
use PhpSchool\CliMdRenderer\CliExtension;
8-
use PhpSchool\CliMdRenderer\CliRenderer;
9-
use PhpSchool\PhpWorkshop\Check\FileComparisonCheck;
10-
use PhpSchool\PhpWorkshop\ExerciseRunner\Factory\ServerRunnerFactory;
11-
use PhpSchool\PhpWorkshop\Listener\InitialCodeListener;
12-
use PhpSchool\PhpWorkshop\Listener\OutputRunInfoListener;
13-
use PhpSchool\PhpWorkshop\Listener\TearDownListener;
14-
use PhpSchool\PhpWorkshop\Logger\ConsoleLogger;
15-
use PhpSchool\PhpWorkshop\Logger\Logger;
16-
use PhpSchool\PhpWorkshop\Markdown\Parser\ContextSpecificBlockParser;
17-
use PhpSchool\PhpWorkshop\Markdown\ProblemFileExtension;
18-
use PhpSchool\PhpWorkshop\Markdown\Renderer\ContextSpecificRenderer;
19-
use PhpSchool\PhpWorkshop\Markdown\Shorthands\AppName;
20-
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Context;
21-
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Documentation;
22-
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Run;
23-
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Verify;
24-
use PhpSchool\PhpWorkshop\Result\ComposerFailure;
25-
use PhpSchool\PhpWorkshop\Result\FileComparisonFailure;
26-
use PhpSchool\PhpWorkshop\ResultRenderer\ComposerFailureRenderer;
27-
use PhpSchool\PhpWorkshop\ResultRenderer\FileComparisonFailureRenderer;
28-
use PhpSchool\PhpWorkshop\UserState\LocalJsonSerializer;
29-
use Psr\Log\LoggerInterface;
30-
use function DI\create;
31-
use function DI\factory;
6+
use Faker\Factory as FakerFactory;
7+
use Faker\Generator as FakerGenerator;
328
use Kadet\Highlighter\KeyLighter;
33-
use function PhpSchool\PhpWorkshop\canonicalise_path;
34-
use function PhpSchool\PhpWorkshop\Event\containerListener;
35-
use Psr\Container\ContainerInterface;
369
use League\CommonMark\DocParser;
10+
use League\CommonMark\ElementRendererInterface;
3711
use League\CommonMark\Environment;
38-
use PhpParser\PrettyPrinter\Standard;
39-
use PhpSchool\CliMenu\Terminal\TerminalFactory;
40-
use PhpSchool\Terminal\Terminal;
4112
use PhpParser\Parser;
4213
use PhpParser\ParserFactory;
14+
use PhpParser\PrettyPrinter\Standard;
15+
use PhpSchool\CliMdRenderer\CliExtension;
16+
use PhpSchool\CliMdRenderer\CliRenderer;
17+
use PhpSchool\CliMenu\Terminal\TerminalFactory;
4318
use PhpSchool\PhpWorkshop\Check\CheckRepository;
19+
use PhpSchool\PhpWorkshop\Check\CodeExistsCheck;
4420
use PhpSchool\PhpWorkshop\Check\CodeParseCheck;
4521
use PhpSchool\PhpWorkshop\Check\ComposerCheck;
4622
use PhpSchool\PhpWorkshop\Check\DatabaseCheck;
23+
use PhpSchool\PhpWorkshop\Check\FileComparisonCheck;
24+
use PhpSchool\PhpWorkshop\Check\FileExistsCheck;
25+
use PhpSchool\PhpWorkshop\Check\FunctionRequirementsCheck;
26+
use PhpSchool\PhpWorkshop\Check\PhpLintCheck;
4727
use PhpSchool\PhpWorkshop\CodeInsertion as Insertion;
4828
use PhpSchool\PhpWorkshop\CodePatcher;
29+
use PhpSchool\PhpWorkshop\Command\CreditsCommand;
30+
use PhpSchool\PhpWorkshop\Command\HelpCommand;
31+
use PhpSchool\PhpWorkshop\Command\MenuCommand;
32+
use PhpSchool\PhpWorkshop\Command\PrintCommand;
33+
use PhpSchool\PhpWorkshop\Command\RunCommand;
34+
use PhpSchool\PhpWorkshop\Command\VerifyCommand;
35+
use PhpSchool\PhpWorkshop\CommandDefinition;
36+
use PhpSchool\PhpWorkshop\CommandRouter;
4937
use PhpSchool\PhpWorkshop\Event\EventDispatcher;
5038
use PhpSchool\PhpWorkshop\ExerciseDispatcher;
39+
use PhpSchool\PhpWorkshop\ExerciseRenderer;
40+
use PhpSchool\PhpWorkshop\ExerciseRepository;
5141
use PhpSchool\PhpWorkshop\ExerciseRunner\Factory\CgiRunnerFactory;
5242
use PhpSchool\PhpWorkshop\ExerciseRunner\Factory\CliRunnerFactory;
5343
use PhpSchool\PhpWorkshop\ExerciseRunner\Factory\CustomVerifyingRunnerFactory;
44+
use PhpSchool\PhpWorkshop\ExerciseRunner\Factory\ServerRunnerFactory;
5445
use PhpSchool\PhpWorkshop\ExerciseRunner\RunnerManager;
5546
use PhpSchool\PhpWorkshop\Factory\EventDispatcherFactory;
5647
use PhpSchool\PhpWorkshop\Factory\MenuFactory;
5748
use PhpSchool\PhpWorkshop\Factory\ResultRendererFactory;
5849
use PhpSchool\PhpWorkshop\Listener\CheckExerciseAssignedListener;
5950
use PhpSchool\PhpWorkshop\Listener\CodePatchListener;
6051
use PhpSchool\PhpWorkshop\Listener\ConfigureCommandListener;
52+
use PhpSchool\PhpWorkshop\Listener\InitialCodeListener;
53+
use PhpSchool\PhpWorkshop\Listener\OutputRunInfoListener;
6154
use PhpSchool\PhpWorkshop\Listener\PrepareSolutionListener;
6255
use PhpSchool\PhpWorkshop\Listener\RealPathListener;
6356
use PhpSchool\PhpWorkshop\Listener\SelfCheckListener;
57+
use PhpSchool\PhpWorkshop\Listener\TearDownListener;
58+
use PhpSchool\PhpWorkshop\Logger\ConsoleLogger;
59+
use PhpSchool\PhpWorkshop\Logger\Logger;
60+
use PhpSchool\PhpWorkshop\Markdown\CurrentContext;
61+
use PhpSchool\PhpWorkshop\Markdown\Parser\ContextSpecificBlockParser;
62+
use PhpSchool\PhpWorkshop\Markdown\ProblemFileExtension;
63+
use PhpSchool\PhpWorkshop\Markdown\Renderer\ContextSpecificRenderer;
64+
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Cli\AppName;
65+
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Cli\Run;
66+
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Cli\Verify;
67+
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Context;
68+
use PhpSchool\PhpWorkshop\Markdown\Shorthands\Documentation;
69+
use PhpSchool\PhpWorkshop\MarkdownRenderer;
6470
use PhpSchool\PhpWorkshop\MenuItem\ResetProgress;
6571
use PhpSchool\PhpWorkshop\Output\OutputInterface;
6672
use PhpSchool\PhpWorkshop\Output\StdOutput;
6773
use PhpSchool\PhpWorkshop\Patch;
74+
use PhpSchool\PhpWorkshop\Result\Cgi\CgiResult;
6875
use PhpSchool\PhpWorkshop\Result\Cgi\GenericFailure as CgiGenericFailure;
6976
use PhpSchool\PhpWorkshop\Result\Cgi\RequestFailure as CgiRequestFailure;
70-
use PhpSchool\PhpWorkshop\Result\Cgi\CgiResult;
7177
use PhpSchool\PhpWorkshop\Result\Cli\CliResult;
7278
use PhpSchool\PhpWorkshop\Result\Cli\GenericFailure as CliGenericFailure;
7379
use PhpSchool\PhpWorkshop\Result\Cli\RequestFailure as CliRequestFailure;
7480
use PhpSchool\PhpWorkshop\Result\ComparisonFailure;
81+
use PhpSchool\PhpWorkshop\Result\ComposerFailure;
7582
use PhpSchool\PhpWorkshop\Result\Failure;
83+
use PhpSchool\PhpWorkshop\Result\FileComparisonFailure;
7684
use PhpSchool\PhpWorkshop\Result\FunctionRequirementsFailure;
7785
use PhpSchool\PhpWorkshop\ResultAggregator;
86+
use PhpSchool\PhpWorkshop\ResultRenderer\Cgi\RequestFailureRenderer as CgiRequestFailureRenderer;
7887
use PhpSchool\PhpWorkshop\ResultRenderer\CgiResultRenderer;
88+
use PhpSchool\PhpWorkshop\ResultRenderer\Cli\RequestFailureRenderer as CliRequestFailureRenderer;
7989
use PhpSchool\PhpWorkshop\ResultRenderer\CliResultRenderer;
8090
use PhpSchool\PhpWorkshop\ResultRenderer\ComparisonFailureRenderer;
91+
use PhpSchool\PhpWorkshop\ResultRenderer\ComposerFailureRenderer;
8192
use PhpSchool\PhpWorkshop\ResultRenderer\FailureRenderer;
93+
use PhpSchool\PhpWorkshop\ResultRenderer\FileComparisonFailureRenderer;
8294
use PhpSchool\PhpWorkshop\ResultRenderer\FunctionRequirementsFailureRenderer;
83-
use PhpSchool\PhpWorkshop\ResultRenderer\Cli\RequestFailureRenderer as CliRequestFailureRenderer;
84-
use PhpSchool\PhpWorkshop\ResultRenderer\Cgi\RequestFailureRenderer as CgiRequestFailureRenderer;
85-
use PhpSchool\PhpWorkshop\Utils\RequestRenderer;
86-
use PhpSchool\PhpWorkshop\WorkshopType;
87-
use PhpSchool\PhpWorkshop\Check\FileExistsCheck;
88-
use PhpSchool\PhpWorkshop\Check\CodeExistsCheck;
89-
use PhpSchool\PhpWorkshop\Check\FunctionRequirementsCheck;
90-
use PhpSchool\PhpWorkshop\Check\PhpLintCheck;
91-
use PhpSchool\PhpWorkshop\Command\CreditsCommand;
92-
use PhpSchool\PhpWorkshop\Command\HelpCommand;
93-
use PhpSchool\PhpWorkshop\Command\MenuCommand;
94-
use PhpSchool\PhpWorkshop\Command\PrintCommand;
95-
use PhpSchool\PhpWorkshop\Command\VerifyCommand;
96-
use PhpSchool\PhpWorkshop\Command\RunCommand;
97-
use PhpSchool\PhpWorkshop\CommandDefinition;
98-
use PhpSchool\PhpWorkshop\CommandRouter;
99-
use PhpSchool\PhpWorkshop\ExerciseRenderer;
100-
use PhpSchool\PhpWorkshop\ExerciseRepository;
101-
use PhpSchool\PhpWorkshop\MarkdownRenderer;
10295
use PhpSchool\PhpWorkshop\ResultRenderer\ResultsRenderer;
103-
use PhpSchool\PhpWorkshop\UserState\UserState;
96+
use PhpSchool\PhpWorkshop\UserState\LocalJsonSerializer;
10497
use PhpSchool\PhpWorkshop\UserState\Serializer;
98+
use PhpSchool\PhpWorkshop\UserState\UserState;
99+
use PhpSchool\PhpWorkshop\Utils\RequestRenderer;
100+
use PhpSchool\PhpWorkshop\WorkshopType;
101+
use PhpSchool\Terminal\Terminal;
102+
use Psr\Container\ContainerInterface;
103+
use Psr\Log\LoggerInterface;
105104
use Symfony\Component\Filesystem\Filesystem;
106-
use Faker\Factory as FakerFactory;
107-
use Faker\Generator as FakerGenerator;
105+
use function DI\create;
106+
use function DI\factory;
107+
use function PhpSchool\PhpWorkshop\canonicalise_path;
108+
use function PhpSchool\PhpWorkshop\Event\containerListener;
108109

109110
return [
110111
'appName' => basename($_SERVER['argv'][0] ?? 'phpschool'),
@@ -327,11 +328,14 @@
327328
$c->get(OutputInterface::class)
328329
);
329330
},
330-
ContextSpecificRenderer::class => function () {
331-
return new ContextSpecificRenderer(ContextSpecificBlockParser::CLI_TYPE);
331+
ContextSpecificRenderer::class => function (ContainerInterface $c) {
332+
return new ContextSpecificRenderer($c->get(CurrentContext::class));
333+
},
334+
Context::class => function (ContainerInterface $c) {
335+
return new Context($c->get(CurrentContext::class));
332336
},
333-
Context::class => function () {
334-
return new Context(ContextSpecificBlockParser::CLI_TYPE);
337+
CurrentContext::class => function () {
338+
return CurrentContext::cli();
335339
},
336340
Environment::class => function (ContainerInterface $c) {
337341
$terminal = $c->get(Terminal::class);
@@ -349,8 +353,8 @@
349353
[
350354
'appname' => new AppName($c->get('appName')),
351355
'doc' => new Documentation(),
352-
'run' => new Run(),
353-
'verify' => new Verify(),
356+
'run' => new Run($c->get('appName')),
357+
'verify' => new Verify($c->get('appName')),
354358
'context' => $c->get(Context::class)
355359
]
356360
));

src/Markdown/Context.php renamed to src/Markdown/CurrentContext.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use PhpSchool\PhpWorkshop\Exception\InvalidArgumentException;
66

7-
class Context
7+
class CurrentContext
88
{
99
public const CONTEXT_CLI = 'cli';
1010
public const CONTEXT_CLOUD = 'cloud';
@@ -26,8 +26,18 @@ public function __construct(string $context)
2626
$this->context = $context;
2727
}
2828

29-
public function getCurrentContext(): string
29+
public static function cli(): self
30+
{
31+
return new self(self::CONTEXT_CLI);
32+
}
33+
34+
public static function cloud(): self
35+
{
36+
return new self(self::CONTEXT_CLOUD);
37+
}
38+
39+
public function get(): string
3040
{
3141
return $this->context;
3242
}
33-
}
43+
}

src/Markdown/Parser/ContextSpecificBlockParser.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
use PhpSchool\PhpWorkshop\Markdown\Block\ContextSpecificBlock;
99
use League\CommonMark\ContextInterface;
1010
use League\CommonMark\Cursor;
11-
use PhpSchool\PhpWorkshop\Markdown\Context;
11+
use PhpSchool\PhpWorkshop\Markdown\CurrentContext;
1212

1313
final class ContextSpecificBlockParser implements BlockParserInterface
1414
{
15-
public const TYPES = [Context::CONTEXT_CLI, Context::CONTEXT_CLOUD];
15+
public const TYPES = [CurrentContext::CONTEXT_CLI, CurrentContext::CONTEXT_CLOUD];
1616

1717
public static function getParserRegex(): string
1818
{

src/Markdown/Renderer/ContextSpecificRenderer.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@
99
use League\CommonMark\ElementRendererInterface;
1010
use League\CommonMark\Inline\Element\AbstractInline;
1111
use PhpSchool\PhpWorkshop\Markdown\Block\ContextSpecificBlock;
12-
use PhpSchool\PhpWorkshop\Markdown\Context;
12+
use PhpSchool\PhpWorkshop\Markdown\CurrentContext;
1313

1414
final class ContextSpecificRenderer implements BlockRendererInterface
1515
{
1616
/**
17-
* @var Context
17+
* @var CurrentContext
1818
*/
1919
private $currentContext;
2020

21-
public function __construct(Context $currentContext)
21+
public function __construct(CurrentContext $currentContext)
2222
{
2323
$this->currentContext = $currentContext;
2424
}
@@ -31,7 +31,7 @@ public function render(AbstractBlock $block, ElementRendererInterface $renderer,
3131
return $renderer->renderInlines($children);
3232
}
3333

34-
if ($this->currentContext->getCurrentContext() !== $block->getType()) {
34+
if ($this->currentContext->get() !== $block->getType()) {
3535
return '';
3636
}
3737

src/Markdown/Shorthands/AppName.php renamed to src/Markdown/Shorthands/Cli/AppName.php

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
declare(strict_types=1);
44

5-
namespace PhpSchool\PhpWorkshop\Markdown\Shorthands;
5+
namespace PhpSchool\PhpWorkshop\Markdown\Shorthands\Cli;
66

77
use League\CommonMark\Inline\Element\Code;
88
use League\CommonMark\Inline\Element\Emphasis;
99
use League\CommonMark\Inline\Element\Strong;
1010
use League\CommonMark\Inline\Element\Text;
1111
use League\CommonMark\Node\Node;
12+
use PhpSchool\PhpWorkshop\Markdown\Shorthands\ShorthandInterface;
1213

1314
final class AppName implements ShorthandInterface
1415
{
@@ -22,21 +23,7 @@ public function __construct(string $appName)
2223
$this->appName = $appName;
2324
}
2425

25-
public function cli(array $callArgs): array
26-
{
27-
return $this->getBlocks($callArgs);
28-
}
29-
30-
public function cloud(array $callArgs): array
31-
{
32-
return $this->getBlocks($callArgs);
33-
}
34-
35-
/**
36-
* @param array<string> $callArgs
37-
* @return array<Node>
38-
*/
39-
public function getBlocks(array $callArgs): array
26+
public function __invoke(array $callArgs): array
4027
{
4128
$wrapped = isset($callArgs[0]);
4229

src/Markdown/Shorthands/Cli/Run.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpSchool\PhpWorkshop\Markdown\Shorthands\Cli;
6+
7+
use League\CommonMark\Inline\Element\Text;
8+
use PhpSchool\PhpWorkshop\Exception\RuntimeException;
9+
use PhpSchool\PhpWorkshop\Markdown\Shorthands\ShorthandInterface;
10+
11+
final class Run implements ShorthandInterface
12+
{
13+
/**
14+
* @var string
15+
*/
16+
private $appName;
17+
18+
public function __construct(string $appName)
19+
{
20+
$this->appName = $appName;
21+
}
22+
23+
/**
24+
* @param array<string> $callArgs
25+
* @return Text[]
26+
*/
27+
public function __invoke(array $callArgs): array
28+
{
29+
if (!isset($callArgs[1])) {
30+
throw new RuntimeException('The solution file must be specified');
31+
}
32+
33+
return [
34+
new Text($this->appName . ' run ' . $callArgs[1]),
35+
];
36+
}
37+
}

src/Markdown/Shorthands/Verify.php renamed to src/Markdown/Shorthands/Cli/Verify.php

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
declare(strict_types=1);
44

5-
namespace PhpSchool\PhpWorkshop\Markdown\Shorthands;
5+
namespace PhpSchool\PhpWorkshop\Markdown\Shorthands\Cli;
66

77
use League\CommonMark\Inline\Element\Text;
8-
use League\CommonMark\Node\Node;
98
use PhpSchool\PhpWorkshop\Exception\RuntimeException;
9+
use PhpSchool\PhpWorkshop\Markdown\Shorthands\ShorthandInterface;
1010

1111
final class Verify implements ShorthandInterface
1212
{
@@ -27,29 +27,11 @@ public function __construct(string $appName)
2727
public function __invoke(array $callArgs): array
2828
{
2929
if (!isset($callArgs[1])) {
30-
throw new RuntimeException('The solution file must be specific');
30+
throw new RuntimeException('The solution file must be specified');
3131
}
3232

3333
return [
3434
new Text($this->appName . ' verify ' . $callArgs[1]),
3535
];
3636
}
37-
38-
public function cli(array $callArgs): array
39-
{
40-
if (!isset($callArgs[1])) {
41-
throw new RuntimeException('The solution file must be specific');
42-
}
43-
44-
return [
45-
new Text($this->appName . ' verify ' . $callArgs[1]),
46-
];
47-
}
48-
49-
public function cloud(array $callArgs): array
50-
{
51-
return [
52-
new Text('Click the Verify button in the bottom right'),
53-
];
54-
}
5537
}

0 commit comments

Comments
 (0)