Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php
Строк: 149
<?php

namespace IlluminateHttpClient;

use 
IlluminateSupportTraitsMacroable;
use 
OutOfBoundsException;

class 
ResponseSequence
{
    use 
Macroable;

    
/**
     * The responses in the sequence.
     *
     * @var array
     */
    
protected $responses;

    
/**
     * Indicates that invoking this sequence when it is empty should throw an exception.
     *
     * @var bool
     */
    
protected $failWhenEmpty true;

    
/**
     * The response that should be returned when the sequence is empty.
     *
     * @var GuzzleHttpPromisePromiseInterface
     */
    
protected $emptyResponse;

    
/**
     * Create a new response sequence.
     *
     * @param  array  $responses
     * @return void
     */
    
public function __construct(array $responses)
    {
        
$this->responses $responses;
    }

    
/**
     * Push a response to the sequence.
     *
     * @param  string|array|null  $body
     * @param  int  $status
     * @param  array  $headers
     * @return $this
     */
    
public function push($body nullint $status 200, array $headers = [])
    {
        return 
$this->pushResponse(
            
Factory::response($body$status$headers)
        );
    }

    
/**
     * Push a response with the given status code to the sequence.
     *
     * @param  int  $status
     * @param  array  $headers
     * @return $this
     */
    
public function pushStatus(int $status, array $headers = [])
    {
        return 
$this->pushResponse(
            
Factory::response(''$status$headers)
        );
    }

    
/**
     * Push response with the contents of a file as the body to the sequence.
     *
     * @param  string  $filePath
     * @param  int  $status
     * @param  array  $headers
     * @return $this
     */
    
public function pushFile(string $filePathint $status 200, array $headers = [])
    {
        
$string file_get_contents($filePath);

        return 
$this->pushResponse(
            
Factory::response($string$status$headers)
        );
    }

    
/**
     * Push a response to the sequence.
     *
     * @param  mixed  $response
     * @return $this
     */
    
public function pushResponse($response)
    {
        
$this->responses[] = $response;

        return 
$this;
    }

    
/**
     * Make the sequence return a default response when it is empty.
     *
     * @param  GuzzleHttpPromisePromiseInterface|Closure  $response
     * @return $this
     */
    
public function whenEmpty($response)
    {
        
$this->failWhenEmpty false;
        
$this->emptyResponse $response;

        return 
$this;
    }

    
/**
     * Make the sequence return a default response when it is empty.
     *
     * @return $this
     */
    
public function dontFailWhenEmpty()
    {
        return 
$this->whenEmpty(Factory::response());
    }

    
/**
     * Indicate that this sequence has depleted all of its responses.
     *
     * @return bool
     */
    
public function isEmpty()
    {
        return 
count($this->responses) === 0;
    }

    
/**
     * Get the next response in the sequence.
     *
     * @return mixed
     *
     * @throws OutOfBoundsException
     */
    
public function __invoke()
    {
        if (
$this->failWhenEmpty && $this->isEmpty()) {
            throw new 
OutOfBoundsException('A request was made, but the response sequence is empty.');
        }

        if (! 
$this->failWhenEmpty && $this->isEmpty()) {
            return 
value($this->emptyResponse ?? Factory::response());
        }

        return 
array_shift($this->responses);
    }
}
Онлайн: 0
Реклама