Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
37.50% |
3 / 8 |
CRAP | |
70.31% |
45 / 64 |
LoggerOptionConverter | |
0.00% |
0 / 1 |
|
37.50% |
3 / 8 |
75.78 | |
70.31% |
45 / 64 |
getSystemProperty($key, $def) | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 7 |
|||
toBooleanEx($value) | |
100.00% |
1 / 1 |
5 | |
100.00% |
10 / 10 |
|||
toIntegerEx($value) | |
100.00% |
1 / 1 |
4 | |
100.00% |
5 / 5 |
|||
toPositiveIntegerEx($value) | |
0.00% |
0 / 1 |
13.78 | |
40.00% |
2 / 5 |
|||
toLevelEx($value) | |
0.00% |
0 / 1 |
3.04 | |
83.33% |
5 / 6 |
|||
toFileSizeEx($value) | |
0.00% |
0 / 1 |
8.42 | |
81.25% |
13 / 16 |
|||
toStringEx($value) | |
0.00% |
0 / 1 |
14.11 | |
28.57% |
2 / 7 |
|||
substConstants($string) | |
100.00% |
1 / 1 |
3 | |
100.00% |
8 / 8 |
<?php | |
/** | |
* Licensed to the Apache Software Foundation (ASF) under one or more | |
* contributor license agreements. See the NOTICE file distributed with | |
* this work for additional information regarding copyright ownership. | |
* The ASF licenses this file to You under the Apache License, Version 2.0 | |
* (the "License"); you may not use this file except in compliance with | |
* the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
* | |
* @package log4php | |
*/ | |
/** | |
* A convenience class to convert property values to specific types. | |
* | |
* @version $Revision: 1374617 $ | |
* @package log4php | |
* @subpackage helpers | |
* @since 0.5 | |
*/ | |
class LoggerOptionConverter { | |
/** String values which are converted to boolean TRUE. */ | |
private static $trueValues = array('1', 'true', 'yes', 'on'); | |
/** | |
* String values which are converted to boolean FALSE. | |
* | |
* Note that an empty string must convert to false, because | |
* parse_ini_file() which is used for parsing configuration | |
* converts the value _false_ to an empty string. | |
*/ | |
private static $falseValues = array('0', 'false', 'no', 'off', ''); | |
/** | |
* Read a predefined var. | |
* | |
* It returns a value referenced by <var>$key</var> using this search criteria: | |
* - if <var>$key</var> is a constant then return it. Else | |
* - if <var>$key</var> is set in <var>$_ENV</var> then return it. Else | |
* - return <var>$def</var>. | |
* | |
* @param string $key The key to search for. | |
* @param string $def The default value to return. | |
* @return string the string value of the system property, or the default | |
* value if there is no property with that key. | |
*/ | |
public static function getSystemProperty($key, $def) { | |
if(defined($key)) { | |
return (string)constant($key); | |
} else if(isset($_SERVER[$key])) { | |
return (string)$_SERVER[$key]; | |
} else if(isset($_ENV[$key])) { | |
return (string)$_ENV[$key]; | |
} else { | |
return $def; | |
} | |
} | |
/** Converts $value to boolean, or throws an exception if not possible. */ | |
public static function toBooleanEx($value) { | |
if (isset($value)) { | |
if (is_bool($value)) { | |
return $value; | |
} | |
$value = strtolower(trim($value)); | |
if (in_array($value, self::$trueValues)) { | |
return true; | |
} | |
if (in_array($value, self::$falseValues)) { | |
return false; | |
} | |
} | |
throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to boolean."); | |
} | |
/** | |
* Converts $value to integer, or throws an exception if not possible. | |
* Floats cannot be converted to integer. | |
*/ | |
public static function toIntegerEx($value) { | |
if (is_integer($value)) { | |
return $value; | |
} | |
if (is_numeric($value) && ($value == (integer) $value)) { | |
return (integer) $value; | |
} | |
throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to integer."); | |
} | |
/** | |
* Converts $value to integer, or throws an exception if not possible. | |
* Floats cannot be converted to integer. | |
*/ | |
public static function toPositiveIntegerEx($value) { | |
if (is_integer($value) && $value > 0) { | |
return $value; | |
} | |
if (is_numeric($value) && ($value == (integer) $value) && $value > 0) { | |
return (integer) $value; | |
} | |
throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to a positive integer."); | |
} | |
/** Converts the value to a level. Throws an exception if not possible. */ | |
public static function toLevelEx($value) { | |
if ($value instanceof LoggerLevel) { | |
return $value; | |
} | |
$level = LoggerLevel::toLevel($value); | |
if ($level === null) { | |
throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to a logger level."); | |
} | |
return $level; | |
} | |
/** | |
* Converts a value to a valid file size (integer). | |
* | |
* Supports 'KB', 'MB' and 'GB' suffixes, where KB = 1024 B etc. | |
* | |
* The final value will be rounded to the nearest integer. | |
* | |
* Examples: | |
* - '100' => 100 | |
* - '100.12' => 100 | |
* - '100KB' => 102400 | |
* - '1.5MB' => 1572864 | |
* | |
* @param mixed $value File size (optionally with suffix). | |
* @return integer Parsed file size. | |
*/ | |
public static function toFileSizeEx($value) { | |
if (empty($value)) { | |
throw new LoggerException("Empty value cannot be converted to a file size."); | |
} | |
if (is_numeric($value)) { | |
return (integer) $value; | |
} | |
if (!is_string($value)) { | |
throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to a file size."); | |
} | |
$str = strtoupper(trim($value)); | |
$count = preg_match('/^([0-9.]+)(KB|MB|GB)?$/', $str, $matches); | |
if ($count > 0) { | |
$size = $matches[1]; | |
$unit = $matches[2]; | |
switch($unit) { | |
case 'KB': $size *= pow(1024, 1); break; | |
case 'MB': $size *= pow(1024, 2); break; | |
case 'GB': $size *= pow(1024, 3); break; | |
} | |
return (integer) $size; | |
} | |
throw new LoggerException("Given value [$value] cannot be converted to a file size."); | |
} | |
/** | |
* Converts a value to string, or throws an exception if not possible. | |
* | |
* Objects can be converted to string if they implement the magic | |
* __toString() method. | |
* | |
*/ | |
public static function toStringEx($value) { | |
if (is_string($value)) { | |
return $value; | |
} | |
if (is_numeric($value)) { | |
return (string) $value; | |
} | |
if (is_object($value) && method_exists($value, '__toString')) { | |
return (string) $value; | |
} | |
throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to string."); | |
} | |
/** | |
* Performs value substitution for string options. | |
* | |
* An option can contain PHP constants delimited by '${' and '}'. | |
* | |
* E.g. for input string "some ${FOO} value", the method will attempt | |
* to substitute ${FOO} with the value of constant FOO if it exists. | |
* | |
* Therefore, if FOO is a constant, and it has value "bar", the resulting | |
* string will be "some bar value". | |
* | |
* If the constant is not defined, it will be replaced by an empty string, | |
* and the resulting string will be "some value". | |
* | |
* @param string $string String on which to perform substitution. | |
* @return string | |
*/ | |
public static function substConstants($string) { | |
preg_match_all('/\${([^}]+)}/', $string, $matches); | |
foreach($matches[1] as $key => $match) { | |
$match = trim($match); | |
$search = $matches[0][$key]; | |
$replacement = defined($match) ? constant($match) : ''; | |
$string = str_replace($search, $replacement, $string); | |
} | |
return $string; | |
} | |
} |