/** * @param string $field * @param integer $type * @param bool|array $multiple * @param array $options * @param Builder $builder */ private function addFieldOfType($field, $type, $multiple, array $options, Builder $builder) { switch ($type) { case Field::TYPE_FAKE: $builder->fake($field, $options[0], isset($options[1]) ? $options[1] : []); break; case Field::TYPE_LINK: $builder->link($field, $options[0]); break; case Field::TYPE_RELATION: $builder->relation($field, $options[0]); break; case Field::TYPE_VALUE: $builder->value($field, $options[0]); break; case Field::TYPE_CALLBACK: $builder->callback($field, $options[0]); break; case Field::TYPE_NONE: $builder->none($field); break; case Field::TYPE_SELECT: $builder->select($field, $options[0]); break; } if (false === $multiple) { $builder->single($field); } else { $builder->multiple($field, $multiple[0], $multiple[1]); } }
private function makeField(array $mapping, Builder $builder) { $field = $mapping['fieldName']; switch ($mapping['type']) { case 'string': $length = isset($mapping['length']) && is_int($mapping['length']) ? $mapping['length'] : 255; $builder->fake($field, 'text', [$length]); break; case 'integer': case 'bigint': $builder->fake($field, 'randomNumber'); break; case 'smallint': $builder->fake($field, 'numberBetween', [0, 65535]); break; case 'boolean': $builder->fake($field, 'boolean'); break; case 'decimal': $precision = isset($mapping['precision']) ? $mapping['precision'] : 2; $builder->callback($field, function ($data, Dogmatist $dogmatist) use($precision) { return $dogmatist->getFaker()->randomNumber($precision + 2) / 100; }); break; case 'date': case 'time': case 'datetime': $builder->fake($field, 'datetime'); break; case 'datetimetz': $builder->callback($field, function ($data, Dogmatist $dogmatist) { $date = $dogmatist->getFaker()->dateTime; $tz = $dogmatist->getFaker()->timezone; return $date->setTimezone(new \DateTimeZone($tz)); }); break; case 'text': $builder->fake($field, 'text'); break; case 'float': $builder->fake($field, 'randomFloat'); break; case 'guid': $builder->fake($field, 'uuid'); break; } }
/** * @param string|int $field * */ protected function checkState($field) { if (is_int($field)) { $this->preparePositional(); } if (count($this->getFields()) > 0) { if (is_string($field) && $this->isPositional()) { throw new BuilderException("Cannot add named argument to positional arguments"); } else { parent::checkState($field); } } }
/** * @param Annotations\Constructor $constr * @param Builder $builder */ private function addConstructor(Annotations\Constructor $constr, Builder $builder) { $cb = $builder->constructor(); foreach ($constr->args as $name => $arg) { $this->addField($name, $arg->type, $arg->count, $cb); } }
/** * @param \ReflectionClass $refl * @param Builder $builder * @return object * @throws SampleException */ private function constructObject(\ReflectionClass $refl, Builder $builder) { $constructor = $refl->getConstructor(); $obj = null; if (null === $constructor || $constructor->getNumberOfParameters() === 0) { $obj = $refl->newInstance(); } elseif ($constructor) { if (!$builder->hasConstructor() && $constructor->getNumberOfRequiredParameters() === 0) { $obj = $refl->newInstance(); } elseif ($builder->hasConstructor()) { $args = $this->alignArgs($constructor, $this->sample($builder->constructor()), $builder->constructor()); $obj = $refl->newInstanceArgs($args); } } if (null === $obj && !$builder->isStrict()) { $obj = $refl->newInstanceWithoutConstructor(); } elseif (null === $obj) { throw new SampleException("Constructor required for constructing {$builder->getClass()} in strict mode"); } return $obj; }