├── .gitattributes ├── phpunit.xml ├── tests ├── bootstrap.php └── StartTest.php ├── .gitignore ├── composer.json ├── README.md ├── Imagick.php └── composer.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | examples/ export-ignore 2 | temp/ export-ignore -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | tests 6 | 7 | 8 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | =5.4.0" 21 | }, 22 | "require-dev": { 23 | "phpunit/phpunit": "*" 24 | } 25 | } -------------------------------------------------------------------------------- /tests/StartTest.php: -------------------------------------------------------------------------------- 1 | getPath('original.jpg')); 20 | $this->assertEquals(500, $obj->getWidth()); 21 | $this->assertNotEquals(200, $obj->getWidth()); 22 | $this->assertEquals(393, $obj->getHeight()); 23 | $this->assertNotEquals(200, $obj->getHeight()); 24 | } 25 | 26 | public function testBorder() 27 | { 28 | $obj = Imagick::open($this->getPath('original.jpg')); 29 | $obj->border(5, '#000')->saveTo($this->getTempPath('border.jpg')); 30 | $this->assertFileExists($this->getTempPath('border.jpg')); 31 | try { 32 | $obj->border(5, 'vbio')->saveTo($this->getTempPath('border.jpg')); 33 | $this->assertTrue(false); 34 | } catch (Exception $e) { 35 | $this->assertTrue(true); 36 | } 37 | } 38 | 39 | public function testCrop() 40 | { 41 | $obj = Imagick::open($this->getPath('original.jpg')); 42 | $obj->crop(10, 10, 50, 50)->saveTo($this->getTempPath('crop.jpg')); 43 | $this->assertFileExists($this->getTempPath('crop.jpg')); 44 | $crop = Imagick::open($this->getTempPath('crop.jpg')); 45 | $this->assertEquals(50, $crop->getWidth()); 46 | $this->assertEquals(50, $crop->getHeight()); 47 | } 48 | 49 | public function testThumb() 50 | { 51 | $obj = Imagick::open($this->getPath('original.jpg')); 52 | $obj->thumb(50, 50)->saveTo($this->getTempPath('thumb.jpg')); 53 | $this->assertFileExists($this->getTempPath('thumb.jpg')); 54 | $thumb = Imagick::open($this->getTempPath('thumb.jpg')); 55 | $this->assertEquals(50, $thumb->getWidth()); 56 | $this->assertNotEquals(50, $thumb->getHeight()); 57 | } 58 | 59 | public function testResize() 60 | { 61 | $obj = Imagick::open($this->getPath('original.jpg')); 62 | $obj->resize(150, 150)->saveTo($this->getTempPath('resize-1.jpg')); 63 | $this->assertFileExists($this->getTempPath('thumb.jpg')); 64 | $resize = Imagick::open($this->getTempPath('resize-1.jpg')); 65 | $this->assertEquals(150, $resize->getWidth()); 66 | $this->assertNotEquals(150, $resize->getHeight()); 67 | 68 | $obj = Imagick::open($this->getPath('original.jpg')); 69 | $obj->resize(150, false)->saveTo($this->getTempPath('resize-2.jpg')); 70 | $this->assertFileExists($this->getTempPath('thumb.jpg')); 71 | $resize = Imagick::open($this->getTempPath('resize-2.jpg')); 72 | $this->assertEquals(150, $resize->getWidth()); 73 | $this->assertNotEquals(150, $resize->getHeight()); 74 | 75 | $obj = Imagick::open($this->getPath('original.jpg')); 76 | $obj->resize(false, 150)->saveTo($this->getTempPath('resize-3.jpg')); 77 | $this->assertFileExists($this->getTempPath('thumb.jpg')); 78 | $resize = Imagick::open($this->getTempPath('resize-3.jpg')); 79 | $this->assertNotEquals(150, $resize->getWidth()); 80 | $this->assertEquals(150, $resize->getHeight()); 81 | 82 | $obj = Imagick::open($this->getPath('original.jpg')); 83 | try { 84 | $obj->resize(false, false)->saveTo($this->getTempPath('resize-4.jpg')); 85 | $this->assertTrue(false); 86 | } catch (\yii\base\InvalidConfigException $e) { 87 | $this->assertTrue(true); 88 | } 89 | } 90 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Yii 2 Imagick 2 | Yii 2 class for working with Imagick. 3 | 4 | ## Install via Composer 5 | 6 | Run the following command 7 | 8 | ```bash 9 | $ composer require tpmanc/yii2-imagick "*" 10 | ``` 11 | 12 | or add 13 | 14 | ```bash 15 | $ "tpmanc/yii2-imagick": "*" 16 | ``` 17 | 18 | to the require section of your `composer.json` file. 19 | 20 | Original image: 21 | 22 | !["Original"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/original.jpg) 23 | 24 | ## Get size 25 | 26 | ```php 27 | $img = Imagick::open('./image.jpg'); 28 | $img->getWidth(); 29 | $img->getHeight(); 30 | ``` 31 | 32 | ## Resize image 33 | 34 | ```php 35 | Imagick::open('./image.jpg')->resize(400, 300)->saveTo('./resized.jpg'); 36 | Imagick::open('./image.jpg')->resize(400, false)->saveTo('./resized.jpg'); 37 | ``` 38 | 39 | !["Resize"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/resize.jpg) 40 | 41 | ## Create thumbnail 42 | 43 | ```php 44 | Imagick::open('./image.jpg')->thumb(200, 200)->saveTo('./thumb.jpg'); 45 | ``` 46 | 47 | !["Thumb"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/thumb.jpg) 48 | 49 | ## Add border 50 | 51 | ```php 52 | $width = 5; 53 | $color = '#000' 54 | Imagick::open('./image.jpg')->border($width, $color)->saveTo('./result.jpg'); 55 | ``` 56 | 57 | !["Resize"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/border-1.jpg) 58 | 59 | ```php 60 | $width = 10; 61 | $color = '#A91AD4' 62 | Imagick::open('./image.jpg')->border($width, $color)->saveTo('./result.jpg'); 63 | ``` 64 | 65 | !["Resize"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/border-2.jpg) 66 | 67 | ## Vertical and horizontal mirror image 68 | 69 | ```php 70 | // vertical 71 | Imagick::open('./image.jpg')->flip()->saveTo('./result.jpg'); 72 | // horizontal 73 | Imagick::open('./image.jpg')->flop()->saveTo('./result.jpg'); 74 | ``` 75 | 76 | !["Flip"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/flip.jpg) 77 | 78 | !["Flop"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/flop.jpg) 79 | 80 | ## Crop 81 | 82 | ```php 83 | $xStart = 0; 84 | $yStart = 0; 85 | $xEnd = 150; 86 | $yEnd = 150; 87 | Imagick::open('./image.jpg')->crop($xStart, $yStart, $xEnd, $yEnd)->saveTo('./result.jpg'); 88 | ``` 89 | 90 | !["Crop"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/crop.jpg) 91 | 92 | ## Blur 93 | 94 | ```php 95 | $radius = 8; 96 | $delta = 5; 97 | Imagick::open('./image.jpg')->blur($radius, $delta)->saveTo('./result.jpg'); 98 | ``` 99 | 100 | !["Blur"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/blur.jpg) 101 | 102 | ## Watermark 103 | 104 | ### Set watermark position 105 | 106 | Use `$xPosition` and `$yPosition` to set watermark position. 107 | 108 | `$xPosition` should be 'left', 'right' or 'center'; `$yPosition` should be 'top', 'bottom' or 'center'. 109 | 110 | ```php 111 | $xPosition = 'left'; 112 | $yPosition = 'top'; 113 | Imagick::open('./image.jpg')->watermark('./watermark.png'), $xPosition, $yPosition)->saveTo('./result.jpg'); 114 | ``` 115 | 116 | !["Watermark"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/watermark-1.jpg) 117 | 118 | ```php 119 | $xPosition = 'right'; 120 | $yPosition = 'center'; 121 | Imagick::open('./image.jpg')->watermark('./watermark.png'), $xPosition, $yPosition)->saveTo('./result.jpg'); 122 | ``` 123 | 124 | !["Watermark"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/watermark-2.jpg) 125 | 126 | ### Set watermark size 127 | 128 | Use `$xSize` and `$ySize` to set watermark size. Valid values: 129 | 130 | * Number: `$xSize = 100;`, `$ySize = 50` 131 | 132 | * Percent of parent: `$xSize = '100%';`, `$ySize = '50%'` 133 | 134 | * `'auto'` to save proportion: `$xSize = '100%';`, `$ySize = 'auto'` 135 | 136 | * `false`: `$xSize = 100;`, `$ySize = false` 137 | 138 | ```php 139 | $xPosition = 'center'; 140 | $yPosition = 'center'; 141 | $xSize = '100%'; 142 | $ySize = 'auto'; 143 | Imagick::open('./image.jpg')->watermark('./watermark.png'), $xPosition, $yPosition, $xSize, $ySize)->saveTo('./result.jpg'); 144 | ``` 145 | 146 | !["Watermark"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/watermark-3.jpg) 147 | 148 | ```php 149 | $xPosition = 'center'; 150 | $yPosition = 'center'; 151 | $xSize = '100%'; 152 | $ySize = '100%'; 153 | Imagick::open('./image.jpg')->watermark('./watermark.png'), $xPosition, $yPosition, $xSize, $ySize)->saveTo('./result.jpg'); 154 | ``` 155 | 156 | !["Watermark"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/watermark-4.jpg) 157 | 158 | ### Set watermark offset 159 | 160 | Use `$xOffset` and `$yOffset` to set offset from parent image border. 161 | 162 | ```php 163 | $xPosition = 'right'; 164 | $yPosition = 'bottom'; 165 | $xSize = false; 166 | $ySize = false; 167 | $xOffset = 50; 168 | $yOffset = 50; 169 | Imagick::open('./image.jpg')->watermark('./watermark.png'), $xPosition, $yPosition, $xSize, $ySize, $xOffset, $yOffset)->saveTo('./result.jpg'); 170 | ``` 171 | !["Watermark"](https://raw.github.com/tpmanc/yii2-imagick/master/examples/watermark-5.jpg) 172 | -------------------------------------------------------------------------------- /Imagick.php: -------------------------------------------------------------------------------- 1 | 4 | */ 5 | namespace tpmanc\imagick; 6 | 7 | /** 8 | * Working with Imagemagick 9 | */ 10 | class Imagick 11 | { 12 | private $image; 13 | 14 | /** 15 | * @var integer Opened image height 16 | */ 17 | private $height; 18 | 19 | /** 20 | * @var integer Opened image width 21 | */ 22 | private $width; 23 | 24 | /** 25 | * Get opened image width 26 | * @return integer Image width 27 | */ 28 | public function getWidth() 29 | { 30 | return $this->width; 31 | } 32 | 33 | /** 34 | * Get opened image height 35 | * @return integer Image height 36 | */ 37 | public function getHeight() 38 | { 39 | return $this->height; 40 | } 41 | 42 | /** 43 | * Constructor 44 | */ 45 | private function __construct() 46 | { 47 | } 48 | 49 | /** 50 | * @param string $imagePath Path to image 51 | * @return Imagick 52 | */ 53 | public static function open($imagePath) 54 | { 55 | $model = new self(); 56 | $model->image = new \Imagick($imagePath); 57 | $geo = $model->image->getImageGeometry(); 58 | $model->height = $geo['height']; 59 | $model->width = $geo['width']; 60 | return $model; 61 | } 62 | 63 | /** 64 | * Save result 65 | * @param string $path Save path 66 | * @return void 67 | */ 68 | public function saveTo($path) 69 | { 70 | $this->image->writeImage($path); 71 | $this->image->destroy(); 72 | } 73 | 74 | /** 75 | * Add border 76 | * @param integer $width Border width 77 | * @param string $color Border color 78 | * @return Imagick 79 | */ 80 | public function border($width, $color) 81 | { 82 | $border = new \ImagickDraw(); 83 | $border->setFillColor('none'); 84 | $border->setStrokeColor(new \ImagickPixel($color)); 85 | $border->setStrokeWidth($width); 86 | $widthPart = $width / 2; 87 | $border->line(0, 0 + $widthPart, $this->width, 0 + $widthPart); 88 | $border->line(0, $this->height - $widthPart, $this->width, $this->height - $widthPart); 89 | $border->line(0 + $widthPart, 0, 0 + $widthPart, $this->height); 90 | $border->line($this->width - $widthPart, 0, $this->width - $widthPart, $this->height); 91 | $this->image->drawImage($border); 92 | return $this; 93 | } 94 | 95 | /** 96 | * Blur 97 | * @param float $radius 98 | * @param float $delta 99 | * @return Imagick 100 | */ 101 | public function blur($radius, $delta) 102 | { 103 | $this->image->blurImage($radius, $delta); 104 | return $this; 105 | } 106 | 107 | /** 108 | * Crop image part 109 | * @param integer $startX 110 | * @param integer $startY 111 | * @param integer $width 112 | * @param integer $height 113 | * @return Imagick 114 | */ 115 | public function crop($startX, $startY, $width, $height) 116 | { 117 | $this->image->cropImage($width, $height, $startX, $startY); 118 | return $this; 119 | } 120 | 121 | /** 122 | * Vertical mirror image 123 | * @return Imagick 124 | */ 125 | public function flip() 126 | { 127 | $this->image->flipImage(); 128 | return $this; 129 | } 130 | 131 | /** 132 | * Horizontal mirror image 133 | * @return Imagick 134 | */ 135 | public function flop() 136 | { 137 | $this->image->flopImage(); 138 | return $this; 139 | } 140 | 141 | /** 142 | * Add watermark to image 143 | * @param string $watermarkPath Path to watermark image 144 | * @param string $xPos Horizontal position - 'left', 'right' or 'center' 145 | * @param string $yPos Vertical position - 'top', 'bottom' or 'center' 146 | * @param bool|int|string $xSize Horizontal watermark size: 100, '50%', 'auto' etc. 147 | * @param bool|int|string $ySize Vertical watermark size: 100, '50%', 'auto' etc. 148 | * @param bool $xOffset 149 | * @param bool $yOffset 150 | * @return Imagick 151 | * @throws Exception 152 | */ 153 | public function watermark( 154 | $watermarkPath, 155 | $xPos, 156 | $yPos, 157 | $xSize = false, 158 | $ySize = false, 159 | $xOffset = false, 160 | $yOffset = false 161 | ) { 162 | if ($watermarkPath !== null) { 163 | $watermark = new \Imagick($watermarkPath); 164 | 165 | // resize watermark 166 | $newSizeX = false; 167 | $newSizeY = false; 168 | if ($xSize !== false) { 169 | if (is_numeric($xSize)) { 170 | $newSizeX = $xSize; 171 | } elseif (is_string($xSize) && substr($xSize, -1) === '%') { 172 | $float = str_replace('%', '', $xSize) / 100; 173 | $newSizeX = $this->width * ((float) $float); 174 | } 175 | } 176 | if ($ySize !== false) { 177 | if (is_numeric($ySize)) { 178 | $newSizeY = $ySize; 179 | } elseif (is_string($ySize) && substr($ySize, -1) === '%') { 180 | $float = str_replace('%', '', $ySize) / 100; 181 | $newSizeY = $this->height * ((float) $float); 182 | } 183 | } 184 | if ($newSizeX !== false && $newSizeY !== false) { 185 | $watermark->adaptiveResizeImage($newSizeX, $newSizeY); 186 | } elseif ($newSizeX !== false && $newSizeY === false) { 187 | $watermark->adaptiveResizeImage($newSizeX, 0); 188 | } elseif ($newSizeX === false && $newSizeY !== false) { 189 | $watermark->adaptiveResizeImage(0, $newSizeY); 190 | } 191 | 192 | $startX = false; 193 | $startY = false; 194 | $watermarkSize = $watermark->getImageGeometry(); 195 | if ($yPos === 'top') { 196 | $startY = 0; 197 | if ($yOffset !== false) { 198 | $startY += $yOffset; 199 | } 200 | } elseif ($yPos === 'bottom') { 201 | $startY = $this->height - $watermarkSize['height']; 202 | if ($yOffset !== false) { 203 | $startY -= $yOffset; 204 | } 205 | } elseif ($yPos === 'center') { 206 | $startY = ($this->height / 2) - ($watermarkSize['height'] / 2); 207 | } else { 208 | throw new \Exception('Param $yPos should be "top", "bottom" or "center" insteed "'.$yPos.'"'); 209 | } 210 | 211 | if ($xPos === 'left') { 212 | $startX = 0; 213 | if ($xOffset !== false) { 214 | $startX += $xOffset; 215 | } 216 | } elseif ($xPos === 'right') { 217 | $startX = $this->width - $watermarkSize['width']; 218 | if ($xOffset !== false) { 219 | $startX -= $xOffset; 220 | } 221 | } elseif ($xPos === 'center') { 222 | $startX = ($this->width / 2) - ($watermarkSize['width'] / 2); 223 | } else { 224 | throw new \Exception('Param $xPos should be "left", "right" or "center" insteed "'.$xPos.'"'); 225 | } 226 | 227 | $this->image->compositeImage($watermark, \Imagick::COMPOSITE_OVER, $startX, $startY); 228 | } 229 | return $this; 230 | } 231 | 232 | /** 233 | * Create thumbnail 234 | * @param integer $width 235 | * @param integer $height 236 | * @return Imagick 237 | */ 238 | public function thumb($width, $height) 239 | { 240 | if ($this->width > $width || $this->height > $height) { 241 | if ($this->width >= $this->height || $height === false) { 242 | $this->image->thumbnailImage($width, 0); 243 | } else { 244 | $this->image->thumbnailImage(0, $height); 245 | } 246 | } 247 | 248 | return $this; 249 | } 250 | 251 | /** 252 | * Resize image 253 | * @param integer $width 254 | * @param integer $height 255 | * @return Imagick 256 | * @throws Exception 257 | */ 258 | public function resize($width, $height) 259 | { 260 | if ($height === false && $width === false) { 261 | throw new \Exception('$width and $height can not be false simultaneously'); 262 | } 263 | if ($width !== false && $height !== false) { 264 | if ($this->width >= $this->height) { 265 | $this->image->adaptiveResizeImage($width, 0); 266 | } else { 267 | $this->image->adaptiveResizeImage(0, $height); 268 | } 269 | } else { 270 | if ($width === false) { 271 | $this->image->adaptiveResizeImage(0, $height); 272 | } elseif ($height === false) { 273 | $this->image->adaptiveResizeImage($width, 0); 274 | } 275 | } 276 | return $this; 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "3ffcfd81ce6a3d01a04225d947ac7eff", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "doctrine/instantiator", 12 | "version": "dev-master", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/instantiator.git", 16 | "reference": "416fb8ad1d095a87f1d21bc40711843cd122fd4a" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/416fb8ad1d095a87f1d21bc40711843cd122fd4a", 21 | "reference": "416fb8ad1d095a87f1d21bc40711843cd122fd4a", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": ">=5.3,<8.0-DEV" 26 | }, 27 | "require-dev": { 28 | "athletic/athletic": "~0.1.8", 29 | "ext-pdo": "*", 30 | "ext-phar": "*", 31 | "phpunit/phpunit": "~4.0", 32 | "squizlabs/php_codesniffer": "~2.0" 33 | }, 34 | "type": "library", 35 | "extra": { 36 | "branch-alias": { 37 | "dev-master": "1.0.x-dev" 38 | } 39 | }, 40 | "autoload": { 41 | "psr-4": { 42 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 43 | } 44 | }, 45 | "notification-url": "https://packagist.org/downloads/", 46 | "license": [ 47 | "MIT" 48 | ], 49 | "authors": [ 50 | { 51 | "name": "Marco Pivetta", 52 | "email": "ocramius@gmail.com", 53 | "homepage": "http://ocramius.github.com/" 54 | } 55 | ], 56 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 57 | "homepage": "https://github.com/doctrine/instantiator", 58 | "keywords": [ 59 | "constructor", 60 | "instantiate" 61 | ], 62 | "time": "2016-03-31 10:24:22" 63 | }, 64 | { 65 | "name": "phpdocumentor/reflection-common", 66 | "version": "dev-master", 67 | "source": { 68 | "type": "git", 69 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 70 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" 71 | }, 72 | "dist": { 73 | "type": "zip", 74 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 75 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 76 | "shasum": "" 77 | }, 78 | "require": { 79 | "php": ">=5.5" 80 | }, 81 | "require-dev": { 82 | "phpunit/phpunit": "^4.6" 83 | }, 84 | "type": "library", 85 | "extra": { 86 | "branch-alias": { 87 | "dev-master": "1.0.x-dev" 88 | } 89 | }, 90 | "autoload": { 91 | "psr-4": { 92 | "phpDocumentor\\Reflection\\": [ 93 | "src" 94 | ] 95 | } 96 | }, 97 | "notification-url": "https://packagist.org/downloads/", 98 | "license": [ 99 | "MIT" 100 | ], 101 | "authors": [ 102 | { 103 | "name": "Jaap van Otterdijk", 104 | "email": "opensource@ijaap.nl" 105 | } 106 | ], 107 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 108 | "homepage": "http://www.phpdoc.org", 109 | "keywords": [ 110 | "FQSEN", 111 | "phpDocumentor", 112 | "phpdoc", 113 | "reflection", 114 | "static analysis" 115 | ], 116 | "time": "2015-12-27 11:43:31" 117 | }, 118 | { 119 | "name": "phpdocumentor/reflection-docblock", 120 | "version": "3.1.0", 121 | "source": { 122 | "type": "git", 123 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 124 | "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" 125 | }, 126 | "dist": { 127 | "type": "zip", 128 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", 129 | "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", 130 | "shasum": "" 131 | }, 132 | "require": { 133 | "php": ">=5.5", 134 | "phpdocumentor/reflection-common": "^1.0@dev", 135 | "phpdocumentor/type-resolver": "^0.2.0", 136 | "webmozart/assert": "^1.0" 137 | }, 138 | "require-dev": { 139 | "mockery/mockery": "^0.9.4", 140 | "phpunit/phpunit": "^4.4" 141 | }, 142 | "type": "library", 143 | "autoload": { 144 | "psr-4": { 145 | "phpDocumentor\\Reflection\\": [ 146 | "src/" 147 | ] 148 | } 149 | }, 150 | "notification-url": "https://packagist.org/downloads/", 151 | "license": [ 152 | "MIT" 153 | ], 154 | "authors": [ 155 | { 156 | "name": "Mike van Riel", 157 | "email": "me@mikevanriel.com" 158 | } 159 | ], 160 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 161 | "time": "2016-06-10 09:48:41" 162 | }, 163 | { 164 | "name": "phpdocumentor/type-resolver", 165 | "version": "0.2", 166 | "source": { 167 | "type": "git", 168 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 169 | "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" 170 | }, 171 | "dist": { 172 | "type": "zip", 173 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", 174 | "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", 175 | "shasum": "" 176 | }, 177 | "require": { 178 | "php": ">=5.5", 179 | "phpdocumentor/reflection-common": "^1.0" 180 | }, 181 | "require-dev": { 182 | "mockery/mockery": "^0.9.4", 183 | "phpunit/phpunit": "^5.2||^4.8.24" 184 | }, 185 | "type": "library", 186 | "extra": { 187 | "branch-alias": { 188 | "dev-master": "1.0.x-dev" 189 | } 190 | }, 191 | "autoload": { 192 | "psr-4": { 193 | "phpDocumentor\\Reflection\\": [ 194 | "src/" 195 | ] 196 | } 197 | }, 198 | "notification-url": "https://packagist.org/downloads/", 199 | "license": [ 200 | "MIT" 201 | ], 202 | "authors": [ 203 | { 204 | "name": "Mike van Riel", 205 | "email": "me@mikevanriel.com" 206 | } 207 | ], 208 | "time": "2016-06-10 07:14:17" 209 | }, 210 | { 211 | "name": "phpspec/prophecy", 212 | "version": "dev-master", 213 | "source": { 214 | "type": "git", 215 | "url": "https://github.com/phpspec/prophecy.git", 216 | "reference": "d883566b83ae601a50b38b249e92450dc57cf875" 217 | }, 218 | "dist": { 219 | "type": "zip", 220 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d883566b83ae601a50b38b249e92450dc57cf875", 221 | "reference": "d883566b83ae601a50b38b249e92450dc57cf875", 222 | "shasum": "" 223 | }, 224 | "require": { 225 | "doctrine/instantiator": "^1.0.2", 226 | "php": "^5.3|^7.0", 227 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", 228 | "sebastian/comparator": "^1.1", 229 | "sebastian/recursion-context": "^1.0" 230 | }, 231 | "require-dev": { 232 | "phpspec/phpspec": "^2.0" 233 | }, 234 | "type": "library", 235 | "extra": { 236 | "branch-alias": { 237 | "dev-master": "1.6.x-dev" 238 | } 239 | }, 240 | "autoload": { 241 | "psr-0": { 242 | "Prophecy\\": "src/" 243 | } 244 | }, 245 | "notification-url": "https://packagist.org/downloads/", 246 | "license": [ 247 | "MIT" 248 | ], 249 | "authors": [ 250 | { 251 | "name": "Konstantin Kudryashov", 252 | "email": "ever.zet@gmail.com", 253 | "homepage": "http://everzet.com" 254 | }, 255 | { 256 | "name": "Marcello Duarte", 257 | "email": "marcello.duarte@gmail.com" 258 | } 259 | ], 260 | "description": "Highly opinionated mocking framework for PHP 5.3+", 261 | "homepage": "https://github.com/phpspec/prophecy", 262 | "keywords": [ 263 | "Double", 264 | "Dummy", 265 | "fake", 266 | "mock", 267 | "spy", 268 | "stub" 269 | ], 270 | "time": "2016-07-19 16:08:43" 271 | }, 272 | { 273 | "name": "phpunit/php-code-coverage", 274 | "version": "2.2.x-dev", 275 | "source": { 276 | "type": "git", 277 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 278 | "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" 279 | }, 280 | "dist": { 281 | "type": "zip", 282 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", 283 | "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", 284 | "shasum": "" 285 | }, 286 | "require": { 287 | "php": ">=5.3.3", 288 | "phpunit/php-file-iterator": "~1.3", 289 | "phpunit/php-text-template": "~1.2", 290 | "phpunit/php-token-stream": "~1.3", 291 | "sebastian/environment": "^1.3.2", 292 | "sebastian/version": "~1.0" 293 | }, 294 | "require-dev": { 295 | "ext-xdebug": ">=2.1.4", 296 | "phpunit/phpunit": "~4" 297 | }, 298 | "suggest": { 299 | "ext-dom": "*", 300 | "ext-xdebug": ">=2.2.1", 301 | "ext-xmlwriter": "*" 302 | }, 303 | "type": "library", 304 | "extra": { 305 | "branch-alias": { 306 | "dev-master": "2.2.x-dev" 307 | } 308 | }, 309 | "autoload": { 310 | "classmap": [ 311 | "src/" 312 | ] 313 | }, 314 | "notification-url": "https://packagist.org/downloads/", 315 | "license": [ 316 | "BSD-3-Clause" 317 | ], 318 | "authors": [ 319 | { 320 | "name": "Sebastian Bergmann", 321 | "email": "sb@sebastian-bergmann.de", 322 | "role": "lead" 323 | } 324 | ], 325 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 326 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 327 | "keywords": [ 328 | "coverage", 329 | "testing", 330 | "xunit" 331 | ], 332 | "time": "2015-10-06 15:47:00" 333 | }, 334 | { 335 | "name": "phpunit/php-file-iterator", 336 | "version": "dev-master", 337 | "source": { 338 | "type": "git", 339 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 340 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" 341 | }, 342 | "dist": { 343 | "type": "zip", 344 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", 345 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", 346 | "shasum": "" 347 | }, 348 | "require": { 349 | "php": ">=5.3.3" 350 | }, 351 | "type": "library", 352 | "extra": { 353 | "branch-alias": { 354 | "dev-master": "1.4.x-dev" 355 | } 356 | }, 357 | "autoload": { 358 | "classmap": [ 359 | "src/" 360 | ] 361 | }, 362 | "notification-url": "https://packagist.org/downloads/", 363 | "license": [ 364 | "BSD-3-Clause" 365 | ], 366 | "authors": [ 367 | { 368 | "name": "Sebastian Bergmann", 369 | "email": "sb@sebastian-bergmann.de", 370 | "role": "lead" 371 | } 372 | ], 373 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 374 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 375 | "keywords": [ 376 | "filesystem", 377 | "iterator" 378 | ], 379 | "time": "2015-06-21 13:08:43" 380 | }, 381 | { 382 | "name": "phpunit/php-text-template", 383 | "version": "1.2.1", 384 | "source": { 385 | "type": "git", 386 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 387 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 388 | }, 389 | "dist": { 390 | "type": "zip", 391 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 392 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 393 | "shasum": "" 394 | }, 395 | "require": { 396 | "php": ">=5.3.3" 397 | }, 398 | "type": "library", 399 | "autoload": { 400 | "classmap": [ 401 | "src/" 402 | ] 403 | }, 404 | "notification-url": "https://packagist.org/downloads/", 405 | "license": [ 406 | "BSD-3-Clause" 407 | ], 408 | "authors": [ 409 | { 410 | "name": "Sebastian Bergmann", 411 | "email": "sebastian@phpunit.de", 412 | "role": "lead" 413 | } 414 | ], 415 | "description": "Simple template engine.", 416 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 417 | "keywords": [ 418 | "template" 419 | ], 420 | "time": "2015-06-21 13:50:34" 421 | }, 422 | { 423 | "name": "phpunit/php-timer", 424 | "version": "1.0.8", 425 | "source": { 426 | "type": "git", 427 | "url": "https://github.com/sebastianbergmann/php-timer.git", 428 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" 429 | }, 430 | "dist": { 431 | "type": "zip", 432 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", 433 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", 434 | "shasum": "" 435 | }, 436 | "require": { 437 | "php": ">=5.3.3" 438 | }, 439 | "require-dev": { 440 | "phpunit/phpunit": "~4|~5" 441 | }, 442 | "type": "library", 443 | "autoload": { 444 | "classmap": [ 445 | "src/" 446 | ] 447 | }, 448 | "notification-url": "https://packagist.org/downloads/", 449 | "license": [ 450 | "BSD-3-Clause" 451 | ], 452 | "authors": [ 453 | { 454 | "name": "Sebastian Bergmann", 455 | "email": "sb@sebastian-bergmann.de", 456 | "role": "lead" 457 | } 458 | ], 459 | "description": "Utility class for timing", 460 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 461 | "keywords": [ 462 | "timer" 463 | ], 464 | "time": "2016-05-12 18:03:57" 465 | }, 466 | { 467 | "name": "phpunit/php-token-stream", 468 | "version": "dev-master", 469 | "source": { 470 | "type": "git", 471 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 472 | "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644" 473 | }, 474 | "dist": { 475 | "type": "zip", 476 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cab6c6fefee93d7b7c3a01292a0fe0884ea66644", 477 | "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644", 478 | "shasum": "" 479 | }, 480 | "require": { 481 | "ext-tokenizer": "*", 482 | "php": ">=5.3.3" 483 | }, 484 | "require-dev": { 485 | "phpunit/phpunit": "~4.2" 486 | }, 487 | "type": "library", 488 | "extra": { 489 | "branch-alias": { 490 | "dev-master": "1.4-dev" 491 | } 492 | }, 493 | "autoload": { 494 | "classmap": [ 495 | "src/" 496 | ] 497 | }, 498 | "notification-url": "https://packagist.org/downloads/", 499 | "license": [ 500 | "BSD-3-Clause" 501 | ], 502 | "authors": [ 503 | { 504 | "name": "Sebastian Bergmann", 505 | "email": "sebastian@phpunit.de" 506 | } 507 | ], 508 | "description": "Wrapper around PHP's tokenizer extension.", 509 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 510 | "keywords": [ 511 | "tokenizer" 512 | ], 513 | "time": "2015-09-23 14:46:55" 514 | }, 515 | { 516 | "name": "phpunit/phpunit", 517 | "version": "4.8.x-dev", 518 | "source": { 519 | "type": "git", 520 | "url": "https://github.com/sebastianbergmann/phpunit.git", 521 | "reference": "41433b0d64caa3f2a73e415596dfa73490c262fc" 522 | }, 523 | "dist": { 524 | "type": "zip", 525 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/41433b0d64caa3f2a73e415596dfa73490c262fc", 526 | "reference": "41433b0d64caa3f2a73e415596dfa73490c262fc", 527 | "shasum": "" 528 | }, 529 | "require": { 530 | "ext-dom": "*", 531 | "ext-json": "*", 532 | "ext-pcre": "*", 533 | "ext-reflection": "*", 534 | "ext-spl": "*", 535 | "php": ">=5.3.3", 536 | "phpspec/prophecy": "^1.3.1", 537 | "phpunit/php-code-coverage": "~2.1", 538 | "phpunit/php-file-iterator": "~1.4", 539 | "phpunit/php-text-template": "~1.2", 540 | "phpunit/php-timer": "^1.0.6", 541 | "phpunit/phpunit-mock-objects": "~2.3", 542 | "sebastian/comparator": "~1.1", 543 | "sebastian/diff": "~1.2", 544 | "sebastian/environment": "~1.3", 545 | "sebastian/exporter": "~1.2", 546 | "sebastian/global-state": "~1.0", 547 | "sebastian/version": "~1.0", 548 | "symfony/yaml": "~2.1|~3.0" 549 | }, 550 | "suggest": { 551 | "phpunit/php-invoker": "~1.1" 552 | }, 553 | "bin": [ 554 | "phpunit" 555 | ], 556 | "type": "library", 557 | "extra": { 558 | "branch-alias": { 559 | "dev-master": "4.8.x-dev" 560 | } 561 | }, 562 | "autoload": { 563 | "classmap": [ 564 | "src/" 565 | ] 566 | }, 567 | "notification-url": "https://packagist.org/downloads/", 568 | "license": [ 569 | "BSD-3-Clause" 570 | ], 571 | "authors": [ 572 | { 573 | "name": "Sebastian Bergmann", 574 | "email": "sebastian@phpunit.de", 575 | "role": "lead" 576 | } 577 | ], 578 | "description": "The PHP Unit Testing framework.", 579 | "homepage": "https://phpunit.de/", 580 | "keywords": [ 581 | "phpunit", 582 | "testing", 583 | "xunit" 584 | ], 585 | "time": "2016-08-28 06:58:45" 586 | }, 587 | { 588 | "name": "phpunit/phpunit-mock-objects", 589 | "version": "2.3.x-dev", 590 | "source": { 591 | "type": "git", 592 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 593 | "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" 594 | }, 595 | "dist": { 596 | "type": "zip", 597 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", 598 | "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", 599 | "shasum": "" 600 | }, 601 | "require": { 602 | "doctrine/instantiator": "^1.0.2", 603 | "php": ">=5.3.3", 604 | "phpunit/php-text-template": "~1.2", 605 | "sebastian/exporter": "~1.2" 606 | }, 607 | "require-dev": { 608 | "phpunit/phpunit": "~4.4" 609 | }, 610 | "suggest": { 611 | "ext-soap": "*" 612 | }, 613 | "type": "library", 614 | "extra": { 615 | "branch-alias": { 616 | "dev-master": "2.3.x-dev" 617 | } 618 | }, 619 | "autoload": { 620 | "classmap": [ 621 | "src/" 622 | ] 623 | }, 624 | "notification-url": "https://packagist.org/downloads/", 625 | "license": [ 626 | "BSD-3-Clause" 627 | ], 628 | "authors": [ 629 | { 630 | "name": "Sebastian Bergmann", 631 | "email": "sb@sebastian-bergmann.de", 632 | "role": "lead" 633 | } 634 | ], 635 | "description": "Mock Object library for PHPUnit", 636 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 637 | "keywords": [ 638 | "mock", 639 | "xunit" 640 | ], 641 | "time": "2015-10-02 06:51:40" 642 | }, 643 | { 644 | "name": "sebastian/comparator", 645 | "version": "dev-master", 646 | "source": { 647 | "type": "git", 648 | "url": "https://github.com/sebastianbergmann/comparator.git", 649 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" 650 | }, 651 | "dist": { 652 | "type": "zip", 653 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", 654 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", 655 | "shasum": "" 656 | }, 657 | "require": { 658 | "php": ">=5.3.3", 659 | "sebastian/diff": "~1.2", 660 | "sebastian/exporter": "~1.2" 661 | }, 662 | "require-dev": { 663 | "phpunit/phpunit": "~4.4" 664 | }, 665 | "type": "library", 666 | "extra": { 667 | "branch-alias": { 668 | "dev-master": "1.2.x-dev" 669 | } 670 | }, 671 | "autoload": { 672 | "classmap": [ 673 | "src/" 674 | ] 675 | }, 676 | "notification-url": "https://packagist.org/downloads/", 677 | "license": [ 678 | "BSD-3-Clause" 679 | ], 680 | "authors": [ 681 | { 682 | "name": "Jeff Welch", 683 | "email": "whatthejeff@gmail.com" 684 | }, 685 | { 686 | "name": "Volker Dusch", 687 | "email": "github@wallbash.com" 688 | }, 689 | { 690 | "name": "Bernhard Schussek", 691 | "email": "bschussek@2bepublished.at" 692 | }, 693 | { 694 | "name": "Sebastian Bergmann", 695 | "email": "sebastian@phpunit.de" 696 | } 697 | ], 698 | "description": "Provides the functionality to compare PHP values for equality", 699 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 700 | "keywords": [ 701 | "comparator", 702 | "compare", 703 | "equality" 704 | ], 705 | "time": "2015-07-26 15:48:44" 706 | }, 707 | { 708 | "name": "sebastian/diff", 709 | "version": "dev-master", 710 | "source": { 711 | "type": "git", 712 | "url": "https://github.com/sebastianbergmann/diff.git", 713 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" 714 | }, 715 | "dist": { 716 | "type": "zip", 717 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", 718 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", 719 | "shasum": "" 720 | }, 721 | "require": { 722 | "php": ">=5.3.3" 723 | }, 724 | "require-dev": { 725 | "phpunit/phpunit": "~4.8" 726 | }, 727 | "type": "library", 728 | "extra": { 729 | "branch-alias": { 730 | "dev-master": "1.4-dev" 731 | } 732 | }, 733 | "autoload": { 734 | "classmap": [ 735 | "src/" 736 | ] 737 | }, 738 | "notification-url": "https://packagist.org/downloads/", 739 | "license": [ 740 | "BSD-3-Clause" 741 | ], 742 | "authors": [ 743 | { 744 | "name": "Kore Nordmann", 745 | "email": "mail@kore-nordmann.de" 746 | }, 747 | { 748 | "name": "Sebastian Bergmann", 749 | "email": "sebastian@phpunit.de" 750 | } 751 | ], 752 | "description": "Diff implementation", 753 | "homepage": "https://github.com/sebastianbergmann/diff", 754 | "keywords": [ 755 | "diff" 756 | ], 757 | "time": "2015-12-08 07:14:41" 758 | }, 759 | { 760 | "name": "sebastian/environment", 761 | "version": "1.3.x-dev", 762 | "source": { 763 | "type": "git", 764 | "url": "https://github.com/sebastianbergmann/environment.git", 765 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" 766 | }, 767 | "dist": { 768 | "type": "zip", 769 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", 770 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", 771 | "shasum": "" 772 | }, 773 | "require": { 774 | "php": "^5.3.3 || ^7.0" 775 | }, 776 | "require-dev": { 777 | "phpunit/phpunit": "^4.8 || ^5.0" 778 | }, 779 | "type": "library", 780 | "extra": { 781 | "branch-alias": { 782 | "dev-master": "1.3.x-dev" 783 | } 784 | }, 785 | "autoload": { 786 | "classmap": [ 787 | "src/" 788 | ] 789 | }, 790 | "notification-url": "https://packagist.org/downloads/", 791 | "license": [ 792 | "BSD-3-Clause" 793 | ], 794 | "authors": [ 795 | { 796 | "name": "Sebastian Bergmann", 797 | "email": "sebastian@phpunit.de" 798 | } 799 | ], 800 | "description": "Provides functionality to handle HHVM/PHP environments", 801 | "homepage": "http://www.github.com/sebastianbergmann/environment", 802 | "keywords": [ 803 | "Xdebug", 804 | "environment", 805 | "hhvm" 806 | ], 807 | "time": "2016-08-18 05:49:44" 808 | }, 809 | { 810 | "name": "sebastian/exporter", 811 | "version": "dev-master", 812 | "source": { 813 | "type": "git", 814 | "url": "https://github.com/sebastianbergmann/exporter.git", 815 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" 816 | }, 817 | "dist": { 818 | "type": "zip", 819 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", 820 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", 821 | "shasum": "" 822 | }, 823 | "require": { 824 | "php": ">=5.3.3", 825 | "sebastian/recursion-context": "~1.0" 826 | }, 827 | "require-dev": { 828 | "ext-mbstring": "*", 829 | "phpunit/phpunit": "~4.4" 830 | }, 831 | "type": "library", 832 | "extra": { 833 | "branch-alias": { 834 | "dev-master": "1.3.x-dev" 835 | } 836 | }, 837 | "autoload": { 838 | "classmap": [ 839 | "src/" 840 | ] 841 | }, 842 | "notification-url": "https://packagist.org/downloads/", 843 | "license": [ 844 | "BSD-3-Clause" 845 | ], 846 | "authors": [ 847 | { 848 | "name": "Jeff Welch", 849 | "email": "whatthejeff@gmail.com" 850 | }, 851 | { 852 | "name": "Volker Dusch", 853 | "email": "github@wallbash.com" 854 | }, 855 | { 856 | "name": "Bernhard Schussek", 857 | "email": "bschussek@2bepublished.at" 858 | }, 859 | { 860 | "name": "Sebastian Bergmann", 861 | "email": "sebastian@phpunit.de" 862 | }, 863 | { 864 | "name": "Adam Harvey", 865 | "email": "aharvey@php.net" 866 | } 867 | ], 868 | "description": "Provides the functionality to export PHP variables for visualization", 869 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 870 | "keywords": [ 871 | "export", 872 | "exporter" 873 | ], 874 | "time": "2016-06-17 09:04:28" 875 | }, 876 | { 877 | "name": "sebastian/global-state", 878 | "version": "1.1.1", 879 | "source": { 880 | "type": "git", 881 | "url": "https://github.com/sebastianbergmann/global-state.git", 882 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" 883 | }, 884 | "dist": { 885 | "type": "zip", 886 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", 887 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", 888 | "shasum": "" 889 | }, 890 | "require": { 891 | "php": ">=5.3.3" 892 | }, 893 | "require-dev": { 894 | "phpunit/phpunit": "~4.2" 895 | }, 896 | "suggest": { 897 | "ext-uopz": "*" 898 | }, 899 | "type": "library", 900 | "extra": { 901 | "branch-alias": { 902 | "dev-master": "1.0-dev" 903 | } 904 | }, 905 | "autoload": { 906 | "classmap": [ 907 | "src/" 908 | ] 909 | }, 910 | "notification-url": "https://packagist.org/downloads/", 911 | "license": [ 912 | "BSD-3-Clause" 913 | ], 914 | "authors": [ 915 | { 916 | "name": "Sebastian Bergmann", 917 | "email": "sebastian@phpunit.de" 918 | } 919 | ], 920 | "description": "Snapshotting of global state", 921 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 922 | "keywords": [ 923 | "global state" 924 | ], 925 | "time": "2015-10-12 03:26:01" 926 | }, 927 | { 928 | "name": "sebastian/recursion-context", 929 | "version": "dev-master", 930 | "source": { 931 | "type": "git", 932 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 933 | "reference": "7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7" 934 | }, 935 | "dist": { 936 | "type": "zip", 937 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7", 938 | "reference": "7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7", 939 | "shasum": "" 940 | }, 941 | "require": { 942 | "php": ">=5.3.3" 943 | }, 944 | "require-dev": { 945 | "phpunit/phpunit": "~4.4" 946 | }, 947 | "type": "library", 948 | "extra": { 949 | "branch-alias": { 950 | "dev-master": "1.0.x-dev" 951 | } 952 | }, 953 | "autoload": { 954 | "classmap": [ 955 | "src/" 956 | ] 957 | }, 958 | "notification-url": "https://packagist.org/downloads/", 959 | "license": [ 960 | "BSD-3-Clause" 961 | ], 962 | "authors": [ 963 | { 964 | "name": "Jeff Welch", 965 | "email": "whatthejeff@gmail.com" 966 | }, 967 | { 968 | "name": "Sebastian Bergmann", 969 | "email": "sebastian@phpunit.de" 970 | }, 971 | { 972 | "name": "Adam Harvey", 973 | "email": "aharvey@php.net" 974 | } 975 | ], 976 | "description": "Provides functionality to recursively process PHP variables", 977 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 978 | "time": "2016-01-28 05:39:29" 979 | }, 980 | { 981 | "name": "sebastian/version", 982 | "version": "1.0.6", 983 | "source": { 984 | "type": "git", 985 | "url": "https://github.com/sebastianbergmann/version.git", 986 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" 987 | }, 988 | "dist": { 989 | "type": "zip", 990 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", 991 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", 992 | "shasum": "" 993 | }, 994 | "type": "library", 995 | "autoload": { 996 | "classmap": [ 997 | "src/" 998 | ] 999 | }, 1000 | "notification-url": "https://packagist.org/downloads/", 1001 | "license": [ 1002 | "BSD-3-Clause" 1003 | ], 1004 | "authors": [ 1005 | { 1006 | "name": "Sebastian Bergmann", 1007 | "email": "sebastian@phpunit.de", 1008 | "role": "lead" 1009 | } 1010 | ], 1011 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1012 | "homepage": "https://github.com/sebastianbergmann/version", 1013 | "time": "2015-06-21 13:59:46" 1014 | }, 1015 | { 1016 | "name": "symfony/yaml", 1017 | "version": "dev-master", 1018 | "source": { 1019 | "type": "git", 1020 | "url": "https://github.com/symfony/yaml.git", 1021 | "reference": "aa8be2235b5dd4e472424552390609f61996f5ab" 1022 | }, 1023 | "dist": { 1024 | "type": "zip", 1025 | "url": "https://api.github.com/repos/symfony/yaml/zipball/aa8be2235b5dd4e472424552390609f61996f5ab", 1026 | "reference": "aa8be2235b5dd4e472424552390609f61996f5ab", 1027 | "shasum": "" 1028 | }, 1029 | "require": { 1030 | "php": ">=5.5.9" 1031 | }, 1032 | "require-dev": { 1033 | "symfony/console": "~2.8|~3.0" 1034 | }, 1035 | "suggest": { 1036 | "symfony/console": "For validating YAML files using the lint command" 1037 | }, 1038 | "type": "library", 1039 | "extra": { 1040 | "branch-alias": { 1041 | "dev-master": "3.2-dev" 1042 | } 1043 | }, 1044 | "autoload": { 1045 | "psr-4": { 1046 | "Symfony\\Component\\Yaml\\": "" 1047 | }, 1048 | "exclude-from-classmap": [ 1049 | "/Tests/" 1050 | ] 1051 | }, 1052 | "notification-url": "https://packagist.org/downloads/", 1053 | "license": [ 1054 | "MIT" 1055 | ], 1056 | "authors": [ 1057 | { 1058 | "name": "Fabien Potencier", 1059 | "email": "fabien@symfony.com" 1060 | }, 1061 | { 1062 | "name": "Symfony Community", 1063 | "homepage": "https://symfony.com/contributors" 1064 | } 1065 | ], 1066 | "description": "Symfony Yaml Component", 1067 | "homepage": "https://symfony.com", 1068 | "time": "2016-09-02 02:14:06" 1069 | }, 1070 | { 1071 | "name": "webmozart/assert", 1072 | "version": "dev-master", 1073 | "source": { 1074 | "type": "git", 1075 | "url": "https://github.com/webmozart/assert.git", 1076 | "reference": "8444f2ac9f86342665cdae47b6d3ea6e07794456" 1077 | }, 1078 | "dist": { 1079 | "type": "zip", 1080 | "url": "https://api.github.com/repos/webmozart/assert/zipball/8444f2ac9f86342665cdae47b6d3ea6e07794456", 1081 | "reference": "8444f2ac9f86342665cdae47b6d3ea6e07794456", 1082 | "shasum": "" 1083 | }, 1084 | "require": { 1085 | "php": "^5.3.3 || ^7.0" 1086 | }, 1087 | "require-dev": { 1088 | "phpunit/phpunit": "^4.6", 1089 | "sebastian/version": "^1.0.1" 1090 | }, 1091 | "type": "library", 1092 | "extra": { 1093 | "branch-alias": { 1094 | "dev-master": "1.2-dev" 1095 | } 1096 | }, 1097 | "autoload": { 1098 | "psr-4": { 1099 | "Webmozart\\Assert\\": "src/" 1100 | } 1101 | }, 1102 | "notification-url": "https://packagist.org/downloads/", 1103 | "license": [ 1104 | "MIT" 1105 | ], 1106 | "authors": [ 1107 | { 1108 | "name": "Bernhard Schussek", 1109 | "email": "bschussek@gmail.com" 1110 | } 1111 | ], 1112 | "description": "Assertions to validate method input/output with nice error messages.", 1113 | "keywords": [ 1114 | "assert", 1115 | "check", 1116 | "validate" 1117 | ], 1118 | "time": "2016-08-18 09:30:53" 1119 | } 1120 | ], 1121 | "aliases": [], 1122 | "minimum-stability": "dev", 1123 | "stability-flags": [], 1124 | "prefer-stable": false, 1125 | "prefer-lowest": false, 1126 | "platform": { 1127 | "php": ">=5.4.0" 1128 | }, 1129 | "platform-dev": [] 1130 | } 1131 | --------------------------------------------------------------------------------