Skip to content

Commit 04e7da1

Browse files
committed
docs: update usage examples in README (en and pt-br)
- Improved code examples for basic and advanced usage of ProcessorPipeline - Adjustments to integration instructions with other KaririCode components - Updates for consistency and clarity between English and Portuguese versions - Modified `register` method to return `static` instead of `void`, enabling builder pattern in the pipeline
1 parent 6d2e25b commit 04e7da1

File tree

4 files changed

+466
-220
lines changed

4 files changed

+466
-220
lines changed

README.md

Lines changed: 174 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# KaririCode Framework: ProcessorPipeline Component
1+
# KaririCode Framework: Processor Pipeline Component
22

33
[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md) [![pt-br](https://img.shields.io/badge/lang-pt--br-green.svg)](README.pt-br.md)
44

@@ -62,49 +62,142 @@ require_once 'vendor/autoload.php';
6262
1. Define your processors:
6363

6464
```php
65+
<?php
66+
67+
declare(strict_types=1);
68+
69+
require_once __DIR__ . '/../vendor/autoload.php';
70+
6571
use KaririCode\Contract\Processor\Processor;
72+
use KaririCode\ProcessorPipeline\ProcessorBuilder;
73+
use KaririCode\ProcessorPipeline\ProcessorRegistry;
74+
use KaririCode\ProcessorPipeline\Result\ProcessingResultCollection;
6675

67-
class EmailNormalizer implements Processor
76+
// Example of actual processors.
77+
class UpperCaseProcessor implements Processor
6878
{
69-
public function process(mixed $input): string
79+
public function process(mixed $input): mixed
7080
{
71-
return strtolower(trim($input));
81+
return strtoupper((string) $input);
7282
}
7383
}
7484

75-
class EmailValidator implements Processor
85+
class TrimProcessor implements Processor
7686
{
77-
public function process(mixed $input): bool
87+
public function process(mixed $input): mixed
7888
{
79-
return false !== filter_var($input, FILTER_VALIDATE_EMAIL);
89+
return trim((string) $input);
8090
}
8191
}
82-
```
8392

84-
2. Set up the processor registry and builder:
93+
class EmailTransformerProcessor implements Processor
94+
{
95+
public function process(mixed $input): mixed
96+
{
97+
return strtolower((string) $input);
98+
}
99+
}
85100

86-
```php
87-
use KaririCode\ProcessorPipeline\ProcessorRegistry;
88-
use KaririCode\ProcessorPipeline\ProcessorBuilder;
101+
class EmailValidatorProcessor implements Processor
102+
{
103+
public function __construct(private ProcessingResultCollection $resultCollection)
104+
{
105+
}
89106

90-
$registry = new ProcessorRegistry();
91-
$registry->register('user', 'emailNormalizer', new EmailNormalizer());
92-
$registry->register('user', 'emailValidator', new EmailValidator());
107+
public function process(mixed $input): mixed
108+
{
109+
if (!filter_var($input, FILTER_VALIDATE_EMAIL)) {
110+
$this->resultCollection->addError(
111+
self::class,
112+
'invalidFormat',
113+
"Invalid email format: $input"
114+
);
115+
}
116+
return $input;
117+
}
118+
}
93119

120+
// Function to handle pipeline execution
121+
function executePipeline(ProcessorBuilder $builder, ProcessorRegistry $registry, array $processorSpecs, string $input): void
122+
{
123+
$resultCollection = new ProcessingResultCollection();
124+
$context = 'example_context';
125+
126+
$registry->register($context, 'upper_case', new UpperCaseProcessor())
127+
->register($context, 'trim', new TrimProcessor())
128+
->register($context, 'email_transform', new EmailTransformerProcessor())
129+
->register($context, 'email_validate', new EmailValidatorProcessor($resultCollection));
130+
131+
try {
132+
$pipeline = $builder->buildPipeline($context, $processorSpecs);
133+
$output = $pipeline->process($input);
134+
135+
// Displaying the results
136+
echo "Original Input: '$input'\n";
137+
echo "Pipeline Output: '$output'\n";
138+
139+
// Display errors if any
140+
if ($resultCollection->hasErrors()) {
141+
echo "\nProcessing Errors:\n";
142+
print_r($resultCollection->getErrors());
143+
} else {
144+
echo "\nNo processing errors encountered.\n";
145+
}
146+
} catch (\Exception $e) {
147+
echo "Error executing the pipeline: " . $e->getMessage() . "\n";
148+
}
149+
}
150+
151+
// Register processors to a context in the registry.
152+
$registry = new ProcessorRegistry();
94153
$builder = new ProcessorBuilder($registry);
95-
```
96154

97-
3. Build and use a pipeline:
155+
// Execute scenario 1 - Valid input
156+
$processorSpecs = [
157+
'upper_case' => false,
158+
'trim' => true,
159+
'email_transform' => true,
160+
'email_validate' => true,
161+
];
162+
$input = " [email protected] ";
98163

99-
```php
100-
$pipeline = $builder->buildPipeline('user', ['emailNormalizer', 'emailValidator']);
164+
echo "Scenario 1 - Valid Input\n";
165+
executePipeline($builder, $registry, $processorSpecs, $input);
166+
167+
// Execute scenario 2 - Invalid input
168+
$input = " InvalidEmail@@@ ";
101169

102-
$email = ' [email protected] ';
103-
$normalizedEmail = $pipeline->process($email);
104-
$isValid = $pipeline->process($normalizedEmail);
170+
echo "\nScenario 2 - Invalid Input:\n";
171+
executePipeline($builder, $registry, $processorSpecs, $input);
172+
```
173+
174+
### Test Output
105175

106-
echo "Normalized: $normalizedEmail\n";
107-
echo "Valid: " . ($isValid ? 'Yes' : 'No') . "\n";
176+
```bash
177+
php ./tests/application.php
178+
Scenario 1 - Valid Input
179+
Original Input: ' [email protected] '
180+
Pipeline Output: '[email protected]'
181+
182+
No processing errors encountered.
183+
184+
Scenario 2 - Invalid Input:
185+
Original Input: ' InvalidEmail@@@ '
186+
Pipeline Output: 'invalidemail@@@'
187+
188+
Processing Errors:
189+
Array
190+
(
191+
[EmailValidatorProcessor] => Array
192+
(
193+
[0] => Array
194+
(
195+
[errorKey] => invalidFormat
196+
[message] => Invalid email format: invalidemail@@@
197+
)
198+
199+
)
200+
)
108201
```
109202

110203
### Advanced Usage
@@ -151,16 +244,67 @@ The ProcessorPipeline component is designed to work seamlessly with other Kariri
151244

152245
Example using ProcessorPipeline with Validator:
153246

247+
1. Define your data class with validation attributes:
248+
249+
```php
250+
use KaririCode\Validator\Attribute\Validate;
251+
252+
class UserProfile
253+
{
254+
#[Validate(
255+
processors: [
256+
'required',
257+
'length' => ['minLength' => 3, 'maxLength' => 20],
258+
],
259+
messages: [
260+
'required' => 'Username is required',
261+
'length' => 'Username must be between 3 and 20 characters',
262+
]
263+
)]
264+
private string $username = '';
265+
266+
#[Validate(
267+
processors: ['required', 'email'],
268+
messages: [
269+
'required' => 'Email is required',
270+
'email' => 'Invalid email format',
271+
]
272+
)]
273+
private string $email = '';
274+
275+
// Getters and setters...
276+
}
277+
```
278+
279+
2. Set up the validator and use it:
280+
154281
```php
155-
use KaririCode\Validator\Validators\EmailValidator;
156-
use KaririCode\Validator\Validators\NotEmptyValidator;
282+
use KaririCode\ProcessorPipeline\ProcessorRegistry;
283+
use KaririCode\Validator\Validator;
284+
use KaririCode\Validator\Processor\Logic\RequiredValidator;
285+
use KaririCode\Validator\Processor\Input\LengthValidator;
286+
use KaririCode\Validator\Processor\Input\EmailValidator;
157287

158-
$registry->register('validation', 'email', new EmailValidator());
159-
$registry->register('validation', 'notEmpty', new NotEmptyValidator());
288+
$registry = new ProcessorRegistry();
289+
$registry->register('validator', 'required', new RequiredValidator())
290+
->register('validator', 'length', new LengthValidator())
291+
->register('validator', 'email', new EmailValidator());
292+
293+
$validator = new Validator($registry);
294+
295+
$userProfile = new UserProfile();
296+
$userProfile->setUsername('wa'); // Too short
297+
$userProfile->setEmail('invalid-email'); // Invalid format
160298

161-
$validationPipeline = $builder->buildPipeline('validation', ['notEmpty', 'email']);
299+
$result = $validator->validate($userProfile);
162300

163-
$isValid = $validationPipeline->process($userInput);
301+
if ($result->hasErrors()) {
302+
foreach ($result->getErrors() as $property => $errors) {
303+
foreach ($errors as $error) {
304+
echo "$property: {$error['message']}\n";
305+
}
306+
}
307+
}
164308
```
165309

166310
## Development and Testing

0 commit comments

Comments
 (0)