You may be making this more difficult than it actually is. I think it's just always essentially this:

If `$params` is an array, the first value is the fields (either string or an array), and the rest of the params are just passed through to the rule.

```php
$fields = array_shift($params);
$this->rule($ruleName, $fields, $params);
```

If `$params` is a string, assume it's just the field:
```php
$this->rule($ruleName, $params);
```

Right?