77use ProxyManager \Factory \AccessInterceptorValueHolderFactory ;
88use ProxyManager \FileLocator \FileLocator ;
99use ProxyManager \GeneratorStrategy \FileWriterGeneratorStrategy ;
10+ use ProxyManager \Proxy \AccessInterceptorInterface ;
1011
1112/**
1213 * @internal
@@ -35,44 +36,33 @@ public function getProxyDir(): string
3536
3637 public function createDeviceDetectorProxy (): DeviceDetector
3738 {
38- $ parseCaller = static function (
39- DeviceDetector $ proxy ,
40- DeviceDetector $ real
41- ): void {
42- if (!$ real ->isParsed ()) {
43- $ real ->parse ();
44- }
45- };
39+ $ configuration = $ this ->createConfiguration ();
4640
47- $ magicParseCaller = static function (
48- DeviceDetector $ proxy ,
49- DeviceDetector $ real ,
50- string $ method ,
51- array $ arguments
52- ): void {
53- if (!$ real ->isParsed () && 0 === stripos ($ arguments ['methodName ' ] ?? '' , 'is ' )) {
54- $ real ->parse ();
55- }
56- };
41+ $ instance = new DeviceDetector ();
5742
58- $ configuration = $ this ->createConfiguration ();
59- $ factory = new AccessInterceptorValueHolderFactory ($ configuration );
43+ $ autoParserForMagicCall = $ this ->buildAutoParserCallerForMagicCall ();
44+ $ autoParser = $ this ->buildAutoParserCaller ();
45+ $ prefixInterceptors = [
46+ '__call ' => $ autoParserForMagicCall ,
47+ 'getBot ' => $ autoParser ,
48+ 'getBrand ' => $ autoParser ,
49+ 'getBrandName ' => $ autoParser ,
50+ 'getClient ' => $ autoParser ,
51+ 'getDevice ' => $ autoParser ,
52+ 'getDeviceName ' => $ autoParser ,
53+ 'getModel ' => $ autoParser ,
54+ 'getOs ' => $ autoParser ,
55+ 'isBot ' => $ autoParser ,
56+ 'isBrowser ' => $ autoParser ,
57+ 'isDesktop ' => $ autoParser ,
58+ 'isMobile ' => $ autoParser ,
59+ ];
6060
61- return $ factory ->createProxy (new DeviceDetector (), [
62- '__call ' => $ magicParseCaller ,
63- 'getBot ' => $ parseCaller ,
64- 'getBrand ' => $ parseCaller ,
65- 'getBrandName ' => $ parseCaller ,
66- 'getClient ' => $ parseCaller ,
67- 'getDevice ' => $ parseCaller ,
68- 'getDeviceName ' => $ parseCaller ,
69- 'getModel ' => $ parseCaller ,
70- 'getOs ' => $ parseCaller ,
71- 'isBot ' => $ parseCaller ,
72- 'isBrowser ' => $ parseCaller ,
73- 'isDesktop ' => $ parseCaller ,
74- 'isMobile ' => $ parseCaller ,
75- ]);
61+ return (new AccessInterceptorValueHolderFactory ($ configuration ))
62+ ->createProxy (
63+ $ instance ,
64+ $ prefixInterceptors
65+ );
7666 }
7767
7868 private function createConfiguration (): Configuration
@@ -86,4 +76,44 @@ private function createConfiguration(): Configuration
8676
8777 return $ config ;
8878 }
79+
80+ /**
81+ * @return callable(
82+ * AccessInterceptorInterface<DeviceDetector> $proxy,
83+ * DeviceDetector $real,
84+ * string $method,
85+ * array $arguments,
86+ * )
87+ */
88+ private function buildAutoParserCallerForMagicCall (): callable
89+ {
90+ return static function (
91+ AccessInterceptorInterface $ proxy ,
92+ DeviceDetector $ real ,
93+ string $ method ,
94+ array $ arguments
95+ ): void {
96+ if (!$ real ->isParsed () && 0 === stripos ($ arguments ['methodName ' ] ?? '' , 'is ' )) {
97+ $ real ->parse ();
98+ }
99+ };
100+ }
101+
102+ /**
103+ * @return callable(
104+ * AccessInterceptorInterface<DeviceDetector> $proxy,
105+ * DeviceDetector $real,
106+ * )
107+ */
108+ private function buildAutoParserCaller (): callable
109+ {
110+ return static function (
111+ AccessInterceptorInterface $ proxy ,
112+ DeviceDetector $ real
113+ ): void {
114+ if (!$ real ->isParsed ()) {
115+ $ real ->parse ();
116+ }
117+ };
118+ }
89119}
0 commit comments