/**
  * @throws \Exception if one has been queued.
  * @throws \OutOfBoundsException if the queue is empty.
  */
 public function onPrepare(PrepareEvent $event)
 {
     if (!($result = array_shift($this->queue))) {
         throw new \OutOfBoundsException('Result mock queue is empty');
     } elseif ($result instanceof \Exception) {
         throw $result;
     } else {
         $event->setResult($result);
     }
 }
 public function testCanSetRequest()
 {
     $command = $this->getMock('GuzzleHttp\\Command\\CommandInterface');
     $client = $this->getMock('GuzzleHttp\\Command\\ServiceClientInterface');
     $trans = new CommandTransaction($client, $command);
     $event = new PrepareEvent($trans);
     $request = new Request('GET', 'http://httbin.org');
     $event->setRequest($request);
     $this->assertSame($request, $event->getRequest());
     $this->assertFalse($event->isPropagationStopped());
 }
 public function onPrepare(PrepareEvent $event)
 {
     // Don't modify the request if one is already present
     if ($event->getRequest()) {
         return;
     }
     /* @var GuzzleCommandInterface $command */
     $command = $event->getCommand();
     /* @var GuzzleClientInterface $client */
     $client = $event->getClient();
     $request = $this->createRequest($command, $client);
     $this->prepareRequest($command, $client, $request);
     $event->setRequest($request);
 }
 public function onPrepare(PrepareEvent $event)
 {
     $command = $event->getCommand();
     if (!$command instanceof GuzzleCommandInterface) {
         throw new \RuntimeException('The command sent to ' . __METHOD__ . ' is not a GuzzleHttp\\Command\\Guzzle\\GuzzleCommandInterface');
     }
     $errors = array();
     $operation = $command->getOperation();
     foreach ($operation->getParams() as $name => $schema) {
         $value = $command[$name];
         if (!$this->validator->validate($schema, $value)) {
             $errors = array_merge($errors, $this->validator->getErrors());
         } elseif ($value !== $command[$name]) {
             // Update the config value if it changed and no validation
             // errors were encountered
             $command[$name] = $value;
         }
     }
     if ($params = $operation->getAdditionalParameters()) {
         foreach ($command->toArray() as $name => $value) {
             // It's only additional if it isn't defined in the schema
             if (!$operation->hasParam($name)) {
                 // Always set the name so that error messages are useful
                 $params->setName($name);
                 if (!$this->validator->validate($params, $value)) {
                     $errors = array_merge($errors, $this->validator->getErrors());
                 } elseif ($value !== $command[$name]) {
                     $command[$name] = $value;
                 }
             }
         }
     }
     if ($errors) {
         throw new CommandException('Validation errors: ' . implode("\n", $errors), $event->getTransaction());
     }
 }