public bool IsTruthyValue(object value)
{
if (value == null)
{
return false;
}
foreach (var func in Registry.TruthyChecks)
{
var funcResult = func(value);
if (funcResult.HasValue)
{
return funcResult.Value;
}
}
if (value is bool)
{
return (bool)value;
}
var strValue = value as string;
if (strValue != null)
{
var trimmed = strValue.Trim();
if (trimmed == "1")
{
return true;
}
if (trimmed == "0")
{
return false;
}
if (trimmed.Equals("true", StringComparison.OrdinalIgnoreCase))
{
return true;
}
if (trimmed.Equals("false", StringComparison.OrdinalIgnoreCase))
{
return false;
}
return !string.IsNullOrEmpty(trimmed);
}
var enumerableValue = value as IEnumerable;
if (enumerableValue != null)
{
return enumerableValue.GetEnumerator().MoveNext();
}
return true;
}