13
13
14
14
namespace Guanguans \LaravelSoar ;
15
15
16
+ use Composer \InstalledVersions ;
16
17
use Guanguans \LaravelSoar \Commands \ClearCommand ;
17
18
use Guanguans \LaravelSoar \Commands \RunCommand ;
18
19
use Guanguans \LaravelSoar \Commands \ScoreCommand ;
19
20
use Guanguans \LaravelSoar \Mixins \QueryBuilderMixin ;
20
- use Guanguans \LaravelSoar \Outputs \ClockworkOutput ;
21
- use Guanguans \LaravelSoar \Outputs \ConsoleOutput ;
22
- use Guanguans \LaravelSoar \Outputs \DebugBarOutput ;
23
- use Guanguans \LaravelSoar \Outputs \DumpOutput ;
24
- use Guanguans \LaravelSoar \Outputs \JsonOutput ;
25
- use Guanguans \LaravelSoar \Outputs \LogOutput ;
26
21
use Illuminate \Contracts \Container \Container ;
27
22
use Illuminate \Database \Eloquent \Builder as EloquentBuilder ;
28
23
use Illuminate \Database \Eloquent \Relations \Relation as RelationBuilder ;
29
24
use Illuminate \Database \Query \Builder as QueryBuilder ;
25
+ use Illuminate \Foundation \Console \AboutCommand ;
30
26
use Illuminate \Support \Collection ;
31
27
use Illuminate \Support \ServiceProvider ;
32
- use Illuminate \Support \Str ;
33
28
34
29
class SoarServiceProvider extends ServiceProvider
35
30
{
36
31
public array $ singletons = [
37
- Bootstrapper::class => Bootstrapper::class,
38
- QueryBuilderMixin::class => QueryBuilderMixin::class,
39
-
40
- ClockworkOutput::class => ClockworkOutput::class,
41
- ConsoleOutput::class => ConsoleOutput::class,
42
- DebugBarOutput::class => DebugBarOutput::class,
43
- DumpOutput::class => DumpOutput::class,
44
- JsonOutput::class => JsonOutput::class,
45
- LogOutput::class => LogOutput::class,
32
+ Bootstrapper::class,
46
33
];
47
34
48
35
/**
49
36
* @noinspection PhpMissingParentCallCommonInspection
50
37
*
51
- * @throws \Illuminate\Contracts\Container\BindingResolutionException
52
38
* @throws \ReflectionException
53
39
*/
54
40
public function register (): void
55
41
{
56
42
$ this ->setupConfig ();
57
- $ this ->registerMacros ();
58
- $ this ->registerSoar ();
43
+ $ this ->registerMixins ();
59
44
$ this ->registerOutputManager ();
45
+ $ this ->registerSoar ();
60
46
}
61
47
62
48
/**
@@ -77,8 +63,6 @@ public function boot(): void
77
63
public function provides (): array
78
64
{
79
65
return [
80
- $ this ->toAlias (OutputManager::class),
81
- $ this ->toAlias (Soar::class),
82
66
Bootstrapper::class,
83
67
OutputManager::class,
84
68
Soar::class,
@@ -100,30 +84,16 @@ private function setupConfig(): void
100
84
}
101
85
102
86
/**
103
- * @throws \Illuminate\Contracts\Container\BindingResolutionException
104
87
* @throws \ReflectionException
105
88
*/
106
- private function registerMacros (): void
89
+ private function registerMixins (): void
107
90
{
108
- $ queryBuilderMixin = $ this -> app -> make ( QueryBuilderMixin::class) ;
91
+ $ queryBuilderMixin = new QueryBuilderMixin ;
109
92
EloquentBuilder::mixin ($ queryBuilderMixin );
110
93
QueryBuilder::mixin ($ queryBuilderMixin );
111
94
RelationBuilder::mixin ($ queryBuilderMixin );
112
95
}
113
96
114
- private function registerSoar (): void
115
- {
116
- $ this ->app ->singleton (
117
- Soar::class,
118
- static fn (): Soar => Soar::make (
119
- config ('soar.options ' , []),
120
- config ('soar.binary ' )
121
- )->setSudoPassword (config ('soar.sudo_password ' ))
122
- );
123
-
124
- $ this ->app ->alias (Soar::class, $ this ->toAlias (Soar::class));
125
- }
126
-
127
97
private function registerOutputManager (): void
128
98
{
129
99
$ this ->app ->singleton (
@@ -137,10 +107,19 @@ private function registerOutputManager(): void
137
107
/** @var string $class */
138
108
return [$ class => $ container ->make ($ class , $ parameters )];
139
109
})
140
- ->pipe (static fn (Collection $ collection ): OutputManager => new OutputManager ($ collection ->all ()))
110
+ ->pipe (static fn (Collection $ outputs ): OutputManager => new OutputManager ($ outputs ->all ()))
141
111
);
112
+ }
142
113
143
- $ this ->app ->alias (OutputManager::class, $ this ->toAlias (OutputManager::class));
114
+ private function registerSoar (): void
115
+ {
116
+ $ this ->app ->singleton (
117
+ Soar::class,
118
+ static fn (): Soar => Soar::make (
119
+ config ('soar.options ' , []),
120
+ config ('soar.binary ' )
121
+ )->setSudoPassword (config ('soar.sudo_password ' ))
122
+ );
144
123
}
145
124
146
125
private function registerCommands (): void
@@ -151,20 +130,24 @@ private function registerCommands(): void
151
130
RunCommand::class,
152
131
ScoreCommand::class,
153
132
]);
133
+
134
+ $ this ->addSectionToAboutCommand ();
154
135
}
155
136
}
156
137
157
- /**
158
- * @param class-string $class
159
- */
160
- private function toAlias (string $ class , string $ prefix = 'soar. ' ): string
138
+ private function addSectionToAboutCommand (): void
161
139
{
162
- $ alias = Str::snake (class_basename ($ class ), '. ' );
163
-
164
- if (Str::startsWith ($ alias , Str::replaceLast ('. ' , '' , $ prefix ))) {
165
- return $ alias ;
166
- }
167
-
168
- return $ prefix .$ alias ;
140
+ AboutCommand::add (
141
+ str ($ package = 'guanguans/laravel-soar ' )->headline ()->toString (),
142
+ static fn (): array => collect (['Homepage ' => "https://github.com/ $ package " ])
143
+ ->when (
144
+ class_exists (InstalledVersions::class),
145
+ static fn (Collection $ data ): Collection => $ data ->put (
146
+ 'Version ' ,
147
+ InstalledVersions::getPrettyVersion ($ package )
148
+ )
149
+ )
150
+ ->all ()
151
+ );
169
152
}
170
153
}
0 commit comments