/** * {@inheritdoc} */ public function teleport(Resource $resource, $context) { $response = $this->client->get($resource->getOriginal())->send(); if (!$response->isSuccessful()) { throw new RuntimeException(sprintf('Unable to fetch %s', $resource->getOriginal())); } $response->getBody()->seek(0); $this->writeTarget($response->getBody(true), $resource, $context); return $this; }
/** * @covers Alchemy\Zippy\Resource\Resource::__construct * @covers Alchemy\Zippy\Resource\Resource::getTarget * @covers Alchemy\Zippy\Resource\Resource::getOriginal */ public function testGetTargetAndOriginal() { $original = 'original-style'; $target = 'target-fishnet'; $resource = new Resource($original, $target); $this->assertEquals($original, $resource->getOriginal()); $this->assertEquals($target, $resource->getTarget()); }
/** * {@inheritdoc} */ public function teleport(Resource $resource, $context) { $streamCreated = false; if (is_resource($resource->getOriginal())) { $stream = $resource->getOriginal(); } else { $stream = @fopen($resource->getOriginal(), 'rb'); if (!is_resource($stream)) { throw new InvalidArgumentException(sprintf('The stream or file "%s" could not be opened: ', $resource->getOriginal())); } $streamCreated = true; } $content = stream_get_contents($stream); if ($streamCreated) { fclose($stream); } $this->writeTarget($content, $resource, $context); }
/** * Returns the appropriate TeleporterInterface given a Resource * * @param Resource $resource * * @return TeleporterInterface * * @throws InvalidArgumentException */ public function fromResource(Resource $resource) { switch (true) { case is_resource($resource->getOriginal()): $teleporter = 'stream-teleporter'; break; case is_string($resource->getOriginal()): $data = parse_url($resource->getOriginal()); if (!isset($data['scheme']) || 'file' === $data['scheme']) { $teleporter = 'local-teleporter'; } elseif (in_array($data['scheme'], array('http', 'https'))) { $teleporter = 'guzzle-teleporter'; } else { $teleporter = 'stream-teleporter'; } break; default: throw new InvalidArgumentException('No teleporter found'); } return $this[$teleporter]; }
/** * @return resource */ public function getContentsAsStream() { $stream = is_resource($this->resource->getOriginal()) ? $this->resource->getOriginal() : @fopen($this->resource->getOriginal(), 'rb'); return $stream; }
/** * @return \Guzzle\Http\Message\RequestInterface */ private function buildRequest() { return $this->client->get($this->resource->getOriginal()); }