/** * Create complexAttributes objects depends on bag content * * @return array Array of ComplexAttribute objects */ public function getComplexAttributes(AttributeBag $bag) { $complexAttributes = array(); if ($this->complexAttributeFactory !== null) { foreach ($bag->getAll() as $id => $parameters) { if (!isset($parameters['name'])) { throw new InvalidArgumentException('"name" attribute is required.'); } $name = $parameters['name']; unset($parameters['name']); $complexAttribute = $this->complexAttributeFactory->create($name, $parameters); if (!$complexAttribute->isEmpty()) { $complexAttributes[] = $complexAttribute; } } } return $complexAttributes; }
/** * @test */ public function mergeBags() { $bags = array(); $expected = array(); for ($i = 0; $i < 10; $i++) { $bag = new AttributeBag(); $attributes = array('someName' . $i => $i, 'anotherSomeName' . $i => $i); foreach ($attributes as $name => $value) { $bag->add($name, $value); } $bags[] = $bag; $expected = array_merge($attributes, $expected); } $bag = AttributeBag::merge($bags); $this->assertEquals($expected, $bag->getAll()); }
/** * Marge couple of BagContainers into one object. * * Result of merging always is BagContainer. * * @param array $containers * @return BagContainer Result of merging */ public static function merge(array $containers) { $attributeBags = array(); $weight = 0; foreach ($containers as $container) { $weight = max($weight, $container->getWeight()); $attributeBags[] = $container->getAttributeBag(); } $container = new static(); $container->attributeBag = AttributeBag::merge($attributeBags); $container->weight = $weight; return $container; }