Values::ArgumentError - exception class containing missing/unexpected constructor arguments #51
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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'sCoercionError
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 benil
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.