Esempio n. 1
0
 /**
  * Save this builder as a named builder in the attached Dogmatist instance.
  * If no name is given, the typename is used.
  * If a builder already exists with the given name, then this method fails. Either
  * use `save()` on your Dogmatist instance directly, or choose a different name.
  * @param string $name     The name under which the Builder should be stored.
  * @param int    $generate The number of samples to generate, if less than
  *                         or equal to zero, unlimited samples will be generated.
  * @return $this
  */
 public function save($name = null, $generate = -1)
 {
     if (null === $name) {
         $name = $this->getType();
     }
     if ($this->dogmatist->getLinkManager()->has($name)) {
         throw new BuilderException("A builder with the name '{$name}' already exists");
     }
     $this->dogmatist->save($this, $name, $generate);
     return $this;
 }
Esempio n. 2
0
 /**
  * @param Field             $field
  * @param UniqueArrayObject $data
  * @return mixed
  * @throws SampleException
  */
 private function sampleField(Field $field, UniqueArrayObject $data)
 {
     $faker = $this->dogmatist->getFaker();
     $type = $field->getType();
     $value = null;
     if (Field::TYPE_FAKE === $type) {
         try {
             $value = $faker->format($field->getFakedType(), $field->getFakedOptions());
         } catch (\Exception $e) {
             throw new SampleException("Could not fake value of type {$field->getFakedType()}", 0, $e);
         }
     } elseif (Field::TYPE_VALUE === $type || Field::TYPE_SELECT === $type) {
         $value = $faker->randomElement($field->getSelection());
     } elseif (Field::TYPE_RELATION === $type) {
         $related = $field->getRelated();
         $value = $this->sample($related, $data);
         if ($related->hasParentLinks()) {
             $value = new ReplacableLink($value, $related->getParentLinks());
         }
     } elseif (Field::TYPE_LINK === $type) {
         $target = $field->getLinkTarget();
         if (is_array($target)) {
             $target = $faker->randomElement($target);
         }
         if ($this->dogmatist->getLinkManager()->hasUnlimitedSamples($target)) {
             $value = $this->dogmatist->sample($target);
         } else {
             $samples = $this->dogmatist->getLinkManager()->samples($target);
             $value = $faker->randomElement($samples);
         }
     } elseif (Field::TYPE_CALLBACK === $type) {
         $callback = $field->getCallback();
         $value = $callback($data, $this->dogmatist);
     } else {
         throw new SampleException("Could not generate data for field of type {$field->getType()}");
     }
     return $value;
 }