Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Path-based git attributes
# https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html

# Ignore all test and documentation with "export-ignore".
/.github export-ignore
/.gitattributes export-ignore
/.gitignore export-ignore
/phpcs.xml export-ignore
/phpmd.xml export-ignore
/phpunit.xml export-ignore
2 changes: 2 additions & 0 deletions .github/workflows/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[{*.yaml,*.yml}]
indent_size = 2
44 changes: 44 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Plugin CI
on:
push:
branches: [ 'master' ]
pull_request:

jobs:
tests:
name: "Tests ${{ matrix.php-version }} deps ${{ matrix.dependency-versions }}"
runs-on: ubuntu-22.04

strategy:
fail-fast: false
matrix:
# normal, highest, non-dev installs
php-version: [ '8.2' ]
dependency-versions: [ 'highest' ]
include:
# testing lowest PHP version with the lowest dependencies
- php-version: '8.2'
dependency-versions: 'lowest'

# testing dev versions with the highest PHP
- php-version: '8.2'
dependency-versions: 'highest'

steps:
- name: "Checkout code"
uses: "actions/checkout@v2"

- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "none"
php-version: "${{ matrix.php-version }}"

- name: "Composer install"
uses: "ramsey/composer-install@v2"
with:
dependency-versions: "${{ matrix.dependency-versions }}"
composer-options: "--prefer-dist --no-progress"

- name: "Run tests"
run: "./vendor/bin/phpunit"
65 changes: 65 additions & 0 deletions .github/workflows/static.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
on: [pull_request]
name: Static analysis

jobs:
composer-validate:
name: Composer validate & normalize
runs-on: ubuntu-22.04

steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
coverage: none
tools: composer-normalize

- name: Checkout code
uses: actions/checkout@v2

- name: Validate
run: composer validate --strict

- name: Normalize
run: composer-normalize --dry-run

phpcs:
name: PHP_CodeSniffer
runs-on: ubuntu-22.04

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
coverage: none
tools: squizlabs/php_codesniffer:^3.7

- name: Download dependencies
uses: ramsey/composer-install@v2

- name: PHP_CodeSniffer
run: ./vendor/bin/phpcs --standard=phpcs.xml ./src/

phpmd:
name: Mess Detector
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
coverage: none
tools: phpmd/phpmd:^2.13

- name: Download dependencies
uses: ramsey/composer-install@v2

- name: Mess Detector
run: ./vendor/bin/phpmd ./src/ github ./phpmd.xml
52 changes: 40 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

### Requirements

PHP >= 8.0.0
PHP >= 8.2

### How to use the library

Expand Down Expand Up @@ -34,7 +34,7 @@ include 'vendor/autoload.php';
```php
use \Micro\Component\DependencyInjection\Container;

class Logger {
class Logger implements LoggerInterface {
}

class Mailer {
Expand All @@ -43,10 +43,14 @@ class Mailer {

$container = new Container();

$container->register(Logger::class, function(Container $container) {
$container->register(LoggerInterface::class, function(Container $container) {
return new Logger();
});

$container->register('logger.doctrine', function(Container $container) {
return new Logger('doctrine-channel');
});

$container->register(Mailer::class, function(Container $container) {
return new Mailer($container->get(Logger::class));
});
Expand All @@ -70,13 +74,11 @@ class HelloWorldFacade implements HelloWorldFacadeInterface
}
}


class HelloWorldDecorator implements HelloWorldFacadeInterface
class NiceHelloWorldDecorator implements HelloWorldFacadeInterface
{
public function __construct(
private readonly HelloWorldFacadeInterface $decoratedService,
)
{
private readonly HelloWorldFacadeInterface $decoratedService
) {
}

public function hello(string $name): string
Expand All @@ -87,25 +89,51 @@ class HelloWorldDecorator implements HelloWorldFacadeInterface
}
}

class HelloWorldLoggerAwareDecorator implements HelloWorldFacadeInterface
{
public function __construct(
private readonly HelloWorldFacadeInterface $decoratedService,
private readonly LoggerInterface $logger
) {
}

public function hello(string $name): string
{
$result = $this->decoratedService->hello($name);

$this->logger->info->info($result);

return $result;
}
}

$container = new Container();

$container->register(HelloWorldFacadeInterface::class, function () {
return new HelloWorldFacade();
});

$container->register(HelloWorldFacadeInterface::class, function (
HelloWorldFacadeInterface $decorated
) {
return new NiceHelloWorldDecorator($decorated);
});

$container->decorate(HelloWorldFacadeInterface::class, function(
HelloWorldFacadeInterface $serviceForDecoration
HelloWorldFacadeInterface $decorated,
Container $container
) {
return new HelloWorldLoggerAwareDecorator($serviceForDecoration);
return new HelloWorldLoggerAwareDecorator(
$decorated,
$container->get(LoggerInterface::class)
);
});

echo $container->get(HelloWorldFacadeInterface::class)->hello('Stas');
// Output: Hello, Stas. I'm glad to see you


```


### Sample code for:

- [PSR-11](https://www.php-fig.org/psr/psr-11/)
40 changes: 30 additions & 10 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,23 +1,43 @@
{
"name": "micro/dependency-injection",
"description": "Dependency injection service container",
"type": "library",
"license": "MIT",
"version": "1.1",
"autoload": {
"psr-4": {
"Micro\\Component\\DependencyInjection\\": "src/"
}
},
"type": "library",
"authors": [
{
"name": "Stanislau.Komar",
"email": "stanislau_komar@epam.com"
}
],
"require": {
"php": ">=8.0",
"psr/container": "^2.0",
"micro/autowire": "^1"
"php": "^8.2",
"psr/container": "^2.0"
},
"require-dev": {
"ergebnis/composer-normalize": "^2.29",
"phpmd/phpmd": "^2.13",
"phpunit/phpunit": "^9.5",
"squizlabs/php_codesniffer": "^3.7"
},
"conflict": {
"micro/autowire": "<1.1"
},
"suggest": {
"micro/autowire": "Autowire helper for dependency injection"
},
"autoload": {
"psr-4": {
"Micro\\Component\\DependencyInjection\\": "src/"
}
},
"config": {
"allow-plugins": {
"ergebnis/composer-normalize": true
}
},
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
}
}
7 changes: 6 additions & 1 deletion phpcs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@
<rule ref="Generic.ControlStructures.InlineControlStructure"/>
<rule ref="Generic.Files.ByteOrderMark"/>
<rule ref="Generic.Files.LineEndings"/>
<rule ref="Generic.Files.LineLength"/>
<rule ref="Generic.Files.LineLength">
<properties>
<property name="lineLimit" value="120"/>
<property name="absoluteLineLimit" value="120"/>
</properties>
</rule>
<rule ref="Generic.Formatting.DisallowMultipleStatements"/>
<rule ref="Generic.Formatting.MultipleStatementAlignment"/>
<rule ref="Generic.Formatting.NoSpaceAfterCast"/>
Expand Down
Loading