Skip to content

Commit 1c1d0c6

Browse files
authored
Refactor service container namespace (#11)
1 parent 5669e89 commit 1c1d0c6

File tree

4 files changed

+51
-49
lines changed

4 files changed

+51
-49
lines changed

app/Application.php

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public function boot(): void
113113
}
114114

115115
/** @var Config $config */
116-
$config = $this->container->get('config');
116+
$config = $this->container->get('app/config');
117117

118118
/**
119119
* Load the plugin text domain for translation.
@@ -200,13 +200,16 @@ private function bootInstances(): void
200200

201201
private function registerCoreServices(): void
202202
{
203-
$this->pimple['hook'] = $this->hook;
204-
$this->pimple['config'] = function (): Config {
203+
$this->pimple['app/hook'] = $this->hook;
204+
$this->pimple['app/plugin_file_path'] = $this->pluginFilePath;
205+
$this->pimple['app/config'] = static function (PimpleContainer $container): Config {
205206
$config = [];
206-
$configDir = dirname($this->pluginFilePath) . '/inc/config';
207207

208-
if (is_dir($configDir)) {
209-
$configPath = wp_normalize_path(dirname($this->pluginFilePath) . '/inc/config');
208+
/** @var string $pluginFilePath */
209+
$pluginFilePath = $container['app/plugin_file_path'] ?? '';
210+
$configPath = wp_normalize_path(dirname($pluginFilePath) . '/inc/config');
211+
212+
if (is_dir($configPath)) {
210213
$iterator = new RecursiveDirectoryIterator($configPath, RecursiveDirectoryIterator::SKIP_DOTS);
211214

212215
foreach ($iterator as $configFile) {
@@ -227,22 +230,19 @@ private function registerCoreServices(): void
227230

228231
return new Config($config);
229232
};
230-
231-
$this->pimple['app.plugin_file_path'] = $this->pluginFilePath;
232233
$this->pimple['app'] = static function (PimpleContainer $container): App {
233234
/** @var Config $config */
234-
$config = $container['config'];
235-
236-
/** @var array<string,Registry> $settings */
237-
$settings = $container['settings'] ?? [];
238-
235+
$config = $container['app/config'];
239236
$name = $config->get('app.name');
240237

241238
if (! is_string($name) || Val::isBlank($name)) {
242239
throw new InvalidArgumentException('The app "name" is required and cannot be empty.');
243240
}
244241

245-
return new App($name, $settings);
242+
/** @var array<string,Registry> $settingRegistries */
243+
$settingRegistries = $container['app/setting_registries'] ?? [];
244+
245+
return new App($name, $settingRegistries);
246246
};
247247
}
248248
}

app/Facades/Config.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ final class Config extends Facade
1515
{
1616
protected static function getFacadeAccessor(): string
1717
{
18-
return 'config';
18+
return 'app/config';
1919
}
2020
}

