Skip to content

Commit 5b35af7

Browse files
committed
refactor
1 parent 464227b commit 5b35af7

30 files changed

+695
-603
lines changed

composer.json

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"record processor",
77
"php"
88
],
9+
"type": "library",
910
"license": "MIT",
1011
"authors": [
1112
{
@@ -14,23 +15,29 @@
1415
}
1516
],
1617
"require": {
17-
"php": ">=7.0",
18-
"psr/log": "^1.0",
19-
"rodrigopedra/record-processor": "^0.9",
20-
"illuminate/support": "^5.4|^6.0",
21-
"illuminate/contracts": "^5.4|^6.0",
22-
"illuminate/database": "^5.4|^6.0",
23-
"illuminate/http": "^5.4|^6.0"
18+
"php": "^7.4|^8.0",
19+
"rodrigopedra/record-processor": "^1.0",
20+
"illuminate/contracts": "^7.0|^8.0",
21+
"illuminate/database": "^7.0|^8.0",
22+
"illuminate/support": "^7.0|^8.0"
23+
},
24+
"require-dev": {
25+
"symfony/console": "^5.1",
26+
"symfony/http-foundation": "^5.1",
27+
"symfony/process": "^5.1",
28+
"symfony/var-dumper": "^5.1"
2429
},
2530
"autoload": {
2631
"psr-4": {
27-
"RodrigoPedra\\LaravelRecordProcessor\\": "src/LaravelRecordProcessor/",
32+
"RodrigoPedra\\LaravelRecordProcessor\\": "src/",
2833
"RodrigoPedra\\LaravelRecordProcessor\\Examples\\": "examples/"
2934
}
3035
},
31-
"require-dev": {
32-
"symfony/console": "^3.3|~4.0|~4.1|~4.2|~4.3",
33-
"symfony/var-dumper": "^3.3|~4.0|~4.1|~4.2|~4.3"
36+
"config": {
37+
"sort-packages": true
38+
},
39+
"suggest": {
40+
"symfony/http-foundation": "to use download file response"
3441
},
3542
"extra": {
3643
"laravel": {

console

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

44
require __DIR__ . '/vendor/autoload.php';
55

6-
use Symfony\Component\Console\Application;
7-
use RodrigoPedra\RecordProcessor\Examples\DownloadCommand;
6+
use RodrigoPedra\LaravelRecordProcessor\Examples\DownloadCommand;
87
use RodrigoPedra\LaravelRecordProcessor\Examples\ExamplesCommand;
8+
use Symfony\Component\Console\Application;
99

1010
$application = new Application();
1111

12-
$application->add(new ExamplesCommand);
13-
$application->add(new DownloadCommand);
12+
$application->add(new ExamplesCommand());
13+
$application->add(new DownloadCommand());
1414

1515
$application->run();

examples/DownloadCommand.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace RodrigoPedra\LaravelRecordProcessor\Examples;
4+
5+
use RodrigoPedra\RecordProcessor\Examples\Loggers\ConsoleOutputLogger;
6+
use Symfony\Component\Console\Command\Command;
7+
use Symfony\Component\Console\Input\InputInterface;
8+
use Symfony\Component\Console\Output\OutputInterface;
9+
use Symfony\Component\Process\Process;
10+
11+
class DownloadCommand extends Command
12+
{
13+
protected function configure()
14+
{
15+
$this->setName('download');
16+
17+
$this->setDescription('Start a server to showcase download usage');
18+
}
19+
20+
protected function execute(InputInterface $input, OutputInterface $output): int
21+
{
22+
$logger = new ConsoleOutputLogger($output);
23+
24+
$assetsDirectory = __DIR__ . \DIRECTORY_SEPARATOR . 'download';
25+
26+
$process = new Process(['php', '-S', 'localhost:8080', '-t', $assetsDirectory]);
27+
28+
$logger->info('Navigate in your browser to http://localhost:8080');
29+
$logger->info('Type CTRL+C to exit');
30+
31+
$process->run(function ($type, $buffer) use ($logger) {
32+
$logger->info($buffer);
33+
});
34+
35+
$logger->info($process->getOutput());
36+
37+
return 0;
38+
}
39+
}

examples/ExampleLaravelBuilderFormatter.php

Lines changed: 0 additions & 41 deletions
This file was deleted.

examples/ExampleLaravelBuilderParser.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@
1010
class ExampleLaravelBuilderParser implements RecordParser
1111
{
1212
/**
13-
* Generates Record objects from raw data
14-
*
15-
* @param Reader $reader
16-
* @param mixed $rawContent
17-
* @return Record
13+
* @param \RodrigoPedra\RecordProcessor\Contracts\Reader $reader
14+
* @param \Illuminate\Database\Eloquent\Model|\stdClass $rawContent
15+
* @return \RodrigoPedra\RecordProcessor\Contracts\Record
1816
*/
19-
public function parseRecord(Reader $reader, $rawContent)
17+
public function parseRecord(Reader $reader, $rawContent): Record
2018
{
21-
return new ExampleRecord([
19+
return new ExampleRecord($rawContent->name, [
2220
'name' => $rawContent->name,
2321
'email' => $rawContent->email,
2422
]);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace RodrigoPedra\LaravelRecordProcessor\Examples;
4+
5+
use RodrigoPedra\RecordProcessor\Contracts\Record;
6+
use RodrigoPedra\RecordProcessor\Contracts\RecordSerializer;
7+
use RodrigoPedra\RecordProcessor\Contracts\Serializer;
8+
use RodrigoPedra\RecordProcessor\Records\RecordKeyAggregate;
9+
10+
class ExampleLaravelBuilderSerializer implements RecordSerializer
11+
{
12+
public function serializeRecord(Serializer $serializer, Record $record): bool
13+
{
14+
if (! $record->isValid()) {
15+
return false;
16+
}
17+
18+
$data = $record->toArray();
19+
20+
if ($record instanceof RecordKeyAggregate) {
21+
$data = [
22+
'name' => $record->key(),
23+
'email' => \implode(', ',
24+
\array_map(fn (Record $record) => $record->field('email'), $record->records())),
25+
];
26+
}
27+
28+
$serializer->append(new UserEloquentModel($data));
29+
30+
return true;
31+
}
32+
}

examples/ExamplesCommand.php

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,38 @@
33
namespace RodrigoPedra\LaravelRecordProcessor\Examples;
44

55
use Illuminate\Database\Capsule\Manager as Capsule;
6+
use Illuminate\Database\Eloquent\Builder;
7+
use RodrigoPedra\LaravelRecordProcessor\Configurators\Serializers\EloquentSerializerConfigurator;
68
use RodrigoPedra\LaravelRecordProcessor\ProcessorBuilder;
7-
use RodrigoPedra\RecordProcessor\Helpers\Writers\WriterConfigurator;
89
use RodrigoPedra\RecordProcessor\Examples\ExamplesCommand as BaseExamplesCommand;
10+
use RodrigoPedra\RecordProcessor\ProcessorBuilder as BaseProcessorBuilder;
911

1012
class ExamplesCommand extends BaseExamplesCommand
1113
{
12-
protected function getAvailableReaders()
14+
protected function availableParsers(): string
1315
{
14-
return parent::getAvailableReaders() . '|eloquent|query-builder';
16+
return parent::availableParsers() . '|eloquent|query-builder';
1517
}
1618

17-
protected function getAvailableWriters()
19+
protected function availableSerializers(): string
1820
{
19-
return parent::getAvailableWriters() . '|eloquent|query-builder';
21+
return parent::availableSerializers() . '|eloquent|query-builder';
2022
}
2123

22-
protected function makeBuilder()
24+
protected function makeBuilder(): ProcessorBuilder
2325
{
24-
return new ProcessorBuilder;
26+
return new ProcessorBuilder();
2527
}
2628

2729
/**
28-
* @param ProcessorBuilder $builder
30+
* @param \RodrigoPedra\RecordProcessor\ProcessorBuilder&\RodrigoPedra\LaravelRecordProcessor\ProcessorBuilder $builder
2931
* @param string $reader
30-
* @return mixed
32+
* @return \RodrigoPedra\LaravelRecordProcessor\ProcessorBuilder
3133
*/
32-
protected function readFrom($builder, $reader)
34+
protected function readFrom(BaseProcessorBuilder $builder, string $reader): BaseProcessorBuilder
3335
{
3436
if ($reader === 'eloquent') {
35-
$builder->usingParser(new ExampleLaravelBuilderParser);
37+
$builder->withRecordParser(new ExampleLaravelBuilderParser());
3638

3739
$eloquentBuilder = $this->makeEloquentBuilder();
3840
$eloquentBuilder->take(10);
@@ -41,7 +43,7 @@ protected function readFrom($builder, $reader)
4143
}
4244

4345
if ($reader === 'query-builder') {
44-
$builder->usingParser(new ExampleLaravelBuilderParser);
46+
$builder->withRecordParser(new ExampleLaravelBuilderParser());
4547

4648
$eloquentBuilder = $this->makeEloquentBuilder();
4749
$eloquentBuilder->take(10);
@@ -54,31 +56,31 @@ protected function readFrom($builder, $reader)
5456
}
5557

5658
/**
57-
* @param ProcessorBuilder $builder
58-
* @param string $writer
59-
* @return mixed
59+
* @param \RodrigoPedra\RecordProcessor\ProcessorBuilder&\RodrigoPedra\LaravelRecordProcessor\ProcessorBuilder $builder
60+
* @param string $serializer
61+
* @return \RodrigoPedra\LaravelRecordProcessor\ProcessorBuilder
6062
*/
61-
protected function writeTo($builder, $writer)
63+
protected function serializeTo(BaseProcessorBuilder $builder, string $serializer): BaseProcessorBuilder
6264
{
63-
if ($writer === 'eloquent') {
65+
if ($serializer === 'eloquent') {
6466
$eloquentBuilder = $this->makeEloquentBuilder();
6567

66-
return $builder->writeToEloquent($eloquentBuilder, function (WriterConfigurator $configurator) {
67-
$configurator->outputModels(true);
68-
$configurator->setRecordFormatter(new ExampleLaravelBuilderFormatter);
68+
return $builder->writeToEloquent($eloquentBuilder, function (EloquentSerializerConfigurator $configurator) {
69+
$configurator->withRecordSerializer(new ExampleLaravelBuilderSerializer());
70+
$configurator->withShouldOutputModels(true);
6971
});
7072
}
7173

72-
if ($writer === 'query-builder') {
74+
if ($serializer === 'query-builder') {
7375
$eloquentBuilder = $this->makeEloquentBuilder();
7476

7577
return $builder->writeToQueryBuilder($eloquentBuilder->getQuery());
7678
}
7779

78-
return parent::writeTo($builder, $writer);
80+
return parent::serializeTo($builder, $serializer);
7981
}
8082

81-
protected function storagePath($file)
83+
protected function storagePath(string $file): string
8284
{
8385
return __DIR__ . '/../storage/' . $file;
8486
}
@@ -87,7 +89,7 @@ protected function startLaravelConnection()
8789
{
8890
$this->makeConnection();
8991

90-
$capsule = new Capsule;
92+
$capsule = new Capsule();
9193

9294
$capsule->addConnection([
9395
'driver' => 'sqlite',
@@ -100,12 +102,10 @@ protected function startLaravelConnection()
100102
$capsule->bootEloquent();
101103
}
102104

103-
protected function makeEloquentBuilder()
105+
public function makeEloquentBuilder(): Builder
104106
{
105107
$this->startLaravelConnection();
106108

107-
$model = new UserEloquentModel;
108-
109-
return $model->newQuery();
109+
return UserEloquentModel::query();
110110
}
111111
}

examples/download/download.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
require __DIR__ . '/../../vendor/autoload.php';
4+
5+
use RodrigoPedra\LaravelRecordProcessor\Examples\ExamplesCommand;
6+
use RodrigoPedra\LaravelRecordProcessor\ProcessorBuilder;
7+
use RodrigoPedra\RecordProcessor\Configurators\Serializers\SerializerConfigurator;
8+
use RodrigoPedra\RecordProcessor\Stages\DownloadFileOutput;
9+
10+
$storagePath = __DIR__ . '/../../storage/';
11+
12+
$command = new ExamplesCommand();
13+
14+
$processor = (new ProcessorBuilder())
15+
->readFromEloquent($command->makeEloquentBuilder())
16+
->serializeToExcelFile($storagePath . 'output.xlsx', function (SerializerConfigurator $configurator) {
17+
$configurator->withHeader(['name', 'email']);
18+
})
19+
->downloadFileOutput('report.xlsx', DownloadFileOutput::DELETE_FILE_AFTER_DOWNLOAD)
20+
->build();
21+
22+
$processor->process();
23+
24+
exit;

examples/download/index.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<body>
4+
<a href="download.php">download excel</a>
5+
</body>
6+
</html>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace RodrigoPedra\LaravelRecordProcessor\Configurators\Readers;
4+
5+
use Illuminate\Database\Eloquent\Builder;
6+
use RodrigoPedra\LaravelRecordProcessor\Readers\EloquentReader;
7+
use RodrigoPedra\RecordProcessor\Configurators\Readers\ReaderConfigurator;
8+
9+
/**
10+
* @property \RodrigoPedra\LaravelRecordProcessor\Readers\EloquentReader $reader
11+
*/
12+
class EloquentReaderConfigurator extends ReaderConfigurator
13+
{
14+
public function __construct(EloquentReader $reader)
15+
{
16+
parent::__construct($reader);
17+
}
18+
19+
public function builder(): Builder
20+
{
21+
return $this->reader->builder();
22+
}
23+
}

0 commit comments

Comments
 (0)