/**
  * {@inheritdoc}
  *
  * @return \Ivory\GoogleMap\Overlays\InfoWindow The info window.
  */
 public function build()
 {
     $infoWindow = new $this->class();
     if ($this->prefixJavascriptVariable !== null) {
         $infoWindow->setPrefixJavascriptVariable($this->prefixJavascriptVariable);
     }
     if ($this->content !== null) {
         $infoWindow->setContent($this->content);
     }
     if (!empty($this->position)) {
         $position = $this->coordinateBuilder->reset()->setLatitude($this->position[0])->setLongitude($this->position[1])->setNoWrap($this->position[2])->build();
         $infoWindow->setPosition($position);
     }
     if (!empty($this->pixelOffset)) {
         $pixelOffset = $this->sizeBuilder->reset()->setWidth($this->pixelOffset[0])->setHeight($this->pixelOffset[1])->setWidthUnit($this->pixelOffset[2])->setHeightUnit($this->pixelOffset[3])->build();
         $infoWindow->setPixelOffset($pixelOffset);
     }
     if ($this->open !== null) {
         $infoWindow->setOpen($this->open);
     }
     if ($this->openEvent !== null) {
         $infoWindow->setOpenEvent($this->openEvent);
     }
     if ($this->autoOpen !== null) {
         $infoWindow->setAutoOpen($this->autoOpen);
     }
     if ($this->autoClose !== null) {
         $infoWindow->setAutoClose($this->autoClose);
     }
     if (!empty($this->options)) {
         $infoWindow->setOptions($this->options);
     }
     return $infoWindow;
 }
 /**
  * {@inheritdoc}
  *
  * @return \Ivory\GoogleMap\Overlays\MarkerImage The marker image.
  */
 public function build()
 {
     $markerImage = new $this->class();
     if ($this->prefixJavascriptVariable !== null) {
         $markerImage->setPrefixJavascriptVariable($this->prefixJavascriptVariable);
     }
     if ($this->url !== null) {
         $markerImage->setUrl($this->url);
     }
     if (!empty($this->anchor)) {
         $anchor = $this->pointBuilder->reset()->setX($this->anchor[0])->setY($this->anchor[1])->build();
         $markerImage->setAnchor($anchor);
     }
     if (!empty($this->origin)) {
         $origin = $this->pointBuilder->reset()->setX($this->origin[0])->setY($this->origin[1])->build();
         $markerImage->setOrigin($origin);
     }
     if (!empty($this->scaledSize)) {
         $scaledSize = $this->sizeBuilder->reset()->setWidth($this->scaledSize[0])->setHeight($this->scaledSize[1])->setWidthUnit($this->scaledSize[2])->setHeightUnit($this->scaledSize[3])->build();
         $markerImage->setScaledSize($scaledSize);
     }
     if (!empty($this->size)) {
         $size = $this->sizeBuilder->reset()->setWidth($this->size[0])->setHeight($this->size[1])->setWidthUnit($this->size[2])->setHeightUnit($this->size[3])->build();
         $markerImage->setSize($size);
     }
     return $markerImage;
 }
 public function testMultipleBuildWithReset()
 {
     $this->sizeBuilder->setPrefixJavascriptVariable('foo')->setWidth(2)->setHeight(3)->setWidthUnit('px')->setHeightUnit('pt');
     $size1 = $this->sizeBuilder->build();
     $this->sizeBuilder->reset();
     $size2 = $this->sizeBuilder->build();
     $this->assertSame('foo', substr($size1->getJavascriptVariable(), 0, 3));
     $this->assertSame(2, $size1->getWidth());
     $this->assertSame(3, $size1->getHeight());
     $this->assertSame('px', $size1->getWidthUnit());
     $this->assertSame('pt', $size1->getHeightUnit());
     $this->assertSame('size_', substr($size2->getJavascriptVariable(), 0, 5));
     $this->assertSame(1, $size2->getWidth());
     $this->assertSame(1, $size2->getHeight());
     $this->assertNull($size2->getWidthUnit());
     $this->assertNull($size2->getHeightUnit());
 }