Code Duplication    Length = 57-57 lines in 2 locations

src/Model/Episode.php 1 location

@@ 5-61 (lines=57) @@
2
3
namespace Zmaglica\RickAndMortyApiWrapper\Model;
4
5
class Episode extends AbstractModel
6
{
7
    /**
8
     * Get all characters without running API call. Useful if you want to perform additional filtering.
9
     * @param bool $removeDuplicates
10
     * @return \Zmaglica\RickAndMortyApiWrapper\Api\AbstractApi
11
     */
12
    public function characters($removeDuplicates = false)
13
    {
14
        $ids = $this->extractIdsFromResponseBasedOnKey('characters', $removeDuplicates);
15
16
        return $this->api->character()->whereId($ids);
17
    }
18
19
    /**
20
     * Get all episode characters
21
     * @param bool $removeDuplicates
22
     * @return mixed
23
     */
24
    public function getCharacters($removeDuplicates = false)
25
    {
26
        return $this->characters($removeDuplicates)->get();
27
    }
28
29
    /**
30
     * This helper function will extract all URL ids by key. Key can be location, residence or episode
31
     * @param $key
32
     * @param $removeDuplicates
33
     * @return array
34
     */
35
    private function extractIdsFromResponseBasedOnKey($key, $removeDuplicates)
36
    {
37
        $ids = [];
38
        if ($this->info) {
39
            $urls = array_column($this->data['results'], $key);
40
            // flatten array to single one because there can be multiple residents per location
41
            $urls = array_merge(...$urls);
42
        } elseif (isset($this->data[0])) {
43
            $urls = array_column($this->data, $key);
44
            // flatten array to single one because there can be multiple residents per location
45
            $urls = array_merge(...$urls);
46
        } else {
47
            $urls = $this->data[$key];
48
        }
49
50
        if ($removeDuplicates) {
51
            $urls = array_unique($urls);
52
        }
53
54
        foreach ($urls as $url) {
55
            $ids[] = substr(strrchr($url, '/'), 1);
56
            ;
57
        }
58
59
        return $ids;
60
    }
61
}
62

src/Model/Location.php 1 location

@@ 5-61 (lines=57) @@
2
3
namespace Zmaglica\RickAndMortyApiWrapper\Model;
4
5
class Location extends AbstractModel
6
{
7
    /**
8
     * Get all location residents without running API call. Useful if you want to perform additional filtering.
9
     * @param bool $removeDuplicates
10
     * @return \Zmaglica\RickAndMortyApiWrapper\Api\AbstractApi
11
     */
12
    public function residents($removeDuplicates = false)
13
    {
14
        $ids = $this->extractIdsFromResponseBasedOnKey('residents', $removeDuplicates);
15
16
        return $this->api->character()->whereId($ids);
17
    }
18
19
    /**
20
     * Get all location residents
21
     * @param bool $removeDuplicates
22
     * @return mixed
23
     */
24
    public function getResidents($removeDuplicates = false)
25
    {
26
        return $this->residents($removeDuplicates)->get();
27
    }
28
29
    /**
30
     * This helper function will extract all URL ids by key. Key can be location, residence or episode
31
     * @param $key
32
     * @param $removeDuplicates
33
     * @return array
34
     */
35
    private function extractIdsFromResponseBasedOnKey($key, $removeDuplicates)
36
    {
37
        $ids = [];
38
        if ($this->info) {
39
            $urls = array_column($this->data['results'], $key);
40
            // flatten array to single one because there can be multiple residents per location
41
            $urls = array_merge(...$urls);
42
        } elseif (isset($this->data[0])) {
43
            $urls = array_column($this->data, $key);
44
            // flatten array to single one because there can be multiple residents per location
45
            $urls = array_merge(...$urls);
46
        } else {
47
            $urls = $this->data[$key];
48
        }
49
50
        if ($removeDuplicates) {
51
            $urls = array_unique($urls);
52
        }
53
54
        foreach ($urls as $url) {
55
            $ids[] = substr(strrchr($url, '/'), 1);
56
            ;
57
        }
58
59
        return $ids;
60
    }
61
}
62