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;
}
}