bravesheep/dogmatist

View on GitHub
src/Factory.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Bravesheep\Dogmatist;

use Bravesheep\Dogmatist\Exception\InvalidArgumentException;
use Bravesheep\Dogmatist\Guesser\GuesserInterface;
use Bravesheep\Dogmatist\Guesser\NoneGuesser;
use Faker\Generator as FakerGenerator;
use Symfony\Component\PropertyAccess\PropertyAccessor;
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;

class Factory
{
    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;
    }
}