|
13 | 13 |
|
14 | 14 | use ArrayAccess; |
15 | 15 | use Interop\Config\Exception; |
| 16 | +use Iterator; |
16 | 17 |
|
17 | 18 | /** |
18 | 19 | * ConfigurationTrait which retrieves options from configuration, see interface \Interop\Config\RequiresConfig |
@@ -42,6 +43,7 @@ abstract public function dimensions(): iterable; |
42 | 43 | public function canRetrieveOptions($config, string $configId = null): bool |
43 | 44 | { |
44 | 45 | $dimensions = $this->dimensions(); |
| 46 | + $dimensions = $dimensions instanceof Iterator ? iterator_to_array($dimensions) : $dimensions; |
45 | 47 |
|
46 | 48 | if ($this instanceof RequiresConfigId) { |
47 | 49 | $dimensions[] = $configId; |
@@ -82,6 +84,7 @@ public function canRetrieveOptions($config, string $configId = null): bool |
82 | 84 | public function options($config, string $configId = null) |
83 | 85 | { |
84 | 86 | $dimensions = $this->dimensions(); |
| 87 | + $dimensions = $dimensions instanceof Iterator ? iterator_to_array($dimensions) : $dimensions; |
85 | 88 |
|
86 | 89 | if ($this instanceof RequiresConfigId) { |
87 | 90 | $dimensions[] = $configId; |
@@ -115,7 +118,12 @@ public function options($config, string $configId = null) |
115 | 118 | } |
116 | 119 |
|
117 | 120 | if ($this instanceof ProvidesDefaultOptions) { |
118 | | - $config = array_replace_recursive($this->defaultOptions(), $config); |
| 121 | + $options = $this->defaultOptions(); |
| 122 | + |
| 123 | + $config = array_replace_recursive( |
| 124 | + $options instanceof Iterator ? iterator_to_array($options) : (array)$options, |
| 125 | + (array)$config |
| 126 | + ); |
119 | 127 | } |
120 | 128 | return $config; |
121 | 129 | } |
|
0 commit comments