RestApiRequestFactory::createRequestBodyData()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 7
ccs 0
cts 7
cp 0
rs 9.4285
cc 1
eloc 4
nc 1
nop 1
crap 2
1
<?php
2
3
namespace Majora\Framework\Api\Request;
4
5
use GuzzleHttp\Psr7\Request;
6
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
7
8
/**
9
 * Request factory
10
 */
11
class RestApiRequestFactory
12
{
13
    /**
14
     * @var UrlGeneratorInterface
15
     */
16
    protected $urlGenerator;
17
18
    /**
19
     * @var array
20
     */
21
    protected $routeMapping;
22
23
    /**
24
     * @var array
25
     */
26
    protected $defaultOptions;
27
28
    /**
29
     * @var array
30
     */
31
    protected $defaultBodyData;
32
33
    /**
34
     * Construct
35
     *
36
     * @param UrlGeneratorInterface $urlGenerator
37
     * @param array                 $defaultOptions
38
     * @param array                 $defaultBodyData
39
     * @param array                 $routeMapping
40
     */
41
    public function __construct(
42
        UrlGeneratorInterface $urlGenerator,
43
        array $defaultOptions = array(),
44
        array $defaultBodyData = array(),
45
        array $routeMapping = array()
46
    )
47
    {
48
        $this->urlGenerator = $urlGenerator;
49
        $this->defaultOptions = $defaultOptions;
50
        $this->defaultBodyData = $defaultBodyData;
51
        $this->routeMapping = $routeMapping;
52
    }
53
54
    /**
55
     * Register a new route mapping
56
     *
57
     * @param array $routeMapping
58
     */
59
    public function registerRouteMapping(array $routeMapping)
60
    {
61
        $this->routeMapping = $routeMapping;
62
    }
63
64
    /**
65
     * Create a http request uri from presets under $name parameter
66
     *
67
     * @param  string $name
68
     * @param  array  $query
69
     *
70
     * @return string
71
     *
72
     * @throws InvalidArgumentException If request doesnt exist for given name
73
     */
74
    public function createRequestUri($name, array $query = array())
75
    {
76
        if (empty($this->routeMapping[$name])) {
77
            throw new \InvalidArgumentException(sprintf('Unknow request preset under name "%s", only [%s] defined.',
78
                $name,
79
                implode('","', array_keys($this->routeMapping))
80
            ));
81
        }
82
83
        // build request
84
        return $this->urlGenerator->generate(
85
            $this->routeMapping[$name],
86
            $query,
87
            UrlGeneratorInterface::ABSOLUTE_URL
88
        );
89
    }
90
91
    /**
92
     * Create request body data
93
     *
94
     * @param array $body
95
     *
96
     * @return array
97
     */
98
    public function createRequestBodyData(array $body = array())
99
    {
100
        return array_replace_recursive(
101
            $this->defaultBodyData,
102
            $body
103
        );
104
    }
105
106
    /**
107
     * Create request options, flatten default one and given one
108
     *
109
     * @param array $options
110
     *
111
     * @return array
112
     */
113
    public function createRequestOptions(array $options = array())
114
    {
115
        return array_replace_recursive(
116
            $this->defaultOptions,
117
            $options
118
        );
119
    }
120
}
121