From: Rony G. F. <Ron...@wu...> - 2007-09-27 14:30:02
|
Rick McGuire wrote: > In the process of adding some more error checks to the DateTime > prototype this morning, I decide I was really getting tired of looking > up error numbers for different types of arguments. I wrote the > following little utility class which makes common types of argument > validation a lot simpler. Note this requires the most recent build, > as it's issuing the new 88.nnn argument error messages. Now it's one > line for each argument check, and the arguments are flagged by name > rather than position. Looks very neat! One little suggestion: all of these check methods mandate a "name" argument in all cases, and one or more arguments which get checked. For that reason I would suggest to expect the "name" argument in the ArgUtil-methods to be the first argument, followed by the value to be checked as the second argument (which - depending on the check - may be followed by additional values which should get used in the checking). [This sequence would then also match the sequence of arguments used in the raise-stattement.] ---rony > ::CLASS "ArgUtil" public > ::METHOD validateNumber class > use strict arg number, name > if \number~dataType('Number') then do > raise syntax 88.902 array(name, number) > end > > -- Validates the argument is a number and is in range. This gives the > -- 907 message for all error conditions to be most specific. > ::METHOD validateNumberRange class > use strict arg number, name, min, max > -- validate the numeric part first > if \number~dataType('Number') then do > raise syntax 88.907 array(name, number) > end > -- now validate it's within range > if number < min | number > max then do > raise syntax 88.907 array(name, min, max, number) > end > > > -- Validates the argument is a whole number and is in range. This > gives the > -- 907 message for all error conditions to be most specific. > ::METHOD validateWholeRange class > use strict arg number, name, min, max > -- validate the numeric part first > if \number~dataType('Whole') then do > raise syntax 88.907 array(name, number) > end > -- now validate it's within range > if number < min | number > max then do > raise syntax 88.907 array(name, min, max, number) > end > > ::METHOD validateWhole class > use strict arg number, name > if \number~dataType('Whole') then do > raise syntax 88.903 array(name, number) > end > > -- Note, this uses the 904 message for both, which is most specific > ::METHOD validateNonNegative class > use strict arg number, name > -- first validate whole number status > if \number~dataType('Whole') then do > raise syntax 88.904 array(name, number) > end > -- then check range status > if number < 0 then do > raise syntax 88.904 array(name, number) > end > > ::METHOD validatePositive class > use strict arg number, name > -- first validate whole number status > if \number~dataType('Whole') then do > raise syntax 88.905 array(name, number) > end > -- then check range status > if number <= 0 then do > raise syntax 88.905 array(name, number) > end > > -- validate a length parameter. This is essentially the same > -- as validateNonNegative, but a more specific message. > ::METHOD validateLength class > use strict arg number, name > -- first validate whole number status > if \number~dataType('Whole') then do > raise syntax 88.911 array(name, number) > end > -- then check range status > if number < 0 then do > raise syntax 88.911 array(name, number) > end > > -- validate a position parameter. This is essentially the same > -- as validatePosition, but a more specific message. > ::METHOD validatePosition class > use strict arg number, name > -- first validate whole number status > if \number~dataType('Whole') then do > raise syntax 88.912 array(name, number) > end > -- then check range status > if number <= 0 then do > raise syntax 88.912 array(name, number) > end > > -- validate that an argument is an instance of a specific class. > ::METHOD validateClass class > use strict arg obj, class, name > > if \obj~isa(class) then do > raise syntax 88.914 array(name, class~id) > end > |