public function buildVariant(Build $build, $feature, $userValue = null)
{
if (!isset($this->variants[$feature])) {
throw new Exception("Variant '{$feature}' is not defined.");
}
// Skip if we've built it
if (in_array($feature, $this->builtList)) {
return array();
}
// Skip if we've disabled it
if (isset($this->disables[$feature])) {
return array();
}
$this->builtList[] = $feature;
$cb = $this->variants[$feature];
if (is_array($cb)) {
return $cb;
} elseif (is_string($cb)) {
return array($cb);
} elseif (is_callable($cb)) {
$args = is_string($userValue) ? array($build, $userValue) : array($build);
return (array) call_user_func_array($cb, $args);
} else {
throw new OopsException();
}
}