Skip to content

Commit 20546a9

Browse files
committed
Přidána Nette\DI\Extension
1 parent 472bcf5 commit 20546a9

File tree

12 files changed

+163
-59
lines changed

12 files changed

+163
-59
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
/vendor
22
/composer.lock
33
/output.cs
4+
/tests/**/*.actual
5+
/tests/**/*.expected

composer.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
}
1010
],
1111
"require": {
12-
"nette/utils": "2.3.*|2.4.*"
12+
"php": "^7.1.0",
13+
"ext-mbstring": "*",
14+
"nette/utils": "2.3.*|2.4.*",
15+
"nette/di": "2.3.*|2.4.*",
16+
"nette/neon": "2.*"
1317
},
1418
"minimum-stability": "stable",
1519
"require-dev": {

src/DI/Extension.php

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Pd\Holidays\DI;
4+
5+
use Nette;
6+
use Pd;
7+
8+
9+
final class Extension extends Nette\DI\CompilerExtension
10+
{
11+
12+
public function loadConfiguration()
13+
{
14+
parent::loadConfiguration();
15+
16+
$builder = $this->getContainerBuilder();
17+
18+
$holidayFacade = $builder
19+
->addDefinition($this->prefix('holidayFacade'))
20+
->setFactory(Pd\Holidays\HolidayFacade::class)
21+
;
22+
23+
$this->addLocalization($holidayFacade, Pd\Holidays\Localizations\Czech::class, Pd\Holidays\Localizations\ICzech::COUNTRY_CODE_CZECH);
24+
$this->addLocalization($holidayFacade, Pd\Holidays\Localizations\Slovak::class, Pd\Holidays\Localizations\ISlovak::COUNTRY_CODE_SLOVAK);
25+
}
26+
27+
28+
private function addLocalization(Nette\DI\ServiceDefinition $holidayFacade, string $localizationClass, string $countryCode)
29+
{
30+
$builder = $this->getContainerBuilder();
31+
$countryCodePrefix = Nette\Utils\Strings::lower($countryCode);
32+
33+
$translations = Nette\Neon\Neon::decode(file_get_contents(__DIR__ . '/../Localizations/' . Nette\Utils\Strings::lower(Nette\Utils\Strings::substring($localizationClass, strrpos($localizationClass, '\\') + 1)) . '.neon'));
34+
35+
$czechHolidayFactory = $builder
36+
->addDefinition($this->prefix($countryCodePrefix . 'HolidayFactory'))
37+
->setFactory(Pd\Holidays\HolidayFactory::class, [$translations])
38+
->setAutowired(FALSE)
39+
;
40+
41+
$localization = $builder
42+
->addDefinition($this->prefix($countryCodePrefix))
43+
->setFactory($localizationClass, [$czechHolidayFactory])
44+
->setAutowired(FALSE)
45+
;
46+
47+
$holidayFacade
48+
->addSetup('addLocalization', [$countryCode, $localization]);
49+
}
50+
51+
}

src/Localizations/Czech.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ class Czech implements Pd\Holidays\ILocalization
2121
public function __construct(
2222
Pd\Holidays\HolidayFactory $holidayFactory
2323
) {
24-
2524
$this->holidayFactory = $holidayFactory;
2625
}
2726

src/Localizations/ICzech.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Pd\Holidays\Localizations;
4+
5+
interface ICzech
6+
{
7+
8+
public const COUNTRY_CODE_CZECH = 'CZ';
9+
10+
}

src/Localizations/ISlovak.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Pd\Holidays\Localizations;
4+
5+
interface ISlovak
6+
{
7+
8+
public const COUNTRY_CODE_SLOVAK = 'SK';
9+
}

src/Localizations/czech.neon

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
translates:
2-
CZ:
3-
_label_holiday_01_01: Nový rok
4-
_label_holiday_01_05: Svátek práce
5-
_label_holiday_08_05: Den vítězství
6-
_label_holiday_05_07: Den slovanských věrozvěstů Cyrila a Metoděje
7-
_label_holiday_06_07: Den upálení mistra Jana Husa
8-
_label_holiday_28_09: Den české státnosti
9-
_label_holiday_28_10: Den vzniku samostatného československého státu
10-
_label_holiday_17_11: Den boje za svobodu a demokracii
11-
_label_holiday_24_12: Štědrý den
12-
_label_holiday_25_12: 1. svátek vánoční
13-
_label_holiday_26_12: 2. svátek vánoční
14-
_label_holiday_eastern_friday: Velký pátek
15-
_label_holiday_eastern: Velikonoční pondělí
1+
_label_holiday_01_01: Nový rok
2+
_label_holiday_01_05: Svátek práce
3+
_label_holiday_08_05: Den vítězství
4+
_label_holiday_05_07: Den slovanských věrozvěstů Cyrila a Metoděje
5+
_label_holiday_06_07: Den upálení mistra Jana Husa
6+
_label_holiday_28_09: Den české státnosti
7+
_label_holiday_28_10: Den vzniku samostatného československého státu
8+
_label_holiday_17_11: Den boje za svobodu a demokracii
9+
_label_holiday_24_12: Štědrý den
10+
_label_holiday_25_12: 1. svátek vánoční
11+
_label_holiday_26_12: 2. svátek vánoční
12+
_label_holiday_eastern_friday: Velký pátek
13+
_label_holiday_eastern: Velikonoční pondělí

src/Localizations/slovak.neon

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
1-
translates:
2-
SK:
3-
_label_holiday_01_01: Deň vzniku Slovenskej republiky
4-
_label_holiday_06_01: Zjavenie Pána
5-
_label_holiday_01_05: Sviatok práce
6-
_label_holiday_08_05: Deň víťazstva nad fašizmom
7-
_label_holiday_05_07: Sviatok svätého Cyrila a svätého Metoda
8-
_label_holiday_29_08: Výročie Slovenského národného povstania
9-
_label_holiday_01_09: Deň ústavy Slovenskej republiky
10-
_label_holiday_15_09: Sedembolestná Panna Mária
11-
_label_holiday_01_11: Sviatok všetkých svätých
12-
_label_holiday_17_11: Deň boja za slobodu a demokraciu
13-
_label_holiday_24_12: Štedrý deň
14-
_label_holiday_25_12: Prvý sviatok vianočný
15-
_label_holiday_26_12: Druhý sviatok vianočný
16-
_label_holiday_eastern_friday: Veľký piatok
17-
_label_holiday_eastern: Veľkonočný pondelok
1+
_label_holiday_01_01: Deň vzniku Slovenskej republiky
2+
_label_holiday_06_01: Zjavenie Pána
3+
_label_holiday_01_05: Sviatok práce
4+
_label_holiday_08_05: Deň víťazstva nad fašizmom
5+
_label_holiday_05_07: Sviatok svätého Cyrila a svätého Metoda
6+
_label_holiday_29_08: Výročie Slovenského národného povstania
7+
_label_holiday_01_09: Deň ústavy Slovenskej republiky
8+
_label_holiday_15_09: Sedembolestná Panna Mária
9+
_label_holiday_01_11: Sviatok všetkých svätých
10+
_label_holiday_17_11: Deň boja za slobodu a demokraciu
11+
_label_holiday_24_12: Štedrý deň
12+
_label_holiday_25_12: Prvý sviatok vianočný
13+
_label_holiday_26_12: Druhý sviatok vianočný
14+
_label_holiday_eastern_friday: Veľký piatok
15+
_label_holiday_eastern: Veľkonočný pondelok

src/holiday.neon

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace PdTests\DI\Extension;
4+
5+
use Nette;
6+
use Pd;
7+
use Tester;
8+
9+
10+
require __DIR__ . '/../../bootstrap.php';
11+
12+
13+
/**
14+
* @testCase
15+
*/
16+
class ExtensionTest extends Tester\TestCase
17+
{
18+
19+
public function testExtension()
20+
{
21+
$extension = new Pd\Holidays\DI\Extension();
22+
23+
$compiler = new Nette\DI\Compiler();
24+
$compiler->addExtension('test', $extension);
25+
26+
$container = createContainer($compiler);
27+
/** @var Pd\Holidays\IHolidayFacade $holidayFacade */
28+
$holidayFacade = $container->getByType(Pd\Holidays\IHolidayFacade::class);
29+
30+
Tester\Assert::true($holidayFacade instanceof Pd\Holidays\HolidayFacade);
31+
32+
$czechYear = $holidayFacade->getHolidays(Pd\Holidays\Localizations\ICzech::COUNTRY_CODE_CZECH, (int) date('Y'));
33+
Tester\Assert::notEqual(0, count($czechYear->getHolidays()));
34+
35+
$newYear = $czechYear->getHoliday(new \DateTimeImmutable('2017-01-01'));
36+
Tester\Assert::equal('Nový rok', $newYear->getName());
37+
38+
$slovakYear = $holidayFacade->getHolidays(Pd\Holidays\Localizations\ISlovak::COUNTRY_CODE_SLOVAK, (int) date('Y'));
39+
Tester\Assert::notEqual(0, count($slovakYear->getHolidays()));
40+
41+
$newYear = $slovakYear->getHoliday(new \DateTimeImmutable('2017-01-01'));
42+
Tester\Assert::equal('Deň vzniku Slovenskej republiky', $newYear->getName());
43+
}
44+
}
45+
46+
47+
(new ExtensionTest())->run();

0 commit comments

Comments
 (0)