app/Providers/SettingsProvider.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ class SettingsProvider extends ServiceProvider implements Bootable
2323
{
2424
public function register(): void
2525
{
26-
$this->container['settings'] = static function (Container $container): array {
26+
$this->container['app/setting_registries'] = static function (Container $container): array {
2727
/** @var Config $config */
28-
$config = $container['config'];
29-
$appName = $config->get('app.name');
30-
$filePath = $container['app.plugin_file_path'];
28+
$config = $container['app/config'];
29+
$filePath = $container['app/plugin_file_path'] ?? '';
30+
$filePath = is_string($filePath) ? $filePath : '';
3131

32-
if (! is_string($filePath) || Val::isBlank($filePath)) {
32+
if (Val::isBlank($filePath)) {
3333
throw new InvalidArgumentException('The plugin file path is required to register the settings.');
3434
}
3535

@@ -39,13 +39,15 @@ public function register(): void
3939
throw new InvalidArgumentException('The settings directory does not exist.');
4040
}
4141

42-
/** @var array<string,Registry> $registries */
43-
$registries = [];
42+
$appName = $config->get('app.name');
4443
$settingFiles = new RecursiveDirectoryIterator(
4544
$settingsDir,
4645
RecursiveDirectoryIterator::SKIP_DOTS,
4746
);
4847

48+
/** @var array<string,Registry> $settingRegistries */
49+
$settingRegistries = [];
50+
4951
foreach ($settingFiles as $settingFile) {
5052
if (
5153
! $settingFile instanceof SplFileInfo ||
@@ -78,10 +80,10 @@ public function register(): void
7880
$registry->setPrefix($prefix);
7981
}
8082

81-
$registries[$settingGroup] = $registry;
83+
$settingRegistries[$settingGroup] = $registry;
8284
}
8385

84-
return $registries;
86+
return $settingRegistries;
8587
};
8688
}
8789

@@ -92,7 +94,7 @@ public function boot(): void
9294
*
9395
* @var array<string,Registry> $settings
9496
*/
95-
$settings = $this->container['settings'];
97+
$settings = $this->container['app/setting_registries'];
9698

9799
foreach ($settings as $setting) {
98100
$this->hook->addAction('admin_init', [$setting, 'register']);

tests/app/ApplicationTest.php

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public function getInstances(ContainerInterface $container): iterable
8484

8585
$container = $app->getContainer();
8686
/** @var Config $config */
87-
$config = $container->get('config');
87+
$config = $container->get('app/config');
8888

8989
$this->assertSame('wp-test', $config->get('app.text_domain'));
9090
$this->assertSame('/dist', $config->get('app.assets_path'));
@@ -113,56 +113,56 @@ public function getInstances(ContainerInterface $container): iterable
113113
$app->addServices([SettingsProvider::class]);
114114
$app->boot();
115115

116-
$settings = $app->getContainer()->get('settings');
116+
$settingRegistries = $app->getContainer()->get('app/setting_registries');
117117

118118
do_action('admin_init');
119119

120-
$this->assertArrayNotHasKey('wp-test/plugin-foo', $settings); // Unsupported file extension, `.json`.
121-
$this->assertArrayNotHasKey('wp-test/plugin-name-1', $settings); // Settings empty.
120+
$this->assertArrayNotHasKey('wp-test/plugin-foo', $settingRegistries); // Unsupported file extension, `.json`.
121+
$this->assertArrayNotHasKey('wp-test/plugin-name-1', $settingRegistries); // Settings empty.
122122

123123
// wp-test/plugin-name-0
124-
$this->assertInstanceOf(SettingsRegistry::class, $settings['wp-test/plugin-name-0']);
125-
$this->assertTrue($settings['wp-test/plugin-name-0']->isRegistered());
124+
$this->assertInstanceOf(SettingsRegistry::class, $settingRegistries['wp-test/plugin-name-0']);
125+
$this->assertTrue($settingRegistries['wp-test/plugin-name-0']->isRegistered());
126126
$this->assertSame('Hello, World!', get_option('wp_test_foo'));
127127

128-
$registered = $settings['wp-test/plugin-name-0']->getRegisteredSettings();
128+
$registered = $settingRegistries['wp-test/plugin-name-0']->getRegisteredSettings();
129129

130130
$this->assertTrue(array_key_exists('wp_test_foo', $registered));
131131
$this->assertInstanceOf(SettingRegistrar::class, $registered['wp_test_foo']);
132132

133133
// wp-test/plugin-name-2
134-
$this->assertInstanceOf(SettingsRegistry::class, $settings['wp-test/plugin-name-2']);
135-
$this->assertTrue($settings['wp-test/plugin-name-2']->isRegistered());
134+
$this->assertInstanceOf(SettingsRegistry::class, $settingRegistries['wp-test/plugin-name-2']);
135+
$this->assertTrue($settingRegistries['wp-test/plugin-name-2']->isRegistered());
136136
$this->assertSame(100, get_option('wp_test_bar'));
137137

138-
$registered = $settings['wp-test/plugin-name-2']->getRegisteredSettings();
138+
$registered = $settingRegistries['wp-test/plugin-name-2']->getRegisteredSettings();
139139

140140
$this->assertTrue(array_key_exists('wp_test_bar', $registered));
141141
$this->assertInstanceOf(SettingRegistrar::class, $registered['wp_test_bar']);
142142

143-
$settings['wp-test/plugin-name-0']->deregister();
143+
$settingRegistries['wp-test/plugin-name-0']->deregister();
144144

145145
// wp-test/plugin-name-0
146-
$this->assertFalse($settings['wp-test/plugin-name-0']->isRegistered());
146+
$this->assertFalse($settingRegistries['wp-test/plugin-name-0']->isRegistered());
147147
$this->assertFalse(get_option('wp_test_foo'));
148-
$this->assertEmpty($settings['wp-test/plugin-name-0']->getRegisteredSettings());
148+
$this->assertEmpty($settingRegistries['wp-test/plugin-name-0']->getRegisteredSettings());
149149

150150
// wp-test/plugin-name-2
151-
$this->assertInstanceOf(SettingsRegistry::class, $settings['wp-test/plugin-name-2']);
152-
$this->assertTrue($settings['wp-test/plugin-name-2']->isRegistered());
151+
$this->assertInstanceOf(SettingsRegistry::class, $settingRegistries['wp-test/plugin-name-2']);
152+
$this->assertTrue($settingRegistries['wp-test/plugin-name-2']->isRegistered());
153153
$this->assertSame(100, get_option('wp_test_bar'));
154154

155-
$registered = $settings['wp-test/plugin-name-2']->getRegisteredSettings();
155+
$registered = $settingRegistries['wp-test/plugin-name-2']->getRegisteredSettings();
156156

157157
$this->assertTrue(array_key_exists('wp_test_bar', $registered));
158158
$this->assertInstanceOf(SettingRegistrar::class, $registered['wp_test_bar']);
159159

160-
$settings['wp-test/plugin-name-2']->deregister();
160+
$settingRegistries['wp-test/plugin-name-2']->deregister();
161161

162162
// wp-test/plugin-name-2
163-
$this->assertFalse($settings['wp-test/plugin-name-2']->isRegistered());
163+
$this->assertFalse($settingRegistries['wp-test/plugin-name-2']->isRegistered());
164164
$this->assertFalse(get_option('wp_test_bar'));
165-
$this->assertEmpty($settings['wp-test/plugin-name-2']->getRegisteredSettings());
165+
$this->assertEmpty($settingRegistries['wp-test/plugin-name-2']->getRegisteredSettings());
166166
}
167167

168168
public function testSettingsServiceAddOptionDeregisteredInvalidValue(): void
@@ -183,8 +183,8 @@ public function getInstances(ContainerInterface $container): iterable
183183

184184
$this->assertSame('Hello, World!', get_option('wp_test_foo'));
185185

186-
$settings = $app->getContainer()->get('settings');
187-
$settings['wp-test/plugin-name-0']->deregister();
186+
$settingRegistries = $app->getContainer()->get('app/setting_registries');
187+
$settingRegistries['wp-test/plugin-name-0']->deregister();
188188

189189
$this->assertTrue(add_option('wp_test_foo', ''));
190190
}
@@ -209,8 +209,8 @@ public function getInstances(ContainerInterface $container): iterable
209209
$this->assertTrue(add_option('wp_test_foo', 'Hai!'));
210210
$this->assertSame('Hai!', get_option('wp_test_foo'));
211211

212-
$settings = $app->getContainer()->get('settings');
213-
$settings['wp-test/plugin-name-0']->deregister();
212+
$settingRegistries = $app->getContainer()->get('app/setting_registries');
213+
$settingRegistries['wp-test/plugin-name-0']->deregister();
214214

215215
$this->assertTrue(update_option('wp_test_foo', ''));
216216
}
@@ -281,7 +281,7 @@ public function deactivate(ContainerInterface $container): void
281281
$app->boot();
282282

283283
/** @var Hook $hook */
284-
$hook = $app->getContainer()->get('hook');
284+
$hook = $app->getContainer()->get('app/hook');
285285

286286
self::assertSame(10, $hook->hasAction('init', '@app.blocks.register'));
287287

0 commit comments

Comments
 (0)