From 691b529e3cdd8e4f81ec57fd73fda8c80dabe857 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sun, 28 Aug 2022 21:16:16 +0300 Subject: [PATCH] feat(helpers): implement `fetch` helper #581 --- src/flextype/helpers/fetch.php | 100 +++++++++++++++++++++++++++++++ src/flextype/helpers/helpers.php | 1 + 2 files changed, 101 insertions(+) create mode 100644 src/flextype/helpers/fetch.php diff --git a/src/flextype/helpers/fetch.php b/src/flextype/helpers/fetch.php new file mode 100644 index 00000000..61586853 --- /dev/null +++ b/src/flextype/helpers/fetch.php @@ -0,0 +1,100 @@ +has($resource)) { + return entries()->fetch($resource, $options); + } + + // 2. Try to fetch data from the local files. + if (! strings($resource)->isUrl() && filesystem()->file($resource)->exists()) { + $result = filesystem()->file($resource)->get(); + switch (filesystem()->file($resource)->extension()) { + case 'yaml': + case 'yml': + $result = serializers()->yaml()->decode($result); + break; + + case 'php': + $result = serializers()->phparray()->decode($result); + break; + + case 'neon': + $result = serializers()->neon()->decode($result); + break; + + case 'md': + $result = serializers()->frontmatter()->decode($result); + break; + + case 'json5': + $result = serializers()->json5()->decode($result); + break; + + case 'json': + default: + $result = strings($result)->isJson() ? serializers()->json()->decode($result) : $result; + break; + } + return collection($result); + } + + // 3. Try to fetch data from the url. + if (strings($resource)->isUrl() || isset($options['base_uri'])) { + $client = new Client($options); + $request = new Request($options['method'] ?? 'GET', $resource); + + if (isset($options['async'])) { + $result = $client->sendAsync($request, $options); + } else { + if (isset($options['response'])) { + $result = $client->send($request, $options); + } else { + $response = $client->send($request, $options); + $body = $response->getBody()->getContents(); + $result = collection(['reasonPhrase' => $response->getReasonPhrase(), + 'statusCode' => $response->getStatusCode(), + 'headers' => $response->getHeaders(), + 'body' => strings($body)->isJson() ? serializers()->json()->decode($body) : $body]); + } + } + } + + return $result; + } +} diff --git a/src/flextype/helpers/helpers.php b/src/flextype/helpers/helpers.php index cdf9a4f6..2a40ec91 100644 --- a/src/flextype/helpers/helpers.php +++ b/src/flextype/helpers/helpers.php @@ -24,3 +24,4 @@ require_once __DIR__ . '/image.php'; require_once __DIR__ . '/upload.php'; require_once __DIR__ . '/tokens.php'; require_once __DIR__ . '/url.php'; +require_once __DIR__ . '/fetch.php'; \ No newline at end of file