Skip to content
Snippets Groups Projects
Commit 9a02b6f5 authored by dyszczo's avatar dyszczo
Browse files

more like builder pattern

parent cf3162b5
Branches
Tags
2 merge requests!5Devel,!4more like builder pattern
...@@ -2,32 +2,16 @@ ...@@ -2,32 +2,16 @@
namespace WPDesk\PluginBuilder\Builder; namespace WPDesk\PluginBuilder\Builder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
class AbstractBuilder { class AbstractBuilder {
protected static $instances = []; public function build() {
/**
* @param string $class
* @param AbstractPlugin $object
*/
protected function addToStorage( $class, $object ) {
if ( isset( self::$instances[ $class ] ) ) {
throw new Exception\ClassAlreadyExists( "Class {$class} already exists" );
} }
self::$instances[ $class ] = $object;
public function store_plugin() {
} }
/** public function init_plugin() {
* @param string $class
*
* @return AbstractPlugin
*/
protected function getFromStorage( $class ) {
if ( isset( self::$instances[ $class ] ) ) {
return self::$instances[ $class ];
} else {
throw new Exception\ClassNotExists( "Class {$class} not exists in storage" );
} }
public function get_plugin() {
} }
} }
\ No newline at end of file
...@@ -3,40 +3,55 @@ ...@@ -3,40 +3,55 @@
namespace WPDesk\PluginBuilder\Builder; namespace WPDesk\PluginBuilder\Builder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin; use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
use WPDesk\PluginBuilder\Plugin\PluginStorage;
class InfoBuilder extends AbstractBuilder { class InfoBuilder extends AbstractBuilder {
const FILTER_PLUGIN_CLASS = 'wp_builder_plugin_class'; const FILTER_PLUGIN_CLASS = 'wp_builder_plugin_class';
const HOOK_BEFORE_PLUGIN_INIT = 'wp_builder_before_plugin_init'; const HOOK_BEFORE_PLUGIN_INIT = 'wp_builder_before_plugin_init';
const HOOK_AFTER_PLUGIN_INIT = 'wp_builder_before_init'; const HOOK_AFTER_PLUGIN_INIT = 'wp_builder_before_init';
/** @var AbstractPlugin */
private $plugin;
/** @var \WPDesk_Buildable */
private $info;
/** @var PluginStorage */
private $storage;
/** @var string */
protected $storage_id;
public function __construct( \WPDesk_Buildable $info, PluginStorage $storage ) {
$this->info = $info;
$this->storage = $storage;
$this->storage_id = $info->get_class_name();
}
/** /**
* Builds instance of plugin * Builds instance of plugin
*
* @param \WPDesk_Plugin_Info $info
* @return AbstractPlugin
*
* @return AbstractPlugin
*/ */
public function build_from_info( \WPDesk_Buildable $info ) { public function build_plugin() {
$class_name = apply_filters( self::FILTER_PLUGIN_CLASS, $info->get_class_name() ); $class_name = apply_filters( self::FILTER_PLUGIN_CLASS, $this->info->get_class_name() );
/** @var AbstractPlugin $plugin */ /** @var AbstractPlugin $plugin */
$plugin = new $class_name( $info ); $this->plugin = new $class_name( $this->info );
$this->addToStorage( $info->get_class_name(), $plugin ); }
do_action( self::HOOK_BEFORE_PLUGIN_INIT, $plugin ); public function store_plugin() {
$plugin->init(); $this->storage->add_to_storage( $this->storage_id, $this->plugin );
do_action( self::HOOK_AFTER_PLUGIN_INIT, $plugin ); }
return $plugin; public function init_plugin() {
do_action( self::HOOK_BEFORE_PLUGIN_INIT, $this->plugin );
$this->plugin->init();
do_action( self::HOOK_AFTER_PLUGIN_INIT, $this->plugin );
} }
/** /**
* @param string $class
*
* @return AbstractPlugin * @return AbstractPlugin
*/ */
public function get_plugin_instance( $class ) { public function get_plugin() {
return $this->getFromStorage( $class ); return $this->plugin;
} }
} }
\ No newline at end of file
<?php
namespace WPDesk\PluginBuilder\Plugin\Exception;
class ClassAlreadyExists extends \RuntimeException
{
}
\ No newline at end of file
<?php
namespace WPDesk\PluginBuilder\Plugin\Exception;
class ClassNotExists extends \RuntimeException
{
}
\ No newline at end of file
<?php
namespace WPDesk\PluginBuilder\Plugin;
class PluginStorage {
protected static $instances = [];
/**
* @param string $class
* @param AbstractPlugin $object
*/
public function add_to_storage( $class, $object ) {
if ( isset( self::$instances[ $class ] ) ) {
throw new Exception\ClassAlreadyExists( "Class {$class} already exists" );
}
self::$instances[ $class ] = $object;
}
/**
* @param string $class
*
* @return AbstractPlugin
*/
public function get_from_storage( $class ) {
if ( isset( self::$instances[ $class ] ) ) {
return self::$instances[ $class ];
} else {
throw new Exception\ClassNotExists( "Class {$class} not exists in storage" );
}
}
}
<?php
namespace WPDesk\PluginBuilder\Plugin;
class StorageFactory {
/**
* @return PluginStorage
*/
public function create_storage() {
return new PluginStorage();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment