From: Rick M. <obj...@gm...> - 2007-09-27 13:57:15
|
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. Rick ::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 |