Completed
Push — master ( 733c81...556f9e )
by Chin
16s queued 10s
created

MultilingualRoutePendingRegistration   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 204
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 204
rs 10
c 0
b 0
f 0
wmc 13
lcom 1
cbo 2

11 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A register() 0 11 1
A except() 0 9 1
A name() 0 6 1
A method() 0 6 1
A names() 0 6 1
A only() 0 9 1
A where() 0 10 2
A view() 0 6 1
A defaults() 0 6 1
A __destruct() 0 6 2
1
<?php
2
3
namespace ChinLeung\MultilingualRoutes;
4
5
use Illuminate\Routing\RouteCollection;
6
use Illuminate\Support\Arr;
7
8
class MultilingualRoutePendingRegistration
9
{
10
    /**
11
     * The handle of the routes.
12
     *
13
     * @var mixed
14
     */
15
    protected $handle;
16
17
    /**
18
     * The translation key of the routes.
19
     *
20
     * @var string
21
     */
22
    protected $key;
23
24
    /**
25
     * The list of locales for the route.
26
     *
27
     * @var array
28
     */
29
    protected $locales = [];
30
31
    /**
32
     * The options of the routes.
33
     *
34
     * @var array
35
     */
36
    protected $options = [];
37
38
    /**
39
     * The resource's registration status.
40
     *
41
     * @var bool
42
     */
43
    protected $registered = false;
44
45
    /**
46
     * The resource registrar.
47
     *
48
     * @var \ChinLeung\MultilingualRoutes\MultilingualRegistrar
49
     */
50
    protected $registrar;
51
52
    /**
53
     * Constructor of the class.
54
     *
55
     * @param  \ChinLeung\MultilingualRoutes\MultilingualRegistrar  $registrar
56
     * @param  string  $key
57
     * @param  mixed  $handle
58
     * @param  array  $locales
59
     */
60
    public function __construct(MultilingualRegistrar $registrar, string $key, $handle, array $locales = [])
61
    {
62
        $this->key = $key;
63
        $this->registrar = $registrar;
64
        $this->handle = $handle;
65
        $this->locales = $locales;
66
    }
67
68
    /**
69
     * Register the resource route.
70
     *
71
     * @return \Illuminate\Routing\RouteCollection
72
     */
73
    public function register(): RouteCollection
74
    {
75
        $this->registered = true;
76
77
        return $this->registrar->register(
78
            $this->key,
79
            $this->handle,
80
            $this->options['locales'] ?? $this->locales,
81
            $this->options
82
        );
83
    }
84
85
    /**
86
     * Add one or many locale to the exception.
87
     *
88
     * @param  string|array  $locales
89
     * @return self
90
     */
91
    public function except($locales): self
92
    {
93
        $this->options['locales'] = array_diff(
94
            $this->locales,
95
            Arr::wrap($locales)
96
        );
97
98
        return $this;
99
    }
100
101
    /**
102
     * Set the name of the routes.
103
     *
104
     * @param  string  $name
105
     * @return self
106
     */
107
    public function name(string $name): self
108
    {
109
        $this->options['name'] = $name;
110
111
        return $this;
112
    }
113
114
    /**
115
     * Set the method of the routes.
116
     *
117
     * @param  string  $method
118
     * @return self
119
     */
120
    public function method(string $method): self
121
    {
122
        $this->options['method'] = $method;
123
124
        return $this;
125
    }
126
127
    /**
128
     * Set the name of each locale for the routes.
129
     *
130
     * @param  array  $names
131
     * @return self
132
     */
133
    public function names(array $names): self
134
    {
135
        $this->options['names'] = $names;
136
137
        return $this;
138
    }
139
140
    /**
141
     * Set the route for a list of locales only.
142
     *
143
     * @param  string|array  $locales
144
     * @return self
145
     */
146
    public function only($locales): self
147
    {
148
        $this->options['locales'] = array_intersect(
149
            $this->locales,
150
            Arr::wrap($locales)
151
        );
152
153
        return $this;
154
    }
155
156
    /**
157
     * Set a regular expression requirement on the route.
158
     *
159
     * @param  array|string  $name
160
     * @param  string|null  $expression
161
     * @return $this
162
     */
163
    public function where($name, $expression = null): self
164
    {
165
        if (! is_array(Arr::get($this->options, 'constraints'))) {
166
            Arr::set($this->options, 'constraints', []);
167
        }
168
169
        Arr::set($this->options, "constraints.$name", $expression);
170
171
        return $this;
172
    }
173
174
    /**
175
     * Set the view to render.
176
     *
177
     * @param  string  $view
178
     * @return self
179
     */
180
    public function view(string $view): self
181
    {
182
        $this->options['view'] = $view;
183
184
        return $this;
185
    }
186
187
    /**
188
     * Set default parameters values of the routes.
189
     *
190
     * @param  array  $defaults
191
     * @return self
192
     */
193
    public function defaults(array $defaults): self
194
    {
195
        $this->options['defaults'] = $defaults;
196
197
        return $this;
198
    }
199
200
    /**
201
     * Handle the object's destruction.
202
     *
203
     * @return void
204
     */
205
    public function __destruct()
206
    {
207
        if (! $this->registered) {
208
            $this->register();
209
        }
210
    }
211
}
212