Values
Values copied to clipboard
Values::ArgumentError - exception class containing missing/unexpected constructor arguments
I hesitate to make this PR given that part of Values' appeal is its exceptionally small size; so, apologies in advance if the changeset it unwanted, and thanks for taking the time to review it.
I use Values for input validation and would find it helpful if the exceptions raised by the .new and .with methods upon receipt of bad arguments contained lists of missing and unrecognized keys, along the same lines as how virtus's CoercionError exception class has the .attribute_name method for helping to determine which failed attribute prevented an object's instantiation.
Since Values already validates constructor arguments, this PR mostly amounts to percolating existing data up to the caller -- the exception being the second argument to the Values::ArgumentError created in .new.
The convention I've followed is that the @missing_keys and @unexpected_keys attributes will contain empty arrays if there were, respectively, no missing arguments or no extra arguments to .with. By contrast, @unexpected_keys will be nil if there were extra arguments provided to .new, since there is no way to determine the 'meaning' of additional positional parameters in the absence of handy hash keys acting a labels.
@BaxterStockman whilst I agree on Values' small size, I like this PR and would like to merge it. I have some nitpicks that I'd like addressed first.
@tcrayford -- many thanks for your feedback! I've updated the PR in response to your comments.
@tcrayford -- are you planning to merge this and release a 1.10.0?
ping