Completed
Push — master ( 1b4f53...76f910 )
by Siwapun
03:55
created

endsWith()   B

Complexity

Conditions 9
Paths 1

Size

Total Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 21
rs 8.0555
c 0
b 0
f 0
cc 9
nc 1
nop 0
1
<?php
2
namespace Aerophant\Ramda;
3
4
/**
5
 * @param callable $predicateFunction
6
 * @param array $array
7
 * @return mixed
8
 */
9
function all()
10
{
11
  $all = function (callable $predicateFunction, array $array): bool {
12
    if (empty($array)) {
13
      return false;
14
    }
15
    foreach ($array as $it) {
16
      if (!$predicateFunction($it)) {
17
        return false;
18
      }
19
    }
20
    return true;
21
  };
22
  $arguments = func_get_args();
23
  $curried = curryN($all, 2);
24
  return call_user_func_array($curried, $arguments);
25
}
26
27
/**
28
 * @param callable $predicateFunction
29
 * @param array $array
30
 * @return bool
31
 */
32
function any()
33
{
34
  $any = function (callable $predicateFunction, array $array) {
35
    if (empty($array)) {
36
      return false;
37
    }
38
    foreach ($array as $it) {
39
      if ($predicateFunction($it)) {
40
        return true;
41
      }
42
    }
43
    return false;
44
  };
45
  $arguments = func_get_args();
46
  $curriedAny = curryN($any, 2);
47
  return call_user_func_array($curriedAny, $arguments);
48
}
49
50
/**
51
 * a → [a] → [a]
52
 * @param mixed $item
53
 * @param array $array
54
 * @return array|\Closure
55
 */
56
function append()
57
{
58
  $append = function ($item, array $array) {
59
    return array_merge($array, [$item]);
60
  };
61
  $arguments = func_get_args();
62
  $curriedAny = curryN($append, 2);
63
  return call_user_func_array($curriedAny, $arguments);
64
}
65
66
/**
67
 * [a] → [a] → [a]
68
 * @param mixed $item
69
 * @param array $array
70
 * @return array|\Closure
71
 */
72
function concat()
73
{
74
  $concat = function (array $firstArray, array $secondArray) {
75
    return array_merge($firstArray, $secondArray);
76
  };
77
  $arguments = func_get_args();
78
  $curriedAny = curryN($concat, 2);
79
  return call_user_func_array($curriedAny, $arguments);
80
}
81
82
/**
83
 * a → [a] → Boolean
84
 * @param mixed $item item to compare against
85
 * @param array $array The array to consider
86
 * @return boolean|\Closure
87
 */
88
function contains()
89
{
90
  $contains = partialRight('in_array', [true]);
91
  $arguments = func_get_args();
92
  $curriedAny = curryN($contains, 2);
93
  return call_user_func_array($curriedAny, $arguments);
94
}
95
96
/**
97
 * @param int $index
98
 * @param array $array
99
 * @return mixed
100
 */
101
function drop()
102
{
103
  $drop = function (int $index, array $array) {
104
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
105
  };
106
  $arguments = func_get_args();
107
  $curried = curryN($drop, 2);
108
  return call_user_func_array($curried, $arguments);
109
}
110
111
/**
112
 * @param array $array
113
 * @return mixed
114
 */
115
function dropFirst()
116
{
117
  $dropFirst = drop(0);
118
  $arguments = func_get_args();
119
  $curried = curryN($dropFirst, 1);
120
  return call_user_func_array($curried, $arguments);
121
}
122
123
/**
124
 * @param array $array
125
 * @return mixed
126
 */
127
function dropLast()
128
{
129
  $dropLast = function (array $array) {
130
    $index = count($array)-1;
131
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
132
  };
133
134
  $arguments = func_get_args();
135
  $curried = curryN($dropLast, 1);
136
  return call_user_func_array($curried, $arguments);
137
}
138
139
/**
140
 * @param string|array $suffix
141
 * @param string|array $list
142
 * @return boolean|\Closure
143
 */
144
function endsWith()
145
{
146
  $endsWith = function ($suffix, $list) {
147
    if (is_string($suffix) && is_string($list)) {
148
      return $suffix === '' || (($temp = strlen($list) - strlen($suffix)) >= 0 && strpos($list, $suffix) !== false);
0 ignored issues
show
Unused Code introduced by
The assignment to $temp is dead and can be removed.
Loading history...
149
    }
150
    if (is_array($suffix) && is_array($list)) {
151
      $index = count($list) - count($suffix);
152
      foreach ($suffix as $it) {
153
        if ($it != $list[$index]) {
154
          return false;
155
        }
156
        $index++;
157
      }
158
      return true;
159
    }
160
    throw new \InvalidArgumentException(__FUNCTION__ . 'accepts only string or array as it arguments');
161
  };
162
  $arguments = func_get_args();
163
  $curried = curryN($endsWith, 2);
164
  return call_user_func_array($curried, $arguments);
165
}
166
167
/**
168
 * @param callable $predicateFunction
169
 * @param array $array
170
 * @return mixed
171
 */
172
function filter()
173
{
174
  $filter = function (callable $predicateFunction, array $array) {
175
     return array_values(array_filter($array, $predicateFunction));
176
  };
177
  $arguments = func_get_args();
178
  $curried = curryN($filter, 2);
179
  return call_user_func_array($curried, $arguments);
180
}
181
182
/**
183
 * @param callable $predicateFunction
184
 * @param array $array
185
 * @return mixed
186
 */
187
function filterPreserveKey()
188
{
189
  $filter = function (callable $predicateFunction, array $array) {
190
    return array_filter($array, $predicateFunction);
191
  };
192
  $arguments = func_get_args();
193
  $curried = curryN($filter, 2);
194
  return call_user_func_array($curried, $arguments);
195
}
196
197
/**
198
 * @param callable $predicateFunction
199
 * @param array $list
200
 * @return mixed
201
 */
202
function find()
203
{
204
  $find = function (callable $predicateFunction, array $list) {
205
    foreach ($list as $item) {
206
      if ($predicateFunction($item)) {
207
        return $item;
208
      }
209
    }
210
    return null;
211
  };
212
  $arguments = func_get_args();
213
  $curried = curryN($find, 2);
214
  return call_user_func_array($curried, $arguments);
215
}
216
217
function first()
218
{
219
  $first = function (array $array) {
220
    if (empty($array)) {
221
      return null;
222
    }
223
    return $array[0];
224
  };
225
  $arguments = func_get_args();
226
  $curried = curryN($first, 1);
227
  return call_user_func_array($curried, $arguments);
228
}
229
230
function head()
231
{
232
  $head = function (array $array) {
233
    if (empty($array)) {
234
      return null;
235
    }
236
    return $array[0];
237
  };
238
  $arguments = func_get_args();
239
  $curried = curryN($head, 1);
240
  return call_user_func_array($curried, $arguments);
241
}
242
243
function last()
244
{
245
  $last = function (array $array) {
246
    if (empty($array)) {
247
      return null;
248
    }
249
    return $array[count($array) - 1];
250
  };
251
  $arguments = func_get_args();
252
  $curried = curryN($last, 1);
253
  return call_user_func_array($curried, $arguments);
254
}
255
256
/**
257
 * @param callable $mapper
258
 * @param array $array
259
 * @return mixed
260
 */
261
function map()
262
{
263
  $arguments = func_get_args();
264
  $curried = curryN('array_map', 2);
265
  return call_user_func_array($curried, $arguments);
266
}
267
268
/**
269
 * a → [a] → [a]
270
 * @param mixed $item
271
 * @param array $array
272
 * @return array|\Closure
273
 */
274
function prepend()
275
{
276
  $prepend = function ($item, array $array) {
277
    return array_merge([$item], $array);
278
  };
279
  $arguments = func_get_args();
280
  $curriedAny = curryN($prepend, 2);
281
  return call_user_func_array($curriedAny, $arguments);
282
}
283
284
/**
285
 * @param callable $accumulator
286
 * @param mixed $initialValue
287
 * @param array $array
288
 * @return mixed
289
 */
290
function reduce()
291
{
292
  $reduce = function (callable $accumulator, $initialValue, array $array) {
293
    return array_reduce($array, $accumulator, $initialValue);
294
  };
295
  $arguments = func_get_args();
296
  $curried = curryN($reduce, 3);
297
  return call_user_func_array($curried, $arguments);
298
}
299
300
function tail()
301
{
302
  $tail = function (array $array) {
303
    if (empty($array)) {
304
      return null;
305
    }
306
    return $array[count($array) - 1];
307
  };
308
  $arguments = func_get_args();
309
  $curried = curryN($tail, 1);
310
  return call_user_func_array($curried, $arguments);
311
}
312