Completed
Push — master ( 9dc47d...2fb15d )
by Chin
01:12
created

MultilingualRoutePendingRegistration::view()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace ChinLeung\LaravelMultilingualRoutes;
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\LaravelMultilingualRoutes\MultilingualRegistrar
49
     */
50
    protected $registrar;
51
52
    /**
53
     * Constructor of the class.
54
     *
55
     * @param  \ChinLeung\LaravelMultilingualRoutes\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 the view to render.
158
     *
159
     * @param  string  $view
160
     * @return self
161
     */
162
    public function view(string $view) : self
163
    {
164
        $this->options['view'] = $view;
165
166
        return $this;
167
    }
168
169
    /**
170
     * Handle the object's destruction.
171
     *
172
     * @return void
173
     */
174
    public function __destruct()
175
    {
176
        if (! $this->registered) {
177
            $this->register();
178
        }
179
    }
180
}
181