diff --git a/src/Intervention/Image/Image.php b/src/Intervention/Image/Image.php index d3d143f7..a031ffd3 100644 --- a/src/Intervention/Image/Image.php +++ b/src/Intervention/Image/Image.php @@ -75,9 +75,10 @@ class Image extends File * * @param string $path * @param integer $quality + * @param Closure $success * @return Intervention\Image\Image */ - public function save($path = null, $quality = null) + public function save($path = null, $quality = null, $success = null) { $path = is_null($path) ? ($this->dirname .'/'. $this->basename) : $path; $data = $this->encode(pathinfo($path, PATHINFO_EXTENSION), $quality); @@ -92,6 +93,11 @@ class Image extends File // set new file info $this->setFileInfoFromPath($path); + // run callback + if (is_callable($success)) { + $success($this); + } + return $this; } diff --git a/tests/ImageTest.php b/tests/ImageTest.php index 2c0d1f04..888c54cf 100644 --- a/tests/ImageTest.php +++ b/tests/ImageTest.php @@ -43,6 +43,27 @@ class ImageTest extends PHPUnit_Framework_TestCase @unlink($save_as); } + public function testSaveWithCallbacl() + { + $createdByCallback = __DIR__.'/tmp/cb.txt'; + $save_as = __DIR__.'/tmp/test.jpg'; + $image = $this->getTestImage(); + $image->getDriver()->shouldReceive('encode')->with($image, 'jpg', 85)->once()->andReturn('mock'); + $imageTest = clone $this; + $image = $image->save($save_as, 85, function ($obj) use ($imageTest, $createdByCallback) { + $imageTest->assertInstanceOf('\Intervention\Image\Image', $obj); + touch($createdByCallback); + }); + $this->assertInstanceOf('\Intervention\Image\Image', $image); + $this->assertFileExists($save_as); + $this->assertFileExists($createdByCallback); + $this->assertEquals($image->basename, 'test.jpg'); + $this->assertEquals($image->extension, 'jpg'); + $this->assertEquals($image->filename, 'test'); + @unlink($save_as); + @unlink($createdByCallback); + } + public function testFilter() { $demoFilter = Mockery::mock('\Intervention\Image\Filters\DemoFilter', array(15));