Skip to content

Commit

Permalink
Add consts, improve examples
Browse files Browse the repository at this point in the history
  • Loading branch information
alies-dev committed Jan 26, 2024
1 parent aafb9ee commit 28d5971
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 10 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,10 @@ echo $link->webOutlook();
// Generate a link to create an event on outlook.office.com calendar
echo $link->webOffice();

// Generate a data uri for an ics file (for iCal & Outlook)
// Generate a data URI for an ics file (for iCal & Outlook)
echo $link->ics();
echo $link->ics(['URL' => 'https://my-page.com', 'UID' => 'custom-id']); //
echo $link->ics([], ['format' => 'file']); // e.g. to attach ics as a file to an email.

// Generate a data URI using arbitrary generator:
echo $link->formatWith(new \Your\Generator());
Expand Down
9 changes: 6 additions & 3 deletions src/Generators/Ics.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
*/
class Ics implements Generator
{
public const FORMAT_HTML = 'html';
public const FORMAT_FILE = 'file';

/** @var string {@see https://www.php.net/manual/en/function.date.php} */
protected $dateFormat = 'Ymd';
/** @var string */
Expand All @@ -18,12 +21,12 @@ class Ics implements Generator
/** @var array<non-empty-string, non-empty-string> */
protected $options = [];

/** @var array{format?: string} */
/** @var array{format?: self::FORMAT_*} */
protected $presentationOptions = [];

/**
* @param array<non-empty-string, non-empty-string> $options Optional ICS properties and components
* @param array{format?: string} $presentationOptions
* @param array{format?: self::FORMAT_*} $presentationOptions
*/
public function __construct(array $options = [], array $presentationOptions = [])
{
Expand Down Expand Up @@ -69,7 +72,7 @@ public function generate(Link $link): string
$url[] = 'END:VEVENT';
$url[] = 'END:VCALENDAR';

$format = $this->presentationOptions['format'] ?? 'html';
$format = $this->presentationOptions['format'] ?? self::FORMAT_HTML;

return match ($format) {
'file' => $this->buildFile($url),
Expand Down
2 changes: 1 addition & 1 deletion src/Link.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public function google(): string

/**
* @param array<non-empty-string, non-empty-string> $options ICS specific properties and components
* @param array{format?: string} $presentationOptions
* @param array{format?: \Spatie\CalendarLinks\Generators\Ics::FORMAT_*} $presentationOptions
* @return string
*/
public function ics(array $options = [], array $presentationOptions = []): string
Expand Down
10 changes: 5 additions & 5 deletions tests/Generators/IcsGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class IcsGeneratorTest extends TestCase
*/
protected function generator(array $options = [], array $presentationOptions = []): Generator
{
$presentationOptions['format'] ??= 'file';
$presentationOptions['format'] ??= Ics::FORMAT_FILE;

return new Ics($options, $presentationOptions);
}
Expand All @@ -30,31 +30,31 @@ protected function linkMethodName(): string
public function it_can_generate_an_ics_link_with_custom_uid(): void
{
$this->assertMatchesSnapshot(
$this->generator(['UID' => 'random-uid', ['format' => 'file']])->generate($this->createShortEventLink())
$this->generator(['UID' => 'random-uid', ['format' => Ics::FORMAT_FILE]])->generate($this->createShortEventLink())
);
}

/** @test */
public function it_has_a_product_id(): void
{
$this->assertMatchesSnapshot(
$this->generator(['PRODID' => 'Spatie calendar-links'], ['format' => 'file'])->generate($this->createShortEventLink())
$this->generator(['PRODID' => 'Spatie calendar-links'], ['format' => Ics::FORMAT_FILE])->generate($this->createShortEventLink())
);
}

/** @test */
public function it_has_a_product_dtstamp(): void
{
$this->assertMatchesSnapshot(
$this->generator(['DTSTAMP' => '20180201T090000Z'], ['format' => 'file'])->generate($this->createShortEventLink())
$this->generator(['DTSTAMP' => '20180201T090000Z'], ['format' => Ics::FORMAT_FILE])->generate($this->createShortEventLink())
);
}

/** @test */
public function it_generates_base64_encoded_link_for_html(): void
{
$this->assertMatchesSnapshot(
$this->generator([], ['format' => 'html'])->generate($this->createShortEventLink())
$this->generator([], ['format' => Ics::FORMAT_FILE])->generate($this->createShortEventLink())
);
}
}

0 comments on commit 28d5971

Please sign in to comment.