Skip to content

Commit

Permalink
Provide conversions on attach
Browse files Browse the repository at this point in the history
  • Loading branch information
Jack97 committed Apr 24, 2019
1 parent 4887270 commit f24a3f0
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 12 deletions.
22 changes: 14 additions & 8 deletions src/HasMedia.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,23 +40,29 @@ public function getFirstMediaUrl(string $group = 'default', string $conversion =
return $media->getUrl($conversion);
}

public function attachMedia($media, string $group = 'default')
public function attachMedia($media, string $group = 'default', array $conversions = [])
{
$this->registerMediaGroups();

$ids = $this->parseMediaIds($media);

if ($mediaGroup = $this->getMediaGroup($group)) {
$mediaGroup = $this->getMediaGroup($group);

if ($mediaGroup && $mediaGroup->hasConversions()) {
$conversions = array_merge(
$conversions, $mediaGroup->getConversions()
);
}

if (! empty($conversions)) {
$model = config('media.model');

$media = $model::findMany($ids);

$media->each(function ($media) use ($mediaGroup) {
if ($mediaGroup->hasConversions()) {
PerformConversions::dispatch(
$media, $mediaGroup->getConversions()
);
}
$media->each(function ($media) use ($conversions) {
PerformConversions::dispatch(
$media, $conversions
);
});
}

Expand Down
10 changes: 10 additions & 0 deletions src/Jobs/PerformConversions.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,14 @@ public function handle()
$this->media, $this->conversions
);
}

public function getMedia()
{
return $this->media;
}

public function getConversions()
{
return $this->conversions;
}
}
40 changes: 36 additions & 4 deletions tests/HasMediaTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,47 @@ function ($media) {
}

/** @test */
public function it_will_perform_the_registered_conversions_when_media_is_attached()
public function it_will_perform_the_given_conversions_when_media_is_attached()
{
Queue::fake();

$media = factory(Media::class, 2)->create();
$media = factory(Media::class)->create();

$conversions = ['conversion'];

$this->subject->attachMedia($media, 'converted-images');
$this->subject->attachMedia($media, 'default', $conversions);

Queue::assertPushed(PerformConversions::class, 2);
Queue::assertPushed(
PerformConversions::class, function ($job) use ($media, $conversions) {
return (
$media->is($job->getMedia())
&& empty(array_diff($conversions, $job->getConversions()))
);
}
);
}

/** @test */
public function it_will_perform_the_conversions_registered_by_the_group_when_media_is_attached()
{
Queue::fake();

$media = factory(Media::class)->create();

$this->subject->attachMedia($media, $group = 'converted-images');

Queue::assertPushed(
PerformConversions::class, function ($job) use ($media, $group) {
$conversions = $this->subject
->getMediaGroup($group)
->getConversions();

return (
$media->is($job->getMedia())
&& empty(array_diff($conversions, $job->getConversions()))
);
}
);
}

/** @test */
Expand Down

0 comments on commit f24a3f0

Please sign in to comment.