1<?php
2
3namespace Sirius\Validation\DataWrapper;
4
5use Sirius\Validation\Util\Arr;
6use Sirius\Validation\DataWrapper\WrapperInterface;
7
8class ArrayWrapper implements WrapperInterface
9{
10
11    /**
12     * @var array
13     */
14    protected $data = array();
15
16    /**
17     * @param array $data
18     */
19    public function __construct($data = array())
20    {
21        $this->setData($data);
22    }
23
24    /**
25     * @param array|\ArrayObject|object $data
26     * @throws \InvalidArgumentException
27     */
28    public function setData($data)
29    {
30        if (is_object($data)) {
31            if ($data instanceof \ArrayObject) {
32                $data = $data->getArrayCopy();
33            } elseif (method_exists($data, 'toArray')) {
34                $data = $data->toArray();
35            }
36        }
37        if (!is_array($data)) {
38            throw new \InvalidArgumentException('Data passed to validator is not an array or an ArrayObject');
39        }
40        $this->data = $data;
41        return;
42    }
43
44    public function getItemValue($item)
45    {
46        return Arr::getByPath($this->data, $item);
47    }
48
49    public function getItemsBySelector($selector)
50    {
51        return Arr::getBySelector($this->data, $selector);
52    }
53
54}
55