Skip to content

Commit c6e1e82

Browse files
authored
update register return in ProcessorRegistry (#35)
* add size method * feat: Normalize Interfaces - Refined and standardized interface definitions across the project - Applied Single Responsibility Principle (SRP) to ensure each interface has a clear, singular purpose - Consistent naming conventions were implemented for better readability and maintainability - Added thorough documentation for each interface, including method descriptions and expected behaviors - Organized interfaces within appropriate namespaces to prevent naming collisions and maintain a logical structure - Ensured parameter names in interface methods are consistent with implementing classes - Avoided including constructors in interfaces to maintain flexibility These changes enhance the overall clarity, maintainability, and professional quality of the codebase. * Refactor and Normalize Collection Interface and Implementation - Refactored `Collection` interface for consistency and adherence to best practices. - Ensured all tests are comprehensive and validate the expected behavior. * feat: Add BinaryHeap implementation and comprehensive tests - Implemented BinaryHeap class with support for both min-heap and max-heap operations. - Methods include: add, poll, peek, size, isEmpty, heapifyUp, heapifyDown, swap, and compare. - Created unit tests for BinaryHeap class ensuring 100% coverage. - Tested all key operations: add, poll, peek, heapifyUp, heapifyDown, swap, and compare. - Included edge case tests for min-heap and max-heap scenarios. - Ensured compliance with type safety and PHP 8.0+ features. - Added comprehensive documentation and examples for BinaryHeap usage. This commit enhances the KaririCode Framework by providing a robust, type-safe, and efficient BinaryHeap data structure with extensive unit tests. * docs: Update README files in English and Portuguese - Enhanced the overview and key features sections for clarity and completeness. - Added detailed descriptions for all implemented data structures: - TreeSet - ArrayDeque - ArrayQueue - TreeMap - LinkedList - BinaryHeap - HashMap - Included complexity analysis and key methods for each data structure. - Provided usage examples for each data structure to demonstrate functionality. - Updated installation instructions and requirements. - Updated acknowledgments and roadmap sections. * style: Normalize code formatting and style * feat: Create Container interface and add unit tests - Define the Container interface with methods: `set`, `get`, and `has`. - Implement unit tests for `set` method to ensure services are registered correctly. - Add unit tests for `get` method to verify correct retrieval of services by identifier. - Include unit tests for `has` method to check existence of services in the container. - Normalize the `@category` comments in the interface documentation for consistency. These changes establish a foundational contract for dependency injection within the KaririCode project and ensure robust and reliable functionality through comprehensive testing * feat: Add logging interfaces and corresponding tests - Created Configurable interface for managing configuration settings. - Created Loggable interface to define logging methods for various log levels. - Created ContextAware interface for managing context information in logs. - Created FormatterAware interface for handling log formatter settings. - Created HandlerAware interface for managing log handlers. - Created ProcessorAware interface for managing log processors. - Created LoggingManager interface that combines various logging functionalities. - Created LogFormatter interface for defining log formatters. - Created LogHandler interface for handling log records. - Created LogLevel interface for defining log levels. - Created LogProcessor interface for processing log records before handling. - Created LogRotator interface for managing log file rotation. - Added unit tests for each interface to ensure correct functionality: - ConfigurableTest: Tests for setConfig and getConfig methods. - LoggableTest: Tests for various logging level methods. - ContextAwareTest: Tests for withContext and getContext methods. - FormatterAwareTest: Tests for setFormatter and getFormatter methods. - HandlerAwareTest: Tests for addHandler, pushHandler, popHandler, and getHandlers methods. - ProcessorAwareTest: Tests for addProcessor and getProcessors methods. - LoggingManagerTest: Comprehensive tests for all LoggingManager methods. - LogFormatterTest: Test for the format method. - LogHandlerTest: Test for the handle method. - LogLevelTest: Test for the getLevel method. - LogProcessorTest: Test for the process method. - LogRotatorTest: Test for the rotate method. * feat: Update logging interfaces Add tests for LoggerAware and LoggerConfigurable interfaces - Revised and enhanced logging interfaces for better consistency and flexibility. - Implemented new methods to support asynchronous logging. - Improved documentation of the interfaces to facilitate integration. - Added unit tests to ensure the robustness of the new implementations. - Added unit test for LoggerAware interface to verify setLogger method. - Added unit test for LoggerConfigurable interface to verify configure method. - Ensured proper mock setup and expectations in tests. * feat(logging): improve log rotation and update log handler - Removed .phpcs-cache for cleaner repository - Updated src/Logging/LogHandler.php to enhance log handling capabilities - Modified src/Logging/LogLevel.php for better log level management - Enhanced src/Logging/LogRotator.php with improved file rotation logic - Updated src/Logging/Logger.php to integrate changes in log handling and rotation * Refactor:Indexable interface and LogLevel class - Modified the Indexable.php interface to enhance functionality. - Updated the LogLevel.php class to add new log levels. - Made lint adjustments in LogRotator class. * feat(contract): Add Processor interfaces and tests - Introduce new interfaces: Processor, ConfigurableProcessor, Pipeline - Add comprehensive PHPUnit tests for each interface - Enhance code documentation with detailed PHP DocBlocks - Ensure consistency with existing KaririCode coding standards * feat: add ProcessorRegistry interface and unit tests - Introduced `ProcessorRegistry` interface to standardize processor registration and retrieval across contexts. - Added `ProcessorRegistryTest` class to ensure correctness of the new interface, covering scenarios like processor registration, retrieval, and error handling. * feat(processor): add ProcessorBuilder interface and test suite - Add ProcessorBuilder interface in KaririCode\Contract\Processor namespace - Define build() method for constructing individual processors - Define buildPipeline() method for assembling processor pipelines - Create ProcessorBuilderTest class in KaririCode\Contract\Tests\Processor namespace - Implement tests for build() and buildPipeline() methods - Cover success scenarios and exception handling - Ensure proper interaction with ProcessorRegistry * feat(contract): add PHPDoc for ProcessableAttribute interface and create unit tests - Add PHPDoc comments for ProcessableAttribute interface, including method descriptions and author/license information - Create unit tests for ProcessableAttribute interface, testing `getProcessors` and `getFallbackValue` methods * feat(contract): add Sanitizer, Serializer, and Validator interfaces with unit tests - Add `Sanitizer` interface for sanitizing input data in `src/Sanitizer/` - Add `Validator` interface for validating input data in `src/Validator/` - Add `Serializer` interface for serializing and deserializing data in `src/Serializer/` - Create unit tests for each interface to ensure expected behavior * fix(validator): correct return type of Validator interface * feat(contract): add CustomizableMessageAttribute interface - Introduce CustomizableMessageAttribute interface in KaririCode\Contract\Processor\Attribute namespace - Add method getMessage(string $validatorName): ?string to the interface - Create unit tests for CustomizableMessageAttribute in CustomizableMessageAttributeTest - Update existing ProcessableAttribute interface documentation for consistency * feat: add BaseProcessorAttribute abstract class * refactor: adjusty filterValidProcessors in BaseProcessorAttribute * feat(processor): add ProcessorValidator and ValidatableProcessor interfaces with unit tests - Added ProcessorValidator interface to define contract for validating processors in a pipeline. - Added ValidatableProcessor interface to define contract for processors with validation capabilities. - Created unit tests for ProcessorValidator and ValidatableProcessor to ensure proper validation behavior. * feat(validator): Add reset method to ValidatableProcessor interface The reset method is added to ensure proper state reset between validations. This change helps prevent state leakage between multiple validation cycles by allowing processors to clear their validation state before reuse. - Add reset() method with proper PHPDoc - Maintain consistent documentation style - Keep backward compatibility with existing implementations * feat(validator): Add reset method to ValidatableProcessor interface The reset method is added to ensure proper state reset between validations. This change helps prevent state leakage between multiple validation cycles by allowing processors to clear their validation state before reuse. - Add reset() method with proper PHPDoc - Maintain consistent documentation style - Keep backward compatibility with existing implementations * test(processor): add unit tests for ProcessingResult interface - Add test cases for all ProcessingResult interface methods - Include setUp with mock creation - Validate error handling and data processing - Ensure proper type declarations * refactor: add professional comments to BaseProcessorAttribute and update register return in ProcessorRegistry - Change `register` method in `ProcessorRegistry` interface to return `self` instead of `void` for fluent interface support - Add professional comments to `BaseProcessorAttribute` abstract class, clarifying property roles and method responsibilities - Document `filterValidProcessors` and other methods for clearer functionality understanding --------- Co-authored-by: GrowthCode <142913591+growthcodeoficial@users.noreply.github.com>
1 parent ee489bb commit c6e1e82

File tree

3 files changed

+58
-3
lines changed

3 files changed

+58
-3
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,5 @@ temp/
5959
tmp/
6060
.vscode/launch.json
6161
.vscode/extensions.json
62-
tests/lista_de_arquivos.php
62+
tests/lista_de_arquivos.php
63+
/composer.lock

src/Processor/Attribute/BaseProcessorAttribute.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,79 @@
44

55
namespace KaririCode\Contract\Processor\Attribute;
66

7+
/**
8+
* Classe BaseProcessorAttribute.
9+
*
10+
* Classe abstrata que implementa atributos de processamento, fornecendo funcionalidades
11+
* para registrar processadores e mensagens customizadas associadas a cada um. Esta classe
12+
* é projetada para servir como base para a criação de atributos de processamento que
13+
* suportam personalização de mensagens.
14+
*
15+
* @category Processor
16+
*
17+
* @license MIT
18+
*/
719
abstract class BaseProcessorAttribute implements ProcessableAttribute, CustomizableMessageAttribute
820
{
21+
/**
22+
* @var array Lista de processadores associados ao atributo.
23+
* Somente processadores válidos são armazenados nesta lista.
24+
*/
925
private readonly array $processors;
26+
27+
/**
28+
* @var array Lista de mensagens customizadas para os processadores.
29+
* As mensagens são associadas ao nome do processador e são opcionais.
30+
*/
1031
private readonly array $messages;
1132

33+
/**
34+
* Construtor da classe BaseProcessorAttribute.
35+
*
36+
* Inicializa a lista de processadores e, opcionalmente, as mensagens customizadas.
37+
* Os processadores inválidos (nulos ou false) são automaticamente filtrados.
38+
*
39+
* @param array $processors Lista de processadores a serem associados ao atributo
40+
* @param array|null $messages (Opcional) Lista de mensagens customizadas associadas aos processadores
41+
*/
1242
public function __construct(array $processors, ?array $messages = null)
1343
{
1444
$this->processors = self::filterValidProcessors($processors);
1545
$this->messages = $messages ?? [];
1646
}
1747

48+
/**
49+
* Retorna a lista de processadores associados ao atributo.
50+
*
51+
* @return array A lista de processadores válidos
52+
*/
1853
public function getProcessors(): array
1954
{
2055
return $this->processors;
2156
}
2257

58+
/**
59+
* Obtém uma mensagem customizada para um processador específico, caso esteja definida.
60+
*
61+
* @param string $processorName O nome do processador para o qual a mensagem é requisitada
62+
*
63+
* @return string|null A mensagem customizada associada ao processador, ou null se não existir
64+
*/
2365
public function getMessage(string $processorName): ?string
2466
{
2567
return $this->messages[$processorName] ?? null;
2668
}
2769

70+
/**
71+
* Filtra e retorna somente os processadores válidos.
72+
*
73+
* Este método estático remove processadores nulos ou definidos como false,
74+
* garantindo que apenas processadores utilizáveis sejam armazenados.
75+
*
76+
* @param array $processors Lista de processadores a serem filtrados
77+
*
78+
* @return array A lista de processadores válidos
79+
*/
2880
private static function filterValidProcessors(array $processors): array
2981
{
3082
return array_filter($processors, static fn ($v) => null !== $v && false !== $v);

src/Processor/ProcessorRegistry.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
*
1616
* @category ProcessorPipeline
1717
*
18-
* @author Walmir Silva <walmir.silva@kariricode.org>
1918
* @license MIT
19+
* @author Walmir Silva <walmir.silva@kariricode.org>
2020
*
2121
* @see https://kariricode.org/
2222
*/
@@ -31,8 +31,10 @@ interface ProcessorRegistry
3131
* @param string $context The context under which the processor is registered
3232
* @param string $name The unique name of the processor within the context
3333
* @param Processor $processor The processor instance to be registered
34+
*
35+
* @return self Returns the current instance to enable a fluent interface
3436
*/
35-
public function register(string $context, string $name, Processor $processor): void;
37+
public function register(string $context, string $name, Processor $processor): self;
3638

3739
/**
3840
* Retrieves a processor by its context and name.

0 commit comments

Comments
 (0)