Completed
Push — master ( 3d2d99...6ac670 )
by Luke
02:45 queued 01:29
created

src/Methods/AbstractMethod.php (1 issue)

1
<?php
2
3
namespace ZpgRtf\Methods;
4
5
use GuzzleHttp\Client;
6
7
/**
8
 * The listing method allows you to list, update or delete listings on the ZPG rtf.
9
 */
10
abstract class AbstractMethod
11
{
12
    /** @var string */
13
    const BASE_URI = 'https://realtime-listings-api.webservices.zpg.co.uk/sandbox/v1/';
14
15
    /** @var Client */
16
    private $client;
17
18
    /**
19
     * @param string $certificate
20
     */
21 2
    public function __construct($certificate)
22
    {
23 2
        $this->client = new Client([
24 2
            'base_uri' => self::BASE_URI,
25 2
            'cert' => $certificate,
26
        ]);
27 2
    }
28
29
    /**
30
     * @return Client
31
     */
32 1
    public function getClient()
33
    {
34 1
        return $this->client;
35
    }
36
37
    /**
38
     * @param Client $client
39
     *
40
     * @return static
41
     */
42 2
    public function setClient(Client $client)
43
    {
44 2
        $this->client = $client;
45
46 2
        return $this;
47
    }
48
49
    /**
50
     * @param string $schemaUri
51
     * @param string $uri
52
     * @param \JsonSerializable $object
53
     *
54
     * @return \GuzzleHttp\Psr7\Response
55
     *
56
     * @throws \Exception If validation fails. Needs a custom exception type.
57
     */
58 View Code Duplication
    protected function validateAndSend($schemaUri, $uri, \JsonSerializable $object)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
59
    {
60
        $payload = json_encode($object);
61
        $schema = Dereferencer::draft4()->dereference($schemaUri);
62
        $validator = new Validator(json_decode($payload), $schema);
63
64
        if ($validator->fails()) {
65
            throw new \Exception('Fails validation');
66
        }
67
68
        return $this->getClient()->request('POST', $uri, [
69
            'body' => $payload
70
        ]);
71
    }
72
}
73