Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
12 / 12
LocalRpcClient
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
12 / 12
 call
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
12 / 12
<?php
namespace Shellbox\RPC;
use Shellbox\ShellboxError;
use Throwable;
/**
 * An implementation of RPCClient that executes the provided commands locally.
 */
class LocalRpcClient implements RpcClient {
    public function call(
        string $routeName,
        $functionName,
        array $params = [],
        array $options = []
    ) {
        $binary = !empty( $options['binary'] );
        if ( $binary ) {
            $params = array_map( static function ( $param ) {
                return (string)$param;
            }, $params );
        }
        foreach ( $options['sources' ] ?? [] as $source ) {
            require_once $source;
        }
        // We don't need to require $options['classes'] sources - local client
        // is run in the same environment as the calling code, so classes
        // be autoloaded.
        try {
            $result = call_user_func_array( $functionName, $params );
        } catch ( Throwable $e ) {
            throw new ShellboxError( $e->getMessage(), $e->getCode(), $e );
        }
        if ( $binary ) {
            $result = (string)$result;
        }
        return $result;
    }
}