44
55namespace Http \Client \Plugin \Vcr \Recorder ;
66
7- use GuzzleHttp \Psr7 ;
7+ use GuzzleHttp \Psr7 \ Message ;
88use Psr \Http \Message \ResponseInterface ;
99use Psr \Log \LoggerAwareInterface ;
1010use Psr \Log \LoggerAwareTrait ;
@@ -31,7 +31,12 @@ final class FilesystemRecorder implements RecorderInterface, PlayerInterface, Lo
3131 */
3232 private $ filesystem ;
3333
34- public function __construct (string $ directory , ?Filesystem $ filesystem = null )
34+ /**
35+ * @var array
36+ */
37+ private $ filters ;
38+
39+ public function __construct (string $ directory , ?Filesystem $ filesystem = null ,array $ filters =[])
3540 {
3641 $ this ->filesystem = $ filesystem ?? new Filesystem ();
3742
@@ -44,6 +49,7 @@ public function __construct(string $directory, ?Filesystem $filesystem = null)
4449 }
4550
4651 $ this ->directory = realpath ($ directory ).\DIRECTORY_SEPARATOR ;
52+ $ this ->filters = $ filters ;
4753 }
4854
4955 public function replay (string $ name ): ?ResponseInterface
@@ -59,15 +65,19 @@ public function replay(string $name): ?ResponseInterface
5965
6066 $ this ->log ('Response replayed from {filename} ' , $ context );
6167
62- return Psr7 \parse_response (file_get_contents ($ filename ));
68+ return Message:: parseResponse (file_get_contents ($ filename ));
6369 }
6470
6571 public function record (string $ name , ResponseInterface $ response ): void
6672 {
6773 $ filename = "{$ this ->directory }$ name.txt " ;
6874 $ context = compact ('name ' , 'filename ' );
6975
70- $ this ->filesystem ->dumpFile ($ filename , Psr7 \str ($ response ));
76+ $ content = Message::toString ($ response );
77+ foreach ($ this ->filters as $ regularExpression => $ replacement ) {
78+ $ content = preg_replace ($ regularExpression , $ replacement , $ content );
79+ }
80+ $ this ->filesystem ->dumpFile ($ filename , $ content );
7181
7282 $ this ->log ('Response for {name} stored into {filename} ' , $ context );
7383 }
0 commit comments