RestApiRequestFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 110
Duplicated Lines 0 %

Coupling/Cohesion

Components 3
Dependencies 1

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 6
c 0
b 0
f 0
lcom 3
cbo 1
dl 0
loc 110
ccs 0
cts 44
cp 0
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 12 1
A registerRouteMapping() 0 4 1
A createRequestUri() 0 16 2
A createRequestBodyData() 0 7 1
A createRequestOptions() 0 7 1
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