/** * @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; }
public static function create($faker = \Faker\Factory::DEFAULT_LOCALE, GuesserInterface $filler = null, PropertyAccessorInterface $accessor = null) { if (is_string($faker)) { $faker = \Faker\Factory::create($faker); } if (!is_object($faker) || !$faker instanceof FakerGenerator) { throw new InvalidArgumentException("Expected instance of \\Faker\\Generator, got " . gettype($faker)); } $dogmatist = new Dogmatist(); if (null === $filler) { $filler = new NoneGuesser(); } if (null === $accessor) { $accessor = new PropertyAccessor(); } $sampler = new Sampler($dogmatist, $accessor); $linkManager = new LinkManager($sampler); $dogmatist->setFaker($faker); $dogmatist->setGuesser($filler); $dogmatist->setLinkManager($linkManager); $dogmatist->setSampler($sampler); return $dogmatist; }
/** * @param int $count * @return array|object[] * @throws Exception\SampleException */ public function samples($count) { return $this->dogmatist->samples($this, $count); }