public function where($requirements = [])
{
foreach ($requirements as $name => $args) {
if (!isset($this->_chain[$name])) {
throw new InvalidArgumentException("Unexisting `{$name}` as method as part of the chain definition.");
}
if (!is_array($args)) {
throw new InvalidArgumentException("Argument requirements must be an arrays for `{$name}` method.");
}
call_user_func_array([$this->_chain[$name], 'with'], $args);
}
return $this;
}