diff --git a/.gitignore b/.gitignore index c86bb192..6df93349 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,5 @@ /composer.phar /runtime /app/loggerconfig.php -/app/pluginconfig.php /app/config.yml /public/assets/vendor diff --git a/app/pluginconfig.example.php b/app/pluginconfig.example.php deleted file mode 100644 index 538d30ff..00000000 --- a/app/pluginconfig.example.php +++ /dev/null @@ -1,23 +0,0 @@ -registerResource( - // This function will be called when the resource is needed. - function() { - return [ - 'Foo' => "Stuff", - 'Bar' => "More Stuff" - ]; - }, - - // In addition to the function for building the resource the system - // also needs to be told when to load the resource. Either or both - // of the following arguments can be used (null to ignore) - - // This resource will only be given when the argument name is: - "ResourceArray", - - // The resource will only be given when the type hint is: - PHPCensor\Plugin\Util\Factory::TYPE_ARRAY - ); -}; diff --git a/src/PHPCensor/Builder.php b/src/PHPCensor/Builder.php index 40280acf..87d8694e 100644 --- a/src/PHPCensor/Builder.php +++ b/src/PHPCensor/Builder.php @@ -110,9 +110,7 @@ class Builder implements LoggerAwareInterface $this->buildLogger = new BuildLogger($logger, $build); - $pluginFactory = $this->buildPluginFactory($build); - $pluginFactory->addConfigFromFile(APP_DIR . "pluginconfig.php"); - $this->pluginExecutor = new Plugin\Util\Executor($pluginFactory, $this->buildLogger); + $this->pluginExecutor = new Plugin\Util\Executor($this, $build, $this->buildLogger); $executorClass = 'PHPCensor\Helper\UnixCommandExecutor'; if (IS_WIN) { @@ -391,52 +389,4 @@ class Builder implements LoggerAwareInterface { $this->buildLogger->logDebug($message); } - - /** - * Returns a configured instance of the plugin factory. - * - * @param Build $build - * @return PluginFactory - */ - private function buildPluginFactory(Build $build) - { - $pluginFactory = new PluginFactory(); - - $self = $this; - $pluginFactory->registerResource( - function () use ($self) { - return $self; - }, - null, - 'PHPCensor\Builder' - ); - - $pluginFactory->registerResource( - function () use ($build) { - return $build; - }, - null, - 'PHPCensor\Model\Build' - ); - - $logger = $this->logger; - $pluginFactory->registerResource( - function () use ($logger) { - return $logger; - }, - null, - 'Psr\Log\LoggerInterface' - ); - - $pluginFactory->registerResource( - function () use ($self) { - $factory = new MailerFactory($self->getSystemConfig('php-censor')); - return $factory->getSwiftMailerFromConfig(); - }, - null, - 'Swift_Mailer' - ); - - return $pluginFactory; - } } diff --git a/src/PHPCensor/Plugin.php b/src/PHPCensor/Plugin.php index d360545f..0b2824fb 100644 --- a/src/PHPCensor/Plugin.php +++ b/src/PHPCensor/Plugin.php @@ -9,11 +9,46 @@ namespace PHPCensor; +use PHPCI\Model\Build; + /** -* PHPCI Plugin Interface - Used by all build plugins. +* PHPCI Plugin class - Used by all build plugins. + * * @author Dan Cryer */ -interface Plugin +abstract class Plugin { - public function execute(); + /** + * @var \PHPCI\Builder + */ + protected $phpci; + + /** + * @var \PHPCI\Model\Build + */ + protected $build; + + /** + * @var array + */ + protected $options; + + /** + * @param Builder $phpci + * @param Build $build + * @param array $options + */ + public function __construct(Builder $phpci, Build $build, array $options = []) + { + $this->phpci = $phpci; + $this->build = $build; + $this->options = $options; + + $this->phpci->logDebug('Plugin options: ' . json_encode($options)); + } + + /** + * @return boolean + */ + abstract public function execute(); } diff --git a/src/PHPCensor/Plugin/Atoum.php b/src/PHPCensor/Plugin/Atoum.php index d3c880d8..42b4de0a 100644 --- a/src/PHPCensor/Plugin/Atoum.php +++ b/src/PHPCensor/Plugin/Atoum.php @@ -16,24 +16,22 @@ use PHPCensor\Plugin; /** * Atoum plugin, runs Atoum tests within a project. + * * @package PHPCensor\Plugin */ -class Atoum implements Plugin +class Atoum extends Plugin { - private $args; - private $config; - private $directory; + protected $executable; + protected $args; + protected $config; + protected $directory; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); if (isset($options['executable'])) { $this->executable = $this->phpci->buildPath . DIRECTORY_SEPARATOR.$options['executable']; diff --git a/src/PHPCensor/Plugin/Behat.php b/src/PHPCensor/Plugin/Behat.php index bee4f22b..01fbb5ad 100644 --- a/src/PHPCensor/Plugin/Behat.php +++ b/src/PHPCensor/Plugin/Behat.php @@ -17,32 +17,23 @@ use PHPCensor\Plugin; /** * Behat BDD Plugin + * * @author Dan Cryer * @package PHPCI * @subpackage Plugins */ -class Behat implements Plugin +class Behat extends Plugin { - protected $phpci; - protected $build; protected $features; + protected $executable; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + $this->features = ''; if (isset($options['executable'])) { @@ -54,8 +45,6 @@ class Behat implements Plugin if (!empty($options['features'])) { $this->features = $options['features']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** @@ -63,7 +52,7 @@ class Behat implements Plugin */ public function execute() { - $curdir = getcwd(); + $current_dir = getcwd(); chdir($this->phpci->buildPath); $behat = $this->executable; @@ -75,7 +64,7 @@ class Behat implements Plugin } $success = $this->phpci->executeCommand($behat . ' %s', $this->features); - chdir($curdir); + chdir($current_dir); list($errorCount, $data) = $this->parseBehatOutput(); diff --git a/src/PHPCensor/Plugin/Campfire.php b/src/PHPCensor/Plugin/Campfire.php index 2bacf8fb..1e4ac6c4 100644 --- a/src/PHPCensor/Plugin/Campfire.php +++ b/src/PHPCensor/Plugin/Campfire.php @@ -21,31 +21,28 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Campfire implements Plugin +class Campfire extends Plugin { - private $url; - private $authToken; - private $userAgent; - private $cookie; - private $verbose; - private $roomId; + protected $url; + protected $authToken; + protected $userAgent; + protected $cookie; + protected $verbose; + protected $roomId; + protected $message; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - * @throws \Exception + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + $this->message = $options['message']; $this->userAgent = "PHP Censor/1.0"; $this->cookie = "php-censor-cookie"; - $buildSettings = $phpci->getConfig('build_settings'); + $buildSettings = $this->phpci->getConfig('build_settings'); if (isset($buildSettings['campfire'])) { $campfire = $buildSettings['campfire']; diff --git a/src/PHPCensor/Plugin/CleanBuild.php b/src/PHPCensor/Plugin/CleanBuild.php index a9273b12..47e2aa68 100644 --- a/src/PHPCensor/Plugin/CleanBuild.php +++ b/src/PHPCensor/Plugin/CleanBuild.php @@ -20,31 +20,18 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class CleanBuild implements Plugin +class CleanBuild extends Plugin { protected $remove; - protected $phpci; - protected $build; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->remove = isset($options['remove']) && is_array($options['remove']) ? $options['remove'] : []; + parent::__construct($phpci, $build, $options); - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); + $this->remove = isset($options['remove']) && is_array($options['remove']) ? $options['remove'] : []; } /** diff --git a/src/PHPCensor/Plugin/Codeception.php b/src/PHPCensor/Plugin/Codeception.php index 9892c8da..106711c0 100644 --- a/src/PHPCensor/Plugin/Codeception.php +++ b/src/PHPCensor/Plugin/Codeception.php @@ -25,17 +25,11 @@ use PHPCensor\ZeroConfigPlugin; * @package PHPCI * @subpackage Plugins */ -class Codeception implements Plugin, ZeroConfigPlugin +class Codeception extends Plugin implements ZeroConfigPlugin { /** @var string */ protected $args = ''; - /** @var Builder */ - protected $phpci; - - /** @var Build */ - protected $build; - /** * @var string $ymlConfigFile The path of a yml config for Codeception */ @@ -46,6 +40,28 @@ class Codeception implements Plugin, ZeroConfigPlugin */ protected $path; + /** + * {@inheritdoc} + */ + public function __construct(Builder $phpci, Build $build, array $options = []) + { + parent::__construct($phpci, $build, $options); + + $this->path = 'tests' . DIRECTORY_SEPARATOR . '_output' . DIRECTORY_SEPARATOR; + + if (empty($options['config'])) { + $this->ymlConfigFile = self::findConfigFile($this->phpci->buildPath); + } else { + $this->ymlConfigFile = $options['config']; + } + if (isset($options['args'])) { + $this->args = (string) $options['args']; + } + if (isset($options['path'])) { + $this->path = $options['path']; + } + } + /** * @param $stage * @param Builder $builder @@ -75,33 +91,6 @@ class Codeception implements Plugin, ZeroConfigPlugin return null; } - /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - */ - public function __construct(Builder $phpci, Build $build, array $options = []) - { - $this->phpci = $phpci; - $this->build = $build; - $this->path = 'tests' . DIRECTORY_SEPARATOR . '_output' . DIRECTORY_SEPARATOR; - - if (empty($options['config'])) { - $this->ymlConfigFile = self::findConfigFile($this->phpci->buildPath); - } else { - $this->ymlConfigFile = $options['config']; - } - if (isset($options['args'])) { - $this->args = (string) $options['args']; - } - if (isset($options['path'])) { - $this->path = $options['path']; - } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - /** * Runs Codeception tests */ @@ -125,18 +114,18 @@ class Codeception implements Plugin, ZeroConfigPlugin { $this->phpci->logExecOutput(false); - $codecept = $this->phpci->findBinary('codecept'); + $codeception = $this->phpci->findBinary('codecept'); - if (!$codecept) { + if (!$codeception) { $this->phpci->logFailure(Lang::get('could_not_find', 'codecept')); return false; } - $cmd = 'cd "%s" && ' . $codecept . ' run -c "%s" --xml ' . $this->args; + $cmd = 'cd "%s" && ' . $codeception . ' run -c "%s" --xml ' . $this->args; if (IS_WIN) { - $cmd = 'cd /d "%s" && ' . $codecept . ' run -c "%s" --xml ' . $this->args; + $cmd = 'cd /d "%s" && ' . $codeception . ' run -c "%s" --xml ' . $this->args; } $configPath = $this->phpci->buildPath . $configPath; diff --git a/src/PHPCensor/Plugin/Composer.php b/src/PHPCensor/Plugin/Composer.php index 553d07f3..fad5a992 100644 --- a/src/PHPCensor/Plugin/Composer.php +++ b/src/PHPCensor/Plugin/Composer.php @@ -12,6 +12,8 @@ namespace PHPCensor\Plugin; use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Plugin; +use PHPCensor\ZeroConfigPlugin; /** * Composer Plugin - Provides access to Composer functionality. @@ -19,46 +21,23 @@ use PHPCensor\Model\Build; * @package PHPCI * @subpackage Plugins */ -class Composer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin +class Composer extends Plugin implements ZeroConfigPlugin { protected $directory; protected $action; protected $preferDist; - protected $phpci; - protected $build; protected $nodev; protected $ignorePlatformReqs; protected $preferSource; /** - * Check if this plugin can be executed. - * @param $stage - * @param Builder $builder - * @param Build $build - * @return bool - */ - public static function canExecute($stage, Builder $builder, Build $build) - { - $path = $builder->buildPath . DIRECTORY_SEPARATOR . 'composer.json'; - - if (file_exists($path) && $stage == 'setup') { - return true; - } - - return false; - } - - /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $path = $phpci->buildPath; - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + + $path = $this->phpci->buildPath; $this->directory = $path; $this->action = 'install'; $this->preferDist = false; @@ -90,8 +69,24 @@ class Composer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin if (array_key_exists('ignore_platform_reqs', $options)) { $this->ignorePlatformReqs = (bool)$options['ignore_platform_reqs']; } + } - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); + /** + * Check if this plugin can be executed. + * @param $stage + * @param Builder $builder + * @param Build $build + * @return bool + */ + public static function canExecute($stage, Builder $builder, Build $build) + { + $path = $builder->buildPath . DIRECTORY_SEPARATOR . 'composer.json'; + + if (file_exists($path) && $stage == 'setup') { + return true; + } + + return false; } /** diff --git a/src/PHPCensor/Plugin/CopyBuild.php b/src/PHPCensor/Plugin/CopyBuild.php index f87b41c3..44087de9 100644 --- a/src/PHPCensor/Plugin/CopyBuild.php +++ b/src/PHPCensor/Plugin/CopyBuild.php @@ -20,30 +20,23 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class CopyBuild implements Plugin +class CopyBuild extends Plugin { protected $directory; protected $ignore; protected $wipe; - protected $phpci; - protected $build; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $path = $phpci->buildPath; - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + + $path = $this->phpci->buildPath; $this->directory = isset($options['directory']) ? $options['directory'] : $path; $this->wipe = isset($options['wipe']) ? (bool)$options['wipe'] : false; $this->ignore = isset($options['respect_ignore']) ? (bool)$options['respect_ignore'] : false; - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/Deployer.php b/src/PHPCensor/Plugin/Deployer.php index a11482bf..07391a55 100644 --- a/src/PHPCensor/Plugin/Deployer.php +++ b/src/PHPCensor/Plugin/Deployer.php @@ -20,24 +20,20 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Deployer implements Plugin +class Deployer extends Plugin { protected $webhookUrl; protected $reason; protected $updateOnly; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->reason = 'PHP Censor Build #%BUILD% - %COMMIT_MESSAGE%'; + parent::__construct($phpci, $build, $options); + $this->reason = 'PHP Censor Build #%BUILD% - %COMMIT_MESSAGE%'; if (isset($options['webhook_url'])) { $this->webhookUrl = $options['webhook_url']; } @@ -45,7 +41,7 @@ class Deployer implements Plugin if (isset($options['reason'])) { $this->reason = $options['reason']; } - + $this->updateOnly = isset($options['update_only']) ? (bool) $options['update_only'] : true; } diff --git a/src/PHPCensor/Plugin/Email.php b/src/PHPCensor/Plugin/Email.php index ae535b80..b13e2116 100644 --- a/src/PHPCensor/Plugin/Email.php +++ b/src/PHPCensor/Plugin/Email.php @@ -26,38 +26,8 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Email implements Plugin +class Email extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - - /** - * @var array - */ - protected $options; - - /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - */ - public function __construct(Builder $phpci, Build $build, array $options = []) - { - $this->phpci = $phpci; - $this->build = $build; - $this->options = $options; - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - /** * Send a notification mail. * diff --git a/src/PHPCensor/Plugin/Env.php b/src/PHPCensor/Plugin/Env.php index 1b8771ad..b623419c 100644 --- a/src/PHPCensor/Plugin/Env.php +++ b/src/PHPCensor/Plugin/Env.php @@ -20,34 +20,17 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Env implements Plugin +class Env extends Plugin { - protected $phpci; - protected $build; protected $env_vars; - /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - */ - public function __construct(Builder $phpci, Build $build, array $options = []) - { - $this->phpci = $phpci; - $this->build = $build; - $this->env_vars = $options; - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - /** * Adds the specified environment variables to the builder environment */ public function execute() { $success = true; - foreach ($this->env_vars as $key => $value) { + foreach ($this->options as $key => $value) { if (is_numeric($key)) { // This allows the developer to specify env vars like " - FOO=bar" or " - FOO: bar" $env_var = is_array($value)? key($value).'='.current($value): $value; diff --git a/src/PHPCensor/Plugin/FlowdockNotify.php b/src/PHPCensor/Plugin/FlowdockNotify.php index 44faca51..98c365e2 100644 --- a/src/PHPCensor/Plugin/FlowdockNotify.php +++ b/src/PHPCensor/Plugin/FlowdockNotify.php @@ -20,30 +20,28 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class FlowdockNotify implements Plugin +class FlowdockNotify extends Plugin { - private $api_key; - private $email; + protected $api_key; + protected $email; + protected $message; + const MESSAGE_DEFAULT = 'Build %BUILD% has finished for commit %SHORT_COMMIT% (%COMMIT_EMAIL%)> on branch %BRANCH%'; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - * @throws \Exception + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + if (!is_array($options) || !isset($options['api_key'])) { throw new \Exception('Please define the api_key for Flowdock Notify plugin!'); } $this->api_key = trim($options['api_key']); $this->message = isset($options['message']) ? $options['message'] : self::MESSAGE_DEFAULT; - $this->email = isset($options['email']) ? $options['email'] : 'PHP Censor'; + $this->email = isset($options['email']) ? $options['email'] : 'PHP Censor'; } /** diff --git a/src/PHPCensor/Plugin/Git.php b/src/PHPCensor/Plugin/Git.php index 552a7d5e..848d8861 100644 --- a/src/PHPCensor/Plugin/Git.php +++ b/src/PHPCensor/Plugin/Git.php @@ -20,27 +20,10 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Git implements Plugin +class Git extends Plugin { - protected $phpci; - protected $build; protected $actions = []; - /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - */ - public function __construct(Builder $phpci, Build $build, array $options = []) - { - $this->phpci = $phpci; - $this->build = $build; - $this->actions = $options; - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - /** * Run the Git plugin. * @return bool diff --git a/src/PHPCensor/Plugin/Grunt.php b/src/PHPCensor/Plugin/Grunt.php index 3a4f9762..f7e49a85 100644 --- a/src/PHPCensor/Plugin/Grunt.php +++ b/src/PHPCensor/Plugin/Grunt.php @@ -19,36 +19,25 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Grunt implements Plugin +class Grunt extends Plugin { protected $directory; protected $task; protected $preferDist; - protected $phpci; - protected $build; protected $grunt; protected $gruntfile; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $path = $phpci->buildPath; - $this->build = $build; - $this->phpci = $phpci; + parent::__construct($phpci, $build, $options); + + $path = $this->phpci->buildPath; $this->directory = $path; - $this->task = null; - $this->grunt = $this->phpci->findBinary('grunt'); + $this->task = null; + $this->grunt = $this->phpci->findBinary('grunt'); $this->gruntfile = 'Gruntfile.js'; // Handle options: @@ -67,8 +56,6 @@ class Grunt implements Plugin if (isset($options['gruntfile'])) { $this->gruntfile = $options['gruntfile']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/Gulp.php b/src/PHPCensor/Plugin/Gulp.php index 17e2319e..2ea6665b 100644 --- a/src/PHPCensor/Plugin/Gulp.php +++ b/src/PHPCensor/Plugin/Gulp.php @@ -19,37 +19,26 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Gulp implements Plugin +class Gulp extends Plugin { protected $directory; protected $task; protected $preferDist; - protected $phpci; - protected $build; protected $gulp; protected $gulpfile; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $path = $phpci->buildPath; - $this->build = $build; - $this->phpci = $phpci; + parent::__construct($phpci, $build, $options); + + $path = $this->phpci->buildPath; $this->directory = $path; - $this->task = null; - $this->gulp = $this->phpci->findBinary('gulp'); - $this->gulpfile = 'gulpfile.js'; + $this->task = null; + $this->gulp = $this->phpci->findBinary('gulp'); + $this->gulpfile = 'gulpfile.js'; // Handle options: if (isset($options['directory'])) { @@ -67,8 +56,6 @@ class Gulp implements Plugin if (isset($options['gulpfile'])) { $this->gulpfile = $options['gulpfile']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/HipchatNotify.php b/src/PHPCensor/Plugin/HipchatNotify.php index bb0e1fc8..21196bf4 100644 --- a/src/PHPCensor/Plugin/HipchatNotify.php +++ b/src/PHPCensor/Plugin/HipchatNotify.php @@ -21,26 +21,25 @@ use HipChat\HipChat; * @package PHPCI * @subpackage Plugins */ -class HipchatNotify implements Plugin +class HipchatNotify extends Plugin { protected $authToken; protected $color; protected $notify; + protected $userAgent; + protected $cookie; + protected $message; + protected $room; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - * @throws \Exception + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); $this->userAgent = "PHP Censor/1.0"; - $this->cookie = "php-censor-cookie"; + $this->cookie = "php-censor-cookie"; if (is_array($options) && isset($options['authToken']) && isset($options['room'])) { $this->authToken = $options['authToken']; diff --git a/src/PHPCensor/Plugin/Irc.php b/src/PHPCensor/Plugin/Irc.php index 561864ac..4887793d 100644 --- a/src/PHPCensor/Plugin/Irc.php +++ b/src/PHPCensor/Plugin/Irc.php @@ -20,10 +20,8 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Irc implements Plugin +class Irc extends Plugin { - protected $phpci; - protected $build; protected $message; protected $server; protected $port; @@ -31,36 +29,23 @@ class Irc implements Plugin protected $nick; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + $this->message = $options['message']; - - $buildSettings = $phpci->getConfig('build_settings'); - + $buildSettings = $this->phpci->getConfig('build_settings'); if (isset($buildSettings['irc'])) { $irc = $buildSettings['irc']; $this->server = $irc['server']; - $this->port = $irc['port']; - $this->room = $irc['room']; - $this->nick = $irc['nick']; + $this->port = $irc['port']; + $this->room = $irc['room']; + $this->nick = $irc['nick']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/Lint.php b/src/PHPCensor/Plugin/Lint.php index 6f497bef..71a0dd17 100644 --- a/src/PHPCensor/Plugin/Lint.php +++ b/src/PHPCensor/Plugin/Lint.php @@ -12,6 +12,7 @@ namespace PHPCensor\Plugin; use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Plugin; /** * PHP Lint Plugin - Provides access to PHP lint functionality. @@ -19,32 +20,21 @@ use PHPCensor\Model\Build; * @package PHPCI * @subpackage Plugins */ -class Lint implements PHPCensor\Plugin +class Lint extends Plugin { protected $directories; protected $recursive = true; protected $ignore; - protected $phpci; - protected $build; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + $this->directories = ['']; - $this->ignore = $phpci->ignore; + $this->ignore = $this->phpci->ignore; if (!empty($options['directory'])) { $this->directories[] = $options['directory']; @@ -57,8 +47,6 @@ class Lint implements PHPCensor\Plugin if (array_key_exists('recursive', $options)) { $this->recursive = $options['recursive']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** @@ -67,7 +55,7 @@ class Lint implements PHPCensor\Plugin public function execute() { $this->phpci->quiet = true; - $success = true; + $success = true; $php = $this->phpci->findBinary('php'); diff --git a/src/PHPCensor/Plugin/Mysql.php b/src/PHPCensor/Plugin/Mysql.php index 722de944..130141c4 100644 --- a/src/PHPCensor/Plugin/Mysql.php +++ b/src/PHPCensor/Plugin/Mysql.php @@ -23,23 +23,8 @@ use b8\Database; * @package PHPCI * @subpackage Plugins */ -class Mysql implements Plugin +class Mysql extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - - /** - * @var array - */ - protected $queries = []; - /** * @var string */ @@ -56,16 +41,11 @@ class Mysql implements Plugin protected $pass; /** - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - - $this->queries = $options; + parent::__construct($phpci, $build, $options); $config = Database::getConnection('write')->getDetails(); @@ -73,7 +53,7 @@ class Mysql implements Plugin $this->user = $config['user']; $this->pass = $config['pass']; - $buildSettings = $phpci->getConfig('build_settings'); + $buildSettings = $this->phpci->getConfig('build_settings'); if (!isset($buildSettings['mysql'])) { return; @@ -90,8 +70,6 @@ class Mysql implements Plugin if (array_key_exists('pass', $buildSettings['mysql'])) { $this->pass = $buildSettings['mysql']['pass']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** @@ -104,7 +82,7 @@ class Mysql implements Plugin $opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]; $pdo = new PDO('mysql:host=' . $this->host, $this->user, $this->pass, $opts); - foreach ($this->queries as $query) { + foreach ($this->options as $query) { if (!is_array($query)) { // Simple query $pdo->query($this->phpci->interpolate($query)); diff --git a/src/PHPCensor/Plugin/PackageBuild.php b/src/PHPCensor/Plugin/PackageBuild.php index 65a1e333..5965d714 100644 --- a/src/PHPCensor/Plugin/PackageBuild.php +++ b/src/PHPCensor/Plugin/PackageBuild.php @@ -19,29 +19,23 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class PackageBuild implements Plugin +class PackageBuild extends Plugin { protected $directory; protected $filename; protected $format; - protected $phpci; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $path = $phpci->buildPath; - $this->build = $build; - $this->phpci = $phpci; + parent::__construct($phpci, $build, $options); + + $path = $this->phpci->buildPath; $this->directory = isset($options['directory']) ? $options['directory'] : $path; $this->filename = isset($options['filename']) ? $options['filename'] : 'build'; $this->format = isset($options['format']) ? $options['format'] : 'zip'; - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/Pdepend.php b/src/PHPCensor/Plugin/Pdepend.php index 952c0bf0..43480ab1 100644 --- a/src/PHPCensor/Plugin/Pdepend.php +++ b/src/PHPCensor/Plugin/Pdepend.php @@ -19,29 +19,30 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Pdepend implements Plugin +class Pdepend extends Plugin { protected $args; - /** - * @var \PHPCensor\Builder - */ - protected $phpci; + /** * @var string Directory which needs to be scanned */ protected $directory; + /** * @var string File where the summary.xml is stored */ protected $summary; + /** * @var string File where the chart.svg is stored */ protected $chart; + /** * @var string File where the pyramid.svg is stored */ protected $pyramid; + /** * @var string Location on the server where the files are stored. Preferably in the webroot for inclusion * in the readme.md of the repository @@ -49,25 +50,19 @@ class Pdepend implements Plugin protected $location; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); - $this->directory = isset($options['directory']) ? $options['directory'] : $phpci->buildPath; + $this->directory = isset($options['directory']) ? $options['directory'] : $this->phpci->buildPath; - $title = $phpci->getBuildProjectTitle(); + $title = $this->phpci->getBuildProjectTitle(); $this->summary = $title . '-summary.xml'; $this->pyramid = $title . '-pyramid.svg'; $this->chart = $title . '-chart.svg'; $this->location = $this->phpci->buildPath . '..' . DIRECTORY_SEPARATOR . 'pdepend'; - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/Pgsql.php b/src/PHPCensor/Plugin/Pgsql.php index 984c8768..f527f21d 100644 --- a/src/PHPCensor/Plugin/Pgsql.php +++ b/src/PHPCensor/Plugin/Pgsql.php @@ -20,23 +20,8 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Pgsql implements Plugin +class Pgsql extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - - /** - * @var array - */ - protected $queries = []; - /** * @var string */ @@ -53,17 +38,13 @@ class Pgsql implements Plugin protected $pass; /** - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->queries = $options; + parent::__construct($phpci, $build, $options); - $buildSettings = $phpci->getConfig('build_settings'); + $buildSettings = $this->phpci->getConfig('build_settings'); if (isset($buildSettings['pgsql'])) { $sql = $buildSettings['pgsql']; @@ -71,8 +52,6 @@ class Pgsql implements Plugin $this->user = $sql['user']; $this->pass = $sql['pass']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** @@ -85,7 +64,7 @@ class Pgsql implements Plugin $opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]; $pdo = new PDO('pgsql:host=' . $this->host, $this->user, $this->pass, $opts); - foreach ($this->queries as $query) { + foreach ($this->options as $query) { $pdo->query($this->phpci->interpolate($query)); } } catch (\Exception $ex) { diff --git a/src/PHPCensor/Plugin/Phar.php b/src/PHPCensor/Plugin/Phar.php index 1c1e4df6..4502c0a8 100644 --- a/src/PHPCensor/Plugin/Phar.php +++ b/src/PHPCensor/Plugin/Phar.php @@ -12,20 +12,8 @@ use PHPCensor\Plugin; /** * Phar Plugin */ -class Phar implements Plugin +class Phar extends Plugin { - /** - * PHPCI - * @var Builder - */ - protected $phpci; - - /** - * Build - * @var Build - */ - protected $build; - /** * Output Directory * @var string @@ -51,22 +39,11 @@ class Phar implements Plugin protected $stub; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - // Basic - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); // Directory? if (isset($options['directory'])) { @@ -87,28 +64,6 @@ class Phar implements Plugin if (isset($options['stub'])) { $this->setStub($options['stub']); } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - - /** - * Returns PHPCI - * - * @return Builder - */ - public function getPHPCI() - { - return $this->phpci; - } - - /** - * Returns Build - * - * @return Build - */ - public function getBuild() - { - return $this->build; } /** @@ -131,7 +86,7 @@ class Phar implements Plugin public function getDirectory() { if (!isset($this->directory)) { - $this->setDirectory($this->getPHPCI()->buildPath); + $this->setDirectory($this->phpci->buildPath); } return $this->directory; } @@ -217,7 +172,7 @@ class Phar implements Plugin $content = ''; $filename = $this->getStub(); if ($filename) { - $content = file_get_contents($this->getPHPCI()->buildPath . DIRECTORY_SEPARATOR . $this->getStub()); + $content = file_get_contents($this->phpci->buildPath . DIRECTORY_SEPARATOR . $this->getStub()); } return $content; } @@ -233,7 +188,7 @@ class Phar implements Plugin try { $file = $this->getDirectory() . DIRECTORY_SEPARATOR . $this->getFilename(); $phar = new PHPPhar($file, 0, $this->getFilename()); - $phar->buildFromDirectory($this->getPHPCI()->buildPath, $this->getRegExp()); + $phar->buildFromDirectory($this->phpci->buildPath, $this->getRegExp()); $stub = $this->getStubContent(); if ($stub) { @@ -242,8 +197,8 @@ class Phar implements Plugin $success = true; } catch (Exception $e) { - $this->getPHPCI()->log(Lang::get('phar_internal_error')); - $this->getPHPCI()->log($e->getMessage()); + $this->phpci->log(Lang::get('phar_internal_error')); + $this->phpci->log($e->getMessage()); } return $success; diff --git a/src/PHPCensor/Plugin/Phing.php b/src/PHPCensor/Plugin/Phing.php index 4db6606a..82ac794e 100644 --- a/src/PHPCensor/Plugin/Phing.php +++ b/src/PHPCensor/Plugin/Phing.php @@ -21,36 +21,29 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Phing implements Plugin +class Phing extends Plugin { - private $directory; - private $buildFile = 'build.xml'; - private $targets = ['build']; - private $properties = []; - private $propertyFile; - - protected $phpci; - protected $build; + protected $directory; + protected $buildFile = 'build.xml'; + protected $targets = ['build']; + protected $properties = []; + protected $propertyFile; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->setPhpci($phpci); - $this->build = $build; + parent::__construct($phpci, $build, $options); /* * Set working directory */ if (isset($options['directory'])) { - $directory = $phpci->buildPath . DIRECTORY_SEPARATOR . $options['directory']; + $directory = $this->phpci->buildPath . DIRECTORY_SEPARATOR . $options['directory']; } else { - $directory = $phpci->buildPath; + $directory = $this->phpci->buildPath; } $this->setDirectory($directory); @@ -97,24 +90,6 @@ class Phing implements Plugin return $this->phpci->executeCommand(implode(' ', $cmd), $this->directory, $this->targets); } - /** - * @return \PHPCensor\Builder - */ - public function getPhpci() - { - return $this->phpci; - } - - /** - * @param \PHPCensor\Builder $phpci - * - * @return $this - */ - public function setPhpci($phpci) - { - $this->phpci = $phpci; - } - /** * @return string */ diff --git a/src/PHPCensor/Plugin/PhpCodeSniffer.php b/src/PHPCensor/Plugin/PhpCodeSniffer.php index 3b9bfd43..2557ac7e 100644 --- a/src/PHPCensor/Plugin/PhpCodeSniffer.php +++ b/src/PHPCensor/Plugin/PhpCodeSniffer.php @@ -13,6 +13,8 @@ use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; use PHPCensor\Model\BuildError; +use PHPCensor\Plugin; +use PHPCensor\ZeroConfigPlugin; /** * PHP Code Sniffer Plugin - Allows PHP Code Sniffer testing. @@ -20,13 +22,8 @@ use PHPCensor\Model\BuildError; * @package PHPCI * @subpackage Plugins */ -class PhpCodeSniffer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin +class PhpCodeSniffer extends Plugin implements ZeroConfigPlugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - /** * @var array */ @@ -74,43 +71,25 @@ class PhpCodeSniffer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin protected $ignore; /** - * Check if this plugin can be executed. - * @param $stage - * @param Builder $builder - * @param Build $build - * @return bool - */ - public static function canExecute($stage, Builder $builder, Build $build) - { - if ($stage == 'test') { - return true; - } - - return false; - } - - /** - * @param \PHPCensor\Builder $phpci - * @param \PHPCensor\Model\Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->suffixes = ['php']; - $this->directory = $phpci->buildPath; - $this->standard = 'PSR2'; - $this->tab_width = ''; - $this->encoding = ''; - $this->path = ''; - $this->ignore = $this->phpci->ignore; + parent::__construct($phpci, $build, $options); + + $this->suffixes = ['php']; + $this->directory = $this->phpci->buildPath; + $this->standard = 'PSR2'; + $this->tab_width = ''; + $this->encoding = ''; + $this->path = ''; + $this->ignore = $this->phpci->ignore; $this->allowed_warnings = 0; - $this->allowed_errors = 0; + $this->allowed_errors = 0; if (isset($options['zero_config']) && $options['zero_config']) { $this->allowed_warnings = -1; - $this->allowed_errors = -1; + $this->allowed_errors = -1; } if (isset($options['suffixes'])) { @@ -124,23 +103,22 @@ class PhpCodeSniffer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin if (!empty($options['encoding'])) { $this->encoding = ' --encoding=' . $options['encoding']; } - - $this->setOptions($options); - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** - * Handle this plugin's options. - * @param $options + * Check if this plugin can be executed. + * @param $stage + * @param Builder $builder + * @param Build $build + * @return bool */ - protected function setOptions($options) + public static function canExecute($stage, Builder $builder, Build $build) { - foreach (['directory', 'standard', 'path', 'ignore', 'allowed_warnings', 'allowed_errors'] as $key) { - if (array_key_exists($key, $options)) { - $this->{$key} = $options[$key]; - } + if ($stage == 'test') { + return true; } + + return false; } /** diff --git a/src/PHPCensor/Plugin/PhpCpd.php b/src/PHPCensor/Plugin/PhpCpd.php index e075f6fb..3b77fa68 100644 --- a/src/PHPCensor/Plugin/PhpCpd.php +++ b/src/PHPCensor/Plugin/PhpCpd.php @@ -21,12 +21,10 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class PhpCpd implements Plugin +class PhpCpd extends Plugin { protected $directory; protected $args; - protected $phpci; - protected $build; /** * @var string, based on the assumption the root may not hold the code to be @@ -40,28 +38,22 @@ class PhpCpd implements Plugin protected $ignore; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); - $this->path = $phpci->buildPath; - $this->ignore = $phpci->ignore; + $this->path = $this->phpci->buildPath; + $this->ignore = $this->phpci->ignore; if (!empty($options['path'])) { - $this->path = $phpci->buildPath . $options['path']; + $this->path = $this->phpci->buildPath . $options['path']; } - + if (!empty($options['ignore'])) { $this->ignore = $options['ignore']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/PhpCsFixer.php b/src/PHPCensor/Plugin/PhpCsFixer.php index c61edcef..c317db34 100644 --- a/src/PHPCensor/Plugin/PhpCsFixer.php +++ b/src/PHPCensor/Plugin/PhpCsFixer.php @@ -19,45 +19,23 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class PhpCsFixer implements Plugin +class PhpCsFixer extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - protected $workingDir = ''; protected $level = ' --level=psr2'; protected $verbose = ''; protected $diff = ''; - protected $levels = array('psr0', 'psr1', 'psr2', 'symfony'); + protected $levels = ['psr0', 'psr1', 'psr2', 'symfony']; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); - $this->workingdir = $this->phpci->buildPath; + $this->workingDir = $this->phpci->buildPath; $this->buildArgs($options); - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** @@ -67,7 +45,7 @@ class PhpCsFixer implements Plugin public function execute() { $curdir = getcwd(); - chdir($this->workingdir); + chdir($this->workingDir); $phpcsfixer = $this->phpci->findBinary('php-cs-fixer'); @@ -98,7 +76,7 @@ class PhpCsFixer implements Plugin } if (isset($options['workingdir']) && $options['workingdir']) { - $this->workingdir = $this->phpci->buildPath . $options['workingdir']; + $this->workingDir = $this->phpci->buildPath . $options['workingdir']; } } diff --git a/src/PHPCensor/Plugin/PhpDocblockChecker.php b/src/PHPCensor/Plugin/PhpDocblockChecker.php index f575bdc7..b4711749 100644 --- a/src/PHPCensor/Plugin/PhpDocblockChecker.php +++ b/src/PHPCensor/Plugin/PhpDocblockChecker.php @@ -12,6 +12,8 @@ namespace PHPCensor\Plugin; use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Plugin; +use PHPCensor\ZeroConfigPlugin; /** * PHP Docblock Checker Plugin - Checks your PHP files for appropriate uses of Docblocks @@ -19,18 +21,8 @@ use PHPCensor\Model\Build; * @package PHPCI * @subpackage Plugins */ -class PhpDocblockChecker implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin +class PhpDocblockChecker extends Plugin implements ZeroConfigPlugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - /** * @var string Based on the assumption the root may not hold the code to be * tested, extends the build path. @@ -44,34 +36,16 @@ class PhpDocblockChecker implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin protected $skipClasses = false; protected $skipMethods = false; + protected $allowed_warnings; /** - * Check if this plugin can be executed. - * @param $stage - * @param Builder $builder - * @param Build $build - * @return bool - */ - public static function canExecute($stage, Builder $builder, Build $build) - { - if ($stage == 'test') { - return true; - } - - return false; - } - - /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->ignore = $phpci->ignore; + parent::__construct($phpci, $build, $options); + + $this->ignore = $this->phpci->ignore; $this->path = ''; $this->allowed_warnings = 0; @@ -94,8 +68,22 @@ class PhpDocblockChecker implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin if (array_key_exists('allowed_warnings', $options)) { $this->allowed_warnings = (int)$options['allowed_warnings']; } + } - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); + /** + * Check if this plugin can be executed. + * @param $stage + * @param Builder $builder + * @param Build $build + * @return bool + */ + public static function canExecute($stage, Builder $builder, Build $build) + { + if ($stage == 'test') { + return true; + } + + return false; } /** diff --git a/src/PHPCensor/Plugin/PhpLoc.php b/src/PHPCensor/Plugin/PhpLoc.php index 400c993c..8a1dcd1d 100644 --- a/src/PHPCensor/Plugin/PhpLoc.php +++ b/src/PHPCensor/Plugin/PhpLoc.php @@ -12,6 +12,8 @@ namespace PHPCensor\Plugin; use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Plugin; +use PHPCensor\ZeroConfigPlugin; /** * PHP Loc - Allows PHP Copy / Lines of Code testing. @@ -19,16 +21,12 @@ use PHPCensor\Model\Build; * @package PHPCI * @subpackage Plugins */ -class PhpLoc implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin +class PhpLoc extends Plugin implements ZeroConfigPlugin { /** * @var string */ protected $directory; - /** - * @var \PHPCensor\Builder - */ - protected $phpci; /** * Check if this plugin can be executed. @@ -47,22 +45,17 @@ class PhpLoc implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin } /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->directory = $phpci->buildPath; + parent::__construct($phpci, $build, $options); + + $this->directory = $this->phpci->buildPath; if (isset($options['directory'])) { $this->directory .= $options['directory']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/PhpMessDetector.php b/src/PHPCensor/Plugin/PhpMessDetector.php index ecbc7d36..11f55ff3 100644 --- a/src/PHPCensor/Plugin/PhpMessDetector.php +++ b/src/PHPCensor/Plugin/PhpMessDetector.php @@ -12,6 +12,8 @@ namespace PHPCensor\Plugin; use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Plugin; +use PHPCensor\ZeroConfigPlugin; /** * PHP Mess Detector Plugin - Allows PHP Mess Detector testing. @@ -19,18 +21,8 @@ use PHPCensor\Model\Build; * @package PHPCI * @subpackage Plugins */ -class PhpMessDetector implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin +class PhpMessDetector extends Plugin implements ZeroConfigPlugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - /** * @var array */ @@ -54,43 +46,19 @@ class PhpMessDetector implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin * @var array */ protected $rules; + protected $allowed_warnings; /** - * Check if this plugin can be executed. - * @param $stage - * @param Builder $builder - * @param Build $build - * @return bool - */ - public static function canExecute($stage, Builder $builder, Build $build) - { - if ($stage == 'test') { - return true; - } - - return false; - } - - /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->suffixes = ['php']; - $this->ignore = $phpci->ignore; - $this->path = ''; - $this->rules = ['codesize', 'unusedcode', 'naming']; + parent::__construct($phpci, $build, $options); + + $this->suffixes = ['php']; + $this->ignore = $this->phpci->ignore; + $this->path = ''; + $this->rules = ['codesize', 'unusedcode', 'naming']; $this->allowed_warnings = 0; if (isset($options['zero_config']) && $options['zero_config']) { @@ -108,8 +76,22 @@ class PhpMessDetector implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin foreach (['rules', 'ignore', 'suffixes'] as $key) { $this->overrideSetting($options, $key); } + } - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); + /** + * Check if this plugin can be executed. + * @param $stage + * @param Builder $builder + * @param Build $build + * @return bool + */ + public static function canExecute($stage, Builder $builder, Build $build) + { + if ($stage == 'test') { + return true; + } + + return false; } /** diff --git a/src/PHPCensor/Plugin/PhpParallelLint.php b/src/PHPCensor/Plugin/PhpParallelLint.php index 92fd9dfd..f495e0cd 100644 --- a/src/PHPCensor/Plugin/PhpParallelLint.php +++ b/src/PHPCensor/Plugin/PhpParallelLint.php @@ -19,18 +19,8 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class PhpParallelLint implements Plugin +class PhpParallelLint extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - /** * @var string */ @@ -42,33 +32,22 @@ class PhpParallelLint implements Plugin protected $ignore; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->directory = $phpci->buildPath; + parent::__construct($phpci, $build, $options); + + $this->directory = $this->phpci->buildPath; $this->ignore = $this->phpci->ignore; if (isset($options['directory'])) { - $this->directory = $phpci->buildPath.$options['directory']; + $this->directory = $this->phpci->buildPath.$options['directory']; } if (isset($options['ignore'])) { $this->ignore = $options['ignore']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/PhpSpec.php b/src/PHPCensor/Plugin/PhpSpec.php index e2cf2696..0f6d6a12 100644 --- a/src/PHPCensor/Plugin/PhpSpec.php +++ b/src/PHPCensor/Plugin/PhpSpec.php @@ -12,6 +12,7 @@ namespace PHPCensor\Plugin; use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Plugin; /** * PHP Spec Plugin - Allows PHP Spec testing. @@ -19,38 +20,8 @@ use PHPCensor\Model\Build; * @package PHPCI * @subpackage Plugins */ -class PhpSpec implements PHPCensor\Plugin +class PhpSpec extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - - /** - * @var array - */ - protected $options; - - /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - */ - public function __construct(Builder $phpci, Build $build, array $options = []) - { - $this->phpci = $phpci; - $this->build = $build; - $this->options = $options; - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - /** * Runs PHP Spec tests. */ diff --git a/src/PHPCensor/Plugin/PhpTalLint.php b/src/PHPCensor/Plugin/PhpTalLint.php index 85a1247c..3a40f9fa 100644 --- a/src/PHPCensor/Plugin/PhpTalLint.php +++ b/src/PHPCensor/Plugin/PhpTalLint.php @@ -12,6 +12,7 @@ namespace PHPCensor\Plugin; use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Plugin; /** * PHPTAL Lint Plugin - Provides access to PHPTAL lint functionality. @@ -19,23 +20,13 @@ use PHPCensor\Model\Build; * @package PHPCI * @subpackage Plugins */ -class PhpTalLint implements PHPCensor\Plugin +class PhpTalLint extends Plugin { protected $directories; protected $recursive = true; protected $suffixes; protected $ignore; - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - /** * @var string The path to a file contain custom phptal_tales_ functions */ @@ -57,19 +48,15 @@ class PhpTalLint implements PHPCensor\Plugin protected $failedPaths = []; /** - * Standard Constructor - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + $this->directories = ['']; $this->suffixes = ['zpt']; - $this->ignore = $phpci->ignore; + $this->ignore = $this->phpci->ignore; $this->allowed_warnings = 0; $this->allowed_errors = 0; @@ -81,23 +68,6 @@ class PhpTalLint implements PHPCensor\Plugin if (isset($options['suffixes'])) { $this->suffixes = (array)$options['suffixes']; } - - $this->setOptions($options); - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - - /** - * Handle this plugin's options. - * @param $options - */ - protected function setOptions($options) - { - foreach (['directories', 'tales', 'allowed_warnings', 'allowed_errors'] as $key) { - if (array_key_exists($key, $options)) { - $this->{$key} = $options[$key]; - } - } } /** diff --git a/src/PHPCensor/Plugin/PhpUnit.php b/src/PHPCensor/Plugin/PhpUnit.php index 666ae0ff..5c8082e7 100644 --- a/src/PHPCensor/Plugin/PhpUnit.php +++ b/src/PHPCensor/Plugin/PhpUnit.php @@ -17,6 +17,8 @@ use PHPCensor\Model\Build; use PHPCensor\Model\BuildError; use PHPCensor\Plugin\Option\PhpUnitOptions; use PHPCensor\Plugin\Util\PhpUnitResult; +use PHPCensor\Plugin; +use PHPCensor\ZeroConfigPlugin; /** * PHP Unit Plugin - A rewrite of the original PHP Unit plugin @@ -26,11 +28,8 @@ use PHPCensor\Plugin\Util\PhpUnitResult; * @package PHPCI * @subpackage Plugins */ -class PhpUnit implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin +class PhpUnit extends Plugin implements ZeroConfigPlugin { - protected $phpci; - protected $build; - /** @var string[] Raw options from the PHPCI config file */ protected $options = array(); @@ -48,8 +47,8 @@ class PhpUnit implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin */ public function __construct(Builder $phpci, Build $build, array $options = array()) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); + $this->options = new PhpUnitOptions($options); } @@ -168,7 +167,6 @@ class PhpUnit implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin */ protected function processResults($jsonFile) { - var_dump('fuck!'); if (file_exists($jsonFile)) { $parser = new PhpUnitResult($jsonFile, $this->build->getBuildPath()); diff --git a/src/PHPCensor/Plugin/Shell.php b/src/PHPCensor/Plugin/Shell.php index b530641b..b78d4578 100644 --- a/src/PHPCensor/Plugin/Shell.php +++ b/src/PHPCensor/Plugin/Shell.php @@ -19,18 +19,8 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Shell implements Plugin +class Shell extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - protected $args; /** @@ -39,21 +29,11 @@ class Shell implements Plugin protected $commands = []; /** - * Standard Constructor - * - * $options['directory'] Output Directory. Default: %BUILDPATH% - * $options['filename'] Phar Filename. Default: build.phar - * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ - * $options['stub'] Stub Content. No Default Value - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); if (isset($options['command'])) { // Keeping this for backwards compatibility, new projects should use interpolation vars. @@ -72,8 +52,6 @@ class Shell implements Plugin if (is_array($options)) { $this->commands = $options; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/SlackNotify.php b/src/PHPCensor/Plugin/SlackNotify.php index a33739c0..d1408d77 100644 --- a/src/PHPCensor/Plugin/SlackNotify.php +++ b/src/PHPCensor/Plugin/SlackNotify.php @@ -21,7 +21,7 @@ use Maknz\Slack\AttachmentField; * @package PHPCI * @subpackage Plugins */ -class SlackNotify implements Plugin +class SlackNotify extends Plugin { private $webHook; private $room; @@ -31,16 +31,11 @@ class SlackNotify implements Plugin private $show_status; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options - * @throws \Exception + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); if (is_array($options) && isset($options['webhook_url'])) { $this->webHook = trim($options['webhook_url']); diff --git a/src/PHPCensor/Plugin/Sqlite.php b/src/PHPCensor/Plugin/Sqlite.php index 7d2eae2d..6de94530 100644 --- a/src/PHPCensor/Plugin/Sqlite.php +++ b/src/PHPCensor/Plugin/Sqlite.php @@ -20,18 +20,8 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Sqlite implements Plugin +class Sqlite extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - /** * @var array */ @@ -43,23 +33,18 @@ class Sqlite implements Plugin protected $path; /** - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; - $this->queries = $options; - $buildSettings = $phpci->getConfig('build_settings'); + parent::__construct($phpci, $build, $options); + + $buildSettings = $this->phpci->getConfig('build_settings'); if (isset($buildSettings['sqlite'])) { - $sql = $buildSettings['sqlite']; + $sql = $buildSettings['sqlite']; $this->path = $sql['path']; } - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); } /** diff --git a/src/PHPCensor/Plugin/TechnicalDebt.php b/src/PHPCensor/Plugin/TechnicalDebt.php index c1369cc0..de1d93fb 100755 --- a/src/PHPCensor/Plugin/TechnicalDebt.php +++ b/src/PHPCensor/Plugin/TechnicalDebt.php @@ -12,6 +12,8 @@ namespace PHPCensor\Plugin; use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Plugin; +use PHPCensor\ZeroConfigPlugin; /** * Technical Debt Plugin - Checks for existence of "TODO", "FIXME", etc. @@ -20,13 +22,8 @@ use PHPCensor\Model\Build; * @package PHPCI * @subpackage Plugins */ -class TechnicalDebt implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin +class TechnicalDebt extends Plugin implements ZeroConfigPlugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - /** * @var array */ @@ -58,6 +55,28 @@ class TechnicalDebt implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin */ protected $searches; + /** + * {@inheritdoc} + */ + public function __construct(Builder $phpci, Build $build, array $options = []) + { + parent::__construct($phpci, $build, $options); + + $this->suffixes = ['php']; + $this->directory = $this->phpci->buildPath; + $this->path = ''; + $this->ignore = $this->phpci->ignore; + $this->allowed_errors = 0; + $this->searches = ['TODO', 'FIXME', 'TO DO', 'FIX ME']; + + if (isset($options['searches']) && is_array($options['searches'])) { + $this->searches = $options['searches']; + } + + if (isset($options['zero_config']) && $options['zero_config']) { + $this->allowed_errors = -1; + } + } /** * Check if this plugin can be executed. @@ -76,48 +95,6 @@ class TechnicalDebt implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin return false; } - /** - * @param \PHPCensor\Builder $phpci - * @param \PHPCensor\Model\Build $build - * @param array $options - */ - public function __construct(Builder $phpci, Build $build, array $options = []) - { - $this->phpci = $phpci; - $this->build = $build; - $this->suffixes = ['php']; - $this->directory = $phpci->buildPath; - $this->path = ''; - $this->ignore = $this->phpci->ignore; - $this->allowed_errors = 0; - $this->searches = ['TODO', 'FIXME', 'TO DO', 'FIX ME']; - - if (isset($options['searches']) && is_array($options['searches'])) { - $this->searches = $options['searches']; - } - - if (isset($options['zero_config']) && $options['zero_config']) { - $this->allowed_errors = -1; - } - - $this->setOptions($options); - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - - /** - * Handle this plugin's options. - * @param $options - */ - protected function setOptions($options) - { - foreach (['directory', 'path', 'ignore', 'allowed_errors'] as $key) { - if (array_key_exists($key, $options)) { - $this->{$key} = $options[$key]; - } - } - } - /** * Runs the plugin */ diff --git a/src/PHPCensor/Plugin/Util/Executor.php b/src/PHPCensor/Plugin/Util/Executor.php index 884ba313..eeb9f062 100644 --- a/src/PHPCensor/Plugin/Util/Executor.php +++ b/src/PHPCensor/Plugin/Util/Executor.php @@ -8,6 +8,7 @@ use PHPCensor\Helper\Lang; use PHPCensor\Logging\BuildLogger; use PHPCensor\Model\Build; use PHPCensor\Store\BuildStore; +use PHPCensor\Builder; /** * Plugin Executor - Runs the configured plugins for a given build stage. @@ -15,6 +16,16 @@ use PHPCensor\Store\BuildStore; */ class Executor { + /** + * @var \PHPCI\Builder + */ + protected $phpci; + + /** + * @var \PHPCI\Model\Build + */ + protected $build; + /** * @var BuildLogger */ @@ -31,14 +42,16 @@ class Executor protected $store; /** - * @param Factory $pluginFactory + * @param Builder $phpci + * @param Build $build * @param BuildLogger $logger */ - public function __construct(Factory $pluginFactory, BuildLogger $logger, BuildStore $store = null) + public function __construct(Builder $phpci, Build $build, BuildLogger $logger) { - $this->pluginFactory = $pluginFactory; + $this->phpci = $phpci; + $this->build = $build; $this->logger = $logger; - $this->store = $store ?: StoreFactory::getStore('Build'); + $this->store = StoreFactory::getStore('Build'); } /** @@ -78,7 +91,7 @@ class Executor protected function getBranchSpecificPlugins(&$config, $stage, $pluginsToExecute) { /** @var \PHPCensor\Model\Build $build */ - $build = $this->pluginFactory->getResourceFor('PHPCensor\Model\Build'); + $build = $this->build; $branch = $build->getBranch(); // If we don't have any branch-specific plugins: @@ -190,10 +203,7 @@ class Executor } try { - // Build and run it - $obj = $this->pluginFactory->buildPlugin($class, $options); - - return $obj->execute(); + return (new $class($this->phpci, $this->build, $options))->execute(); } catch (\Exception $ex) { $this->logger->logFailure(Lang::get('exception') . $ex->getMessage(), $ex); @@ -235,7 +245,7 @@ class Executor private function getBuildSummary() { /** @var Build $build */ - $build = $this->pluginFactory->getResourceFor('PHPCensor\Model\Build'); + $build = $this->build; $metas = $this->store->getMeta('plugin-summary', $build->getProjectId(), $build->getId()); return isset($metas[0]['meta_value']) ? $metas[0]['meta_value'] : []; } @@ -248,7 +258,7 @@ class Executor private function setBuildSummary($summary) { /** @var Build $build */ - $build = $this->pluginFactory->getResourceFor('PHPCensor\Model\Build'); + $build = $this->build; $this->store->setMeta($build->getProjectId(), $build->getId(), 'plugin-summary', json_encode($summary)); } } diff --git a/src/PHPCensor/Plugin/Util/Factory.php b/src/PHPCensor/Plugin/Util/Factory.php deleted file mode 100644 index 7f929dbd..00000000 --- a/src/PHPCensor/Plugin/Util/Factory.php +++ /dev/null @@ -1,216 +0,0 @@ -container = $container; - } else { - $this->container = new Container(); - } - } - - /** - * Trys to get a function from the file path specified. If the - * file returns a function then $this will be passed to it. - * This enables the config file to call any public methods. - * - * @param $configPath - * @return bool - true if the function exists else false. - */ - public function addConfigFromFile($configPath) - { - // The file is expected to return a function which can - // act on the pluginFactory to register any resources needed. - if (file_exists($configPath)) { - $configFunction = require($configPath); - if (is_callable($configFunction)) { - $configFunction($this); - return true; - } - } - return false; - } - - /** - * Get most recently used factory options. - * @return mixed - */ - public function getLastOptions() - { - return $this->currentPluginOptions; - } - - /** - * Builds an instance of plugin of class $className. $options will - * be passed along with any resources registered with the factory. - * - * @param $className - * @param array|null $options - * @throws \InvalidArgumentException if $className doesn't represent a valid plugin - * @return \PHPCensor\Plugin - */ - public function buildPlugin($className, $options = []) - { - $this->currentPluginOptions = $options; - - $reflectedPlugin = new \ReflectionClass($className); - - if (!$reflectedPlugin->implementsInterface(self::INTERFACE_PLUGIN)) { - throw new \InvalidArgumentException( - "Requested class must implement " . self:: INTERFACE_PLUGIN - ); - } - - $constructor = $reflectedPlugin->getConstructor(); - - if ($constructor) { - $argsToUse = []; - foreach ($constructor->getParameters() as $param) { - if ('options' === $param->getName()) { - $argsToUse[] = $options; - } else { - $argsToUse = $this->addArgFromParam($argsToUse, $param); - } - } - $plugin = $reflectedPlugin->newInstanceArgs($argsToUse); - } else { - $plugin = $reflectedPlugin->newInstance(); - } - - return $plugin; - } - - /** - * @param callable $loader - * @param string|null $name - * @param string|null $type - * @throws \InvalidArgumentException - * @internal param mixed $resource - */ - public function registerResource( - $loader, - $name = null, - $type = null - ) { - if ($name === null && $type === null) { - throw new \InvalidArgumentException( - "Type or Name must be specified" - ); - } - - if (!($loader instanceof \Closure)) { - throw new \InvalidArgumentException( - '$loader is expected to be a function' - ); - } - - $resourceID = $this->getInternalID($type, $name); - - $this->container[$resourceID] = $loader; - } - - /** - * Get an internal resource ID. - * @param null $type - * @param null $name - * @return string - */ - private function getInternalID($type = null, $name = null) - { - $type = $type ? : ""; - $name = $name ? : ""; - return $type . "-" . $name; - } - - /** - * @param string $type - * @param string $name - * @return mixed - */ - public function getResourceFor($type = null, $name = null) - { - $fullId = $this->getInternalID($type, $name); - if (isset($this->container[$fullId])) { - return $this->container[$fullId]; - } - - $typeOnlyID = $this->getInternalID($type, null); - if (isset($this->container[$typeOnlyID])) { - return $this->container[$typeOnlyID]; - } - - $nameOnlyID = $this->getInternalID(null, $name); - if (isset($this->container[$nameOnlyID])) { - return $this->container[$nameOnlyID]; - } - - return null; - } - - /** - * @param \ReflectionParameter $param - * @return null|string - */ - private function getParamType(\ReflectionParameter $param) - { - $class = $param->getClass(); - if ($class) { - return $class->getName(); - } elseif ($param->isArray()) { - return self::TYPE_ARRAY; - } elseif (is_callable($param)) { - return self::TYPE_CALLABLE; - } else { - return null; - } - } - - /** - * @param $existingArgs - * @param \ReflectionParameter $param - * @return array - * @throws \DomainException - */ - private function addArgFromParam($existingArgs, \ReflectionParameter $param) - { - $name = $param->getName(); - $type = $this->getParamType($param); - $arg = $this->getResourceFor($type, $name); - - if ($arg !== null) { - $existingArgs[] = $arg; - } elseif ($arg === null && $param->isOptional()) { - $existingArgs[] = $param->getDefaultValue(); - } else { - throw new \DomainException( - "Unsatisfied dependency: " . $param->getName() - ); - } - - return $existingArgs; - } -} diff --git a/src/PHPCensor/Plugin/Wipe.php b/src/PHPCensor/Plugin/Wipe.php index d133fbbb..014302ed 100644 --- a/src/PHPCensor/Plugin/Wipe.php +++ b/src/PHPCensor/Plugin/Wipe.php @@ -19,34 +19,19 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class Wipe implements Plugin +class Wipe extends Plugin { - /** - * @var \PHPCensor\Builder - */ - protected $phpci; - - /** - * @var \PHPCensor\Model\Build - */ - protected $build; - protected $directory; /** - * Set up the plugin, configure options, etc. - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $path = $phpci->buildPath; - $this->phpci = $phpci; - $this->build = $build; - $this->directory = isset($options['directory']) ? $this->phpci->interpolate($options['directory']) : $path; - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); + parent::__construct($phpci, $build, $options); + + $path = $this->phpci->buildPath; + $this->directory = isset($options['directory']) ? $this->phpci->interpolate($options['directory']) : $path; } /** diff --git a/src/PHPCensor/Plugin/Xmpp.php b/src/PHPCensor/Plugin/Xmpp.php index a17b5005..02d173c8 100644 --- a/src/PHPCensor/Plugin/Xmpp.php +++ b/src/PHPCensor/Plugin/Xmpp.php @@ -19,11 +19,9 @@ use PHPCensor\Plugin; * @package PHPCI * @subpackage Plugins */ -class XMPP implements Plugin +class XMPP extends Plugin { protected $directory; - protected $phpci; - protected $build; /** * @var string, username of sender account xmpp @@ -61,15 +59,11 @@ class XMPP implements Plugin protected $date_format; /** - * - * @param Builder $phpci - * @param Build $build - * @param array $options + * {@inheritdoc} */ public function __construct(Builder $phpci, Build $build, array $options = []) { - $this->phpci = $phpci; - $this->build = $build; + parent::__construct($phpci, $build, $options); $this->username = ''; $this->password = ''; @@ -89,24 +83,6 @@ class XMPP implements Plugin $this->recipients = $options['recipients']; } } - - $this->setOptions($options); - - $this->phpci->logDebug('Plugin options: ' . json_encode($options)); - } - - /** - * Set options configuration for plugin - * - * @param array $options - */ - protected function setOptions($options) - { - foreach (['username', 'password', 'alias', 'tls', 'server', 'date_format'] as $key) { - if (array_key_exists($key, $options)) { - $this->{$key} = $options[$key]; - } - } } /**