<?php namespace BitApps\WPDatabase; use Closure; use ErrorException; use RuntimeException; class Schema { public $prefix; public static function __callStatic($method, $parameters) { return (new self())->{$method}(...$parameters); } public function __call($method, $parameters) { if ($method === 'withPrefix') { $this->prefix = $parameters[0]; return $this; } if (!method_exists(Blueprint::class, $method)) { throw new RuntimeException('Undefined method [' . $method . '] called on Schema class.'); } if (\is_null($parameters)) { throw new ErrorException('Expected at least 1 parameter, 0 given.'); } if (\count($parameters) > 1 && $parameters[1] instanceof Closure) { $blueprint = $this->createBlueprint($parameters[0], $method, $parameters[1]); unset($parameters[0], $parameters[1]); } else { $blueprint = $this->createBlueprint($parameters[0], $method); unset($parameters[0]); } \call_user_func_array([$blueprint, $method], $parameters); return $this->build($blueprint); } public function createBlueprint($schema, $method, Closure $callback = null) { return new Blueprint( $schema, $method, $this->prefix === '' ? Connection::getPrefix() : $this->prefix, $callback ); } public function build(Blueprint $blueprint) { return $blueprint->build(); } }