Browse Source

refactoring

1.0
Vladimir Grigor 10 years ago
parent
commit
eaccc0dab8
  1. 180
      Mage/Config.php
  2. 13
      Mage/Config/ConfigNotFoundException.php
  3. 13
      Mage/Config/OptionalConfigNotFoundException.php
  4. 13
      Mage/Config/RequiredConfigNotFoundException.php
  5. 19
      Mage/Console.php
  6. 10
      Mage/Task/AbstractTask.php

180
Mage/Config.php

@ -10,6 +10,10 @@
namespace Mage; namespace Mage;
use Mage\Config\ConfigNotFoundException;
use Mage\Config\RequiredConfigNotFoundException;
use Mage\Console;
use Mage\Yaml\Exception\RuntimeException;
use Mage\Yaml\Yaml; use Mage\Yaml\Yaml;
use Exception; use Exception;
@ -51,23 +55,20 @@ class Config
private $hostConfig = array(); private $hostConfig = array();
/** /**
* The Relase ID * The Release ID
* @var integer * @var integer
*/ */
private $releaseId = null; private $releaseId = null;
/** /**
* Magallanes Global and Environment configuration * Magallanes Global and Environment configuration
* @var array
*/ */
private $config = array( private $generalConfig = array();
'general' => array(), private $environmentConfig = array();
'environment' => array(),
);
/** /**
* Parse the Command Line options * Parse the Command Line options
* @return boolean * @param $arguments
*/ */
protected function parse($arguments) protected function parse($arguments)
{ {
@ -95,45 +96,115 @@ class Config
} }
/** /**
* Loads the General Configuration * Initializes the General Configuration
*/ */
protected function loadGeneral() protected function initGeneral()
{ {
if (file_exists(getcwd() . '/.mage/config/general.yml')) { try {
$this->config['general'] = Yaml::parse(file_get_contents(getcwd() . '/.mage/config/general.yml')); $this->generalConfig = $this->loadGeneral(getcwd() . '/.mage/config/general.yml');
} catch (ConfigNotFoundException $e) {
// normal situation
} }
} }
/**
* Load general config from the given file
*
* @param $filePath
*
* @return array
* @throws Config\ConfigNotFoundException
*/
protected function loadGeneral($filePath){
return $this->parseConfigFile($filePath);
}
/**
* Obviously this method is a HACK. It was refactored from ::loadEnvironment()
* TODO Please put it to SCM functionality.
*
* @param array $settings
*
* @return array
*/
protected function updateSCMTempDir(array $settings)
{
// Create temporal directory for clone
if (isset($settings['deployment']['source']) && is_array($settings['deployment']['source'])) {
if (trim($settings['deployment']['source']['temporal']) == '') {
$settings['deployment']['source']['temporal'] = sys_get_temp_dir();
}
$settings['deployment']['source']['temporal']
= rtrim($settings['deployment']['source']['temporal'], '/') . '/' . md5(microtime()) . '/';
}
return $settings;
}
/** /**
* Loads the Environment configuration * Loads the Environment configuration
* @param $filePath string
*
* @throws Exception
* @return boolean
*/
protected function loadEnvironment($filePath)
{
$settings = $this->parseConfigFile($filePath);
//this is a HACK in the old code - no time to remove it now, so I factored it out in own method
$settings = $this->updateSCMTempDir($settings);
return $settings;
}
/**
* Initializes the Environment configuration
* *
* @throws Exception * @throws Exception
* @return boolean * @return boolean
*/ */
protected function loadEnvironment() protected function initEnvironment()
{ {
$environment = $this->getEnvironment(); $environment = $this->getEnvironment();
if (($environment != false) && file_exists(getcwd() . '/.mage/config/environment/' . $environment . '.yml')) {
$this->config['environment'] = Yaml::parse(file_get_contents(getcwd() . '/.mage/config/environment/' . $environment . '.yml'));
// Create temporal directory for clone $configFilePath = getcwd() . '/.mage/config/environment/' . $environment . '.yml';
if (isset($this->config['environment']['deployment']['source']) && is_array($this->config['environment']['deployment']['source'])) {
if (trim($this->config['environment']['deployment']['source']['temporal']) == '') { $parameters = $this->getParameters();
$this->config['environment']['deployment']['source']['temporal'] = '/tmp';
if (empty($environment) && (!empty($parameters) || !$this->isRunInSpecialMode($parameters))) {
throw new RuntimeException('Environment is not set');
} }
$newTemporal = rtrim($this->config['environment']['deployment']['source']['temporal'], '/')
. '/' . md5(microtime()) . '/'; try {
$this->config['environment']['deployment']['source']['temporal'] = $newTemporal; $this->environmentConfig = $this->loadEnvironment($configFilePath);
} catch (ConfigNotFoundException $e) {
throw new RequiredConfigNotFoundException("Not found required config $configFilePath for environment $environment", 0 , $e);
} }
return true;
} else if (($environment != '') && !file_exists(getcwd() . '/.mage/config/environment/' . $environment . '.yml')) {
throw new Exception('Environment does not exists.');
} }
return false; /**
*
* @param array $parameters
* @return boolean
*/
protected function isRunInSpecialMode(array $parameters)
{
if(empty($parameters))
return true;
foreach($parameters as $parameter)
{
if(isset(Console::$paramsNotRequiringEnvironment[$parameter]))
{
return true;
}
} }
return false;
}
/** /**
* Load the Configuration and parses the Arguments * Load the Configuration and parses the Arguments
* *
@ -142,8 +213,8 @@ class Config
public function load($arguments) public function load($arguments)
{ {
$this->parse($arguments); $this->parse($arguments);
$this->loadGeneral(); $this->initGeneral();
$this->loadEnvironment(); $this->initEnvironment();
} }
/** /**
@ -151,8 +222,8 @@ class Config
*/ */
public function reload() public function reload()
{ {
$this->loadGeneral(); $this->initGeneral();
$this->loadEnvironment(); $this->initEnvironment();
} }
/** /**
@ -280,11 +351,12 @@ class Config
{ {
$hosts = array(); $hosts = array();
if (isset($this->config['environment']['hosts'])) { $envConfig = $this->getEnvironmentConfig();
if (is_array($this->config['environment']['hosts'])) { if (isset($envConfig['hosts'])) {
$hosts = (array) $this->config['environment']['hosts']; if (is_array($envConfig['hosts'])) {
} else if (is_string($this->config['environment']['hosts']) && file_exists($this->config['environment']['hosts']) && is_readable($this->config['environment']['hosts'])) { $hosts = (array) $envConfig['hosts'];
$fileContent = fopen($this->config['environment']['hosts'], 'r'); } else if (is_string($envConfig['hosts']) && file_exists($envConfig['hosts']) && is_readable($envConfig['hosts'])) {
$fileContent = fopen($envConfig['hosts'], 'r');
while (($host = fgets($fileContent)) == true) { while (($host = fgets($fileContent)) == true) {
$host = trim($host); $host = trim($host);
if ($host != '') { if ($host != '') {
@ -373,7 +445,7 @@ class Config
*/ */
public function general($option, $default = false) public function general($option, $default = false)
{ {
$config = $this->config['general']; $config = $this->getGeneralConfig();
if (isset($config[$option])) { if (isset($config[$option])) {
if (is_array($default) && ($config[$option] == '')) { if (is_array($default) && ($config[$option] == '')) {
return $default; return $default;
@ -462,7 +534,8 @@ class Config
*/ */
public function setFrom($from) public function setFrom($from)
{ {
$this->config['environment']['deployment']['from'] = $from; $envConfig = $this->getEnvironmentConfig();
$envConfig['deployment']['from'] = $from;
return $this; return $this;
} }
@ -497,7 +570,7 @@ class Config
*/ */
protected function getEnvironmentOption($option, $default = array()) protected function getEnvironmentOption($option, $default = array())
{ {
$config = $this->config['environment']; $config = $this->getEnvironmentConfig();
if (isset($config[$option])) { if (isset($config[$option])) {
return $config[$option]; return $config[$option];
} else { } else {
@ -505,4 +578,37 @@ class Config
} }
} }
/**
* Utility methods. TODO To be extracted into own Class
*/
public function parseConfigFile($filePath)
{
if(!file_exists($filePath))
{
throw new ConfigNotFoundException("Cannot find the file at path $filePath");
}
return $this->parseConfigText(file_get_contents($filePath));
}
public function parseConfigText($input)
{
return Yaml::parse($input);
}
/**
* @return array
*/
protected function getGeneralConfig()
{
return $this->generalConfig;
}
/**
* @return array
*/
protected function getEnvironmentConfig()
{
return $this->environmentConfig;
}
} }

13
Mage/Config/ConfigNotFoundException.php

@ -0,0 +1,13 @@
<?php
namespace Mage\Config;
use Mage\Yaml\Exception\RuntimeException;
/**
*
* @author Vladimir Grigor <vgrigor@gmail.com>
*/
class ConfigNotFoundException extends RuntimeException
{
}

13
Mage/Config/OptionalConfigNotFoundException.php

@ -0,0 +1,13 @@
<?php
namespace Mage\Config;
use Mage\Yaml\Exception\RuntimeException;
/**
*
* @author Vladimir Grigor <vgrigor@gmail.com>
*/
class OptionalConfigNotFoundException extends RuntimeException
{
}

13
Mage/Config/RequiredConfigNotFoundException.php

@ -0,0 +1,13 @@
<?php
namespace Mage\Config;
use Mage\Yaml\Exception\RuntimeException;
/**
*
* @author Vladimir Grigor <vgrigor@gmail.com>
*/
class RequiredConfigNotFoundException extends RuntimeException
{
}

19
Mage/Console.php

@ -24,6 +24,12 @@ use RecursiveDirectoryIterator;
*/ */
class Console class Console
{ {
/**
* TODO refactor into own static class
* @var array
*/
public static $paramsNotRequiringEnvironment = array('install'=>'install', 'upgrade'=>'upgrade', 'version'=>'version');
/** /**
* Handler to the current Log File. * Handler to the current Log File.
* @var mixed * @var mixed
@ -93,16 +99,17 @@ class Console
$commandName = $config->getArgument(0); $commandName = $config->getArgument(0);
// Logging // Logging
$showGrettings = true; $showGreetings = true;
if (in_array($commandName, array('install', 'upgrade', 'version'))) {
if (in_array($commandName, self::$paramsNotRequiringEnvironment)) {
self::$logEnabled = false; self::$logEnabled = false;
$showGrettings = false; $showGreetings = false;
} else { } else {
self::$logEnabled = $config->general('logging', false); self::$logEnabled = $config->general('logging', false);
} }
// Grettings // Greetings
if ($showGrettings) { if ($showGreetings) {
self::output('Starting <blue>Magallanes</blue>', 0, 2); self::output('Starting <blue>Magallanes</blue>', 0, 2);
} }
@ -128,7 +135,7 @@ class Console
} }
} }
if ($showGrettings) { if ($showGreetings) {
self::output('Finished <blue>Magallanes</blue>', 0, 2); self::output('Finished <blue>Magallanes</blue>', 0, 2);
if (file_exists(getcwd() . '/.mage/~working.lock')) { if (file_exists(getcwd() . '/.mage/~working.lock')) {
unlink(getcwd() . '/.mage/~working.lock'); unlink(getcwd() . '/.mage/~working.lock');

10
Mage/Task/AbstractTask.php

@ -150,7 +150,15 @@ abstract class AbstractTask
*/ */
public function getParameter($name, $default = null) public function getParameter($name, $default = null)
{ {
return $this->getConfig()->getParameter($name, $default, $this->parameters); return $this->getConfig()->getParameter($name, $default, $this->getParameters());
}
/**
* @return array
*/
protected function getParameters()
{
return $this->parameters;
} }
/** /**

Loading…
Cancel
Save