Skip to content

Commit

Permalink
Add previewify prefix (#24)
Browse files Browse the repository at this point in the history
* add required previewify prefix

* Fix code style (php-cs-fixer)

* only add prefix when not already available

* Fix code style (php-cs-fixer)

Co-authored-by: PHP CS Fixer <[email protected]>
  • Loading branch information
tpetry and PHP CS Fixer authored Jul 5, 2022
1 parent cf8ec8d commit a737879
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 7 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,9 @@ The `previewify()` method also returns a signed URL to the image, which lets you
<img alt="@seo('title')" src="@seo('previewify', 'blog')">
```

> **Note**
> The `previewify:` prefix will be automatically prepended to all provided data keys.
## Examples

### Service Provider
Expand Down
9 changes: 7 additions & 2 deletions src/SEOManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,14 @@ public function previewify(string $alias, int|string|array $data = null): string

if ($data === null) {
$data = [
'title' => $this->raw('title'),
'description' => $this->raw('description'),
'previewify:title' => $this->raw('title'),
'previewify:description' => $this->raw('description'),
];
} else {
$data = array_combine(
array_map(fn ($key) => str_starts_with($key, 'previewify:') ? $key : "previewify:{$key}", array_keys($data)),
$data,
);
}

$query = base64_encode(json_encode($data, JSON_THROW_ON_ERROR));
Expand Down
10 changes: 5 additions & 5 deletions tests/Pest/PreviewifyTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@

test('previewify templates can be given data', function () {
seo()->previewify('blog', 1);
expect(seo()->previewify('blog', ['title' => 'abc', 'excerpt' => 'def']))
expect(seo()->previewify('blog', ['title' => 'abc', 'previewify:excerpt' => 'def']))
->toContain('previewify.app/generate/templates/1')
->toContain(base64_encode(json_encode(['title' => 'abc', 'excerpt' => 'def'])));
->toContain(base64_encode(json_encode(['previewify:title' => 'abc', 'previewify:excerpt' => 'def'])));
});

test('the previewify method returns a link to a signed url', function () {
seo()->previewify('blog', 1);

expect(seo()->previewify('blog', ['title' => 'abc']))
->toContain('?signature=' . hash_hmac('sha256', base64_encode(json_encode(['title' => 'abc'])), config('services.previewify.key')));
->toContain('?signature=' . hash_hmac('sha256', base64_encode(json_encode(['previewify:title' => 'abc'])), config('services.previewify.key')));
});

test("previewify templates use default data when they're not passed any data explicitly", function () {
Expand All @@ -37,7 +37,7 @@

expect(seo()->previewify('blog'))
->toContain('previewify.app/generate/templates/1')
->toContain(base64_encode(json_encode(['title' => 'foo', 'description' => 'bar'])));
->toContain(base64_encode(json_encode(['previewify:title' => 'foo', 'previewify:description' => 'bar'])));
});

test('previewify images are used as the cover images', function () {
Expand Down Expand Up @@ -66,7 +66,7 @@

expect(seo()->previewify('blog'))
->toContain('previewify.app/generate/templates/1')
->toContain(base64_encode(json_encode(['title' => 'foo', 'description' => 'bar'])));
->toContain(base64_encode(json_encode(['previewify:title' => 'foo', 'previewify:description' => 'bar'])));
});

test('the @seo helper can be used for setting a previewify image', function () {
Expand Down

0 comments on commit a737879

Please sign in to comment.