Skip to content

Commit 580f2c6

Browse files
authored
Merge pull request #5 from Micro-PHP/chore/enhancement
Chore: Enhancement
2 parents f00f3d9 + dc893c3 commit 580f2c6

File tree

13 files changed

+280
-115
lines changed

13 files changed

+280
-115
lines changed

.gitattributes

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Path-based git attributes
2+
# https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
3+
4+
# Ignore all test and documentation with "export-ignore".
5+
/.github export-ignore
6+
/.gitattributes export-ignore
7+
/.gitignore export-ignore
8+
/phpcs.xml export-ignore
9+
/phpmd.xml export-ignore
10+
/phpunit.xml export-ignore

.github/workflows/.editorconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[{*.yaml,*.yml}]
2+
indent_size = 2

.github/workflows/ci.yaml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Plugin CI
2+
on:
3+
push:
4+
branches: [ 'master' ]
5+
pull_request:
6+
7+
jobs:
8+
tests:
9+
name: "Tests ${{ matrix.php-version }} deps ${{ matrix.dependency-versions }}"
10+
runs-on: ubuntu-22.04
11+
12+
strategy:
13+
fail-fast: false
14+
matrix:
15+
# normal, highest, non-dev installs
16+
php-version: [ '8.2' ]
17+
dependency-versions: [ 'highest' ]
18+
include:
19+
# testing lowest PHP version with the lowest dependencies
20+
- php-version: '8.2'
21+
dependency-versions: 'lowest'
22+
23+
# testing dev versions with the highest PHP
24+
- php-version: '8.2'
25+
dependency-versions: 'highest'
26+
27+
steps:
28+
- name: "Checkout code"
29+
uses: "actions/checkout@v2"
30+
31+
- name: "Install PHP"
32+
uses: "shivammathur/setup-php@v2"
33+
with:
34+
coverage: "none"
35+
php-version: "${{ matrix.php-version }}"
36+
37+
- name: "Composer install"
38+
uses: "ramsey/composer-install@v2"
39+
with:
40+
dependency-versions: "${{ matrix.dependency-versions }}"
41+
composer-options: "--prefer-dist --no-progress"
42+
43+
- name: "Run tests"
44+
run: "./vendor/bin/phpunit"

.github/workflows/static.yaml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
on: [pull_request]
2+
name: Static analysis
3+
4+
jobs:
5+
composer-validate:
6+
name: Composer validate & normalize
7+
runs-on: ubuntu-22.04
8+
9+
steps:
10+
- name: Setup PHP
11+
uses: shivammathur/setup-php@v2
12+
with:
13+
php-version: 8.2
14+
coverage: none
15+
tools: composer-normalize
16+
17+
- name: Checkout code
18+
uses: actions/checkout@v2
19+
20+
- name: Validate
21+
run: composer validate --strict
22+
23+
- name: Normalize
24+
run: composer-normalize --dry-run
25+
26+
phpcs:
27+
name: PHP_CodeSniffer
28+
runs-on: ubuntu-22.04
29+
30+
steps:
31+
- name: Checkout code
32+
uses: actions/checkout@v2
33+
34+
- name: Setup PHP
35+
uses: shivammathur/setup-php@v2
36+
with:
37+
php-version: 8.2
38+
coverage: none
39+
tools: squizlabs/php_codesniffer:^3.7
40+
41+
- name: Download dependencies
42+
uses: ramsey/composer-install@v2
43+
44+
- name: PHP_CodeSniffer
45+
run: ./vendor/bin/phpcs --standard=phpcs.xml ./src/
46+
47+
phpmd:
48+
name: Mess Detector
49+
runs-on: ubuntu-22.04
50+
steps:
51+
- name: Checkout code
52+
uses: actions/checkout@v2
53+
54+
- name: Setup PHP
55+
uses: shivammathur/setup-php@v2
56+
with:
57+
php-version: 8.2
58+
coverage: none
59+
tools: phpmd/phpmd:^2.13
60+
61+
- name: Download dependencies
62+
uses: ramsey/composer-install@v2
63+
64+
- name: Mess Detector
65+
run: ./vendor/bin/phpmd ./src/ github ./phpmd.xml

README.md

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
### Requirements
44

5-
PHP >= 8.0.0
5+
PHP >= 8.2
66

77
### How to use the library
88

@@ -34,7 +34,7 @@ include 'vendor/autoload.php';
3434
```php
3535
use \Micro\Component\DependencyInjection\Container;
3636

37-
class Logger {
37+
class Logger implements LoggerInterface {
3838
}
3939

4040
class Mailer {
@@ -43,10 +43,14 @@ class Mailer {
4343

4444
$container = new Container();
4545

46-
$container->register(Logger::class, function(Container $container) {
46+
$container->register(LoggerInterface::class, function(Container $container) {
4747
return new Logger();
4848
});
4949

50+
$container->register('logger.doctrine', function(Container $container) {
51+
return new Logger('doctrine-channel');
52+
});
53+
5054
$container->register(Mailer::class, function(Container $container) {
5155
return new Mailer($container->get(Logger::class));
5256
});
@@ -70,13 +74,11 @@ class HelloWorldFacade implements HelloWorldFacadeInterface
7074
}
7175
}
7276

73-
74-
class HelloWorldDecorator implements HelloWorldFacadeInterface
77+
class NiceHelloWorldDecorator implements HelloWorldFacadeInterface
7578
{
7679
public function __construct(
77-
private readonly HelloWorldFacadeInterface $decoratedService,
78-
)
79-
{
80+
private readonly HelloWorldFacadeInterface $decoratedService
81+
) {
8082
}
8183

8284
public function hello(string $name): string
@@ -87,25 +89,51 @@ class HelloWorldDecorator implements HelloWorldFacadeInterface
8789
}
8890
}
8991

92+
class HelloWorldLoggerAwareDecorator implements HelloWorldFacadeInterface
93+
{
94+
public function __construct(
95+
private readonly HelloWorldFacadeInterface $decoratedService,
96+
private readonly LoggerInterface $logger
97+
) {
98+
}
99+
100+
public function hello(string $name): string
101+
{
102+
$result = $this->decoratedService->hello($name);
103+
104+
$this->logger->info->info($result);
105+
106+
return $result;
107+
}
108+
}
109+
90110
$container = new Container();
91111

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

116+
$container->register(HelloWorldFacadeInterface::class, function (
117+
HelloWorldFacadeInterface $decorated
118+
) {
119+
return new NiceHelloWorldDecorator($decorated);
120+
});
121+
96122
$container->decorate(HelloWorldFacadeInterface::class, function(
97-
HelloWorldFacadeInterface $serviceForDecoration
123+
HelloWorldFacadeInterface $decorated,
124+
Container $container
98125
) {
99-
return new HelloWorldLoggerAwareDecorator($serviceForDecoration);
126+
return new HelloWorldLoggerAwareDecorator(
127+
$decorated,
128+
$container->get(LoggerInterface::class)
129+
);
100130
});
101131

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

105-
106135
```
107136

108-
109137
### Sample code for:
110138

111139
- [PSR-11](https://www.php-fig.org/psr/psr-11/)

composer.json

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,43 @@
11
{
22
"name": "micro/dependency-injection",
33
"description": "Dependency injection service container",
4-
"type": "library",
54
"license": "MIT",
6-
"version": "1.1",
7-
"autoload": {
8-
"psr-4": {
9-
"Micro\\Component\\DependencyInjection\\": "src/"
10-
}
11-
},
5+
"type": "library",
126
"authors": [
137
{
148
"name": "Stanislau.Komar",
159
"email": "stanislau_komar@epam.com"
1610
}
1711
],
1812
"require": {
19-
"php": ">=8.0",
20-
"psr/container": "^2.0",
21-
"micro/autowire": "^1"
13+
"php": "^8.2",
14+
"psr/container": "^2.0"
15+
},
16+
"require-dev": {
17+
"ergebnis/composer-normalize": "^2.29",
18+
"phpmd/phpmd": "^2.13",
19+
"phpunit/phpunit": "^9.5",
20+
"squizlabs/php_codesniffer": "^3.7"
21+
},
22+
"conflict": {
23+
"micro/autowire": "<1.1"
24+
},
25+
"suggest": {
26+
"micro/autowire": "Autowire helper for dependency injection"
27+
},
28+
"autoload": {
29+
"psr-4": {
30+
"Micro\\Component\\DependencyInjection\\": "src/"
31+
}
32+
},
33+
"config": {
34+
"allow-plugins": {
35+
"ergebnis/composer-normalize": true
36+
}
37+
},
38+
"extra": {
39+
"branch-alias": {
40+
"dev-master": "1.x-dev"
41+
}
2242
}
2343
}

phpcs.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@
1414
<rule ref="Generic.ControlStructures.InlineControlStructure"/>
1515
<rule ref="Generic.Files.ByteOrderMark"/>
1616
<rule ref="Generic.Files.LineEndings"/>
17-
<rule ref="Generic.Files.LineLength"/>
17+
<rule ref="Generic.Files.LineLength">
18+
<properties>
19+
<property name="lineLimit" value="120"/>
20+
<property name="absoluteLineLimit" value="120"/>
21+
</properties>
22+
</rule>
1823
<rule ref="Generic.Formatting.DisallowMultipleStatements"/>
1924
<rule ref="Generic.Formatting.MultipleStatementAlignment"/>
2025
<rule ref="Generic.Formatting.NoSpaceAfterCast"/>

0 commit comments

Comments
 (0)