Skip to content

Commit

Permalink
WIP: Refactor validation helpers into a single module
Browse files Browse the repository at this point in the history
Fixes #362
  • Loading branch information
jzaefferer committed May 7, 2015
1 parent d1f4701 commit 1e1e341
Show file tree
Hide file tree
Showing 32 changed files with 291 additions and 456 deletions.
8 changes: 1 addition & 7 deletions src/build/intro-currency.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,4 @@ var alwaysArray = Globalize._alwaysArray,
numberNumberingSystem = Globalize._numberNumberingSystem,
numberPattern = Globalize._numberPattern,
stringPad = Globalize._stringPad,
validate = Globalize._validate,
validateCldr = Globalize._validateCldr,
validateDefaultLocale = Globalize._validateDefaultLocale,
validateParameterPresence = Globalize._validateParameterPresence,
validateParameterType = Globalize._validateParameterType,
validateParameterTypeNumber = Globalize._validateParameterTypeNumber,
validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;
validate = Globalize._validate;
7 changes: 1 addition & 6 deletions src/build/intro-date.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,4 @@ var createError = Globalize._createError,
numberSymbol = Globalize._numberSymbol,
regexpEscape = Globalize._regexpEscape,
stringPad = Globalize._stringPad,
validateCldr = Globalize._validateCldr,
validateDefaultLocale = Globalize._validateDefaultLocale,
validateParameterPresence = Globalize._validateParameterPresence,
validateParameterType = Globalize._validateParameterType,
validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject,
validateParameterTypeString = Globalize._validateParameterTypeString;
validate = Globalize._validate;
6 changes: 1 addition & 5 deletions src/build/intro-message.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,4 @@

var alwaysArray = Globalize._alwaysArray,
isPlainObject = Globalize._isPlainObject,
validate = Globalize._validate,
validateDefaultLocale = Globalize._validateDefaultLocale,
validateParameterPresence = Globalize._validateParameterPresence,
validateParameterType = Globalize._validateParameterType,
validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;
validate = Globalize._validate;
7 changes: 1 addition & 6 deletions src/build/intro-number.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,4 @@ var createError = Globalize._createError,
objectExtend = Globalize._objectExtend,
regexpEscape = Globalize._regexpEscape,
stringPad = Globalize._stringPad,
validateCldr = Globalize._validateCldr,
validateDefaultLocale = Globalize._validateDefaultLocale,
validateParameterPresence = Globalize._validateParameterPresence,
validateParameterRange = Globalize._validateParameterRange,
validateParameterType = Globalize._validateParameterType,
validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;
validate = Globalize._validate;
6 changes: 1 addition & 5 deletions src/build/intro-plural.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,4 @@
}
}(this, function( Cldr, Globalize ) {

var validateCldr = Globalize._validateCldr,
validateDefaultLocale = Globalize._validateDefaultLocale,
validateParameterPresence = Globalize._validateParameterPresence,
validateParameterType = Globalize._validateParameterType,
validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;
var validate = Globalize._validate;
6 changes: 1 addition & 5 deletions src/build/intro-relative-time.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,4 @@
}(this, function( Cldr, Globalize ) {

var formatMessage = Globalize._formatMessage,
validateCldr = Globalize._validateCldr,
validateDefaultLocale = Globalize._validateDefaultLocale,
validateParameterPresence = Globalize._validateParameterPresence,
validateParameterTypeString = Globalize._validateParameterTypeString,
validateParameterTypeNumber = Globalize._validateParameterTypeNumber;
validate = Globalize._validate;
199 changes: 194 additions & 5 deletions src/common/validate.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,200 @@
define([
"./create-error"
], function( createError ) {
define( [
"./create-error",
"../util/always-array",
"../util/is-plain-object",
"cldr",
"../core"
], function( createError, alwaysArray, isPlainObject, Cldr, Globalize ) {

return function( code, message, check, attributes ) {
function validate( code, message, check, attributes ) {
if ( !check ) {
throw createError( code, message, attributes );
}
}

function cldr( path, value, options ) {
var skipBoolean;
options = options || {};

skipBoolean = alwaysArray( options.skip ).some( function( pathRe ) {
return pathRe.test( path );
} );

validate( "E_MISSING_CLDR", "Missing required CLDR content `{path}`.", value || skipBoolean, {
path: path
} );
}

function defaultLocale( value ) {
validate( "E_DEFAULT_LOCALE_NOT_DEFINED", "Default locale has not been defined.",
value !== undefined, {} );
}

function messageBundle( cldr ) {
validate(
"E_MISSING_MESSAGE_BUNDLE",
"Missing message bundle for locale `{locale}`.",
cldr.attributes.bundle && cldr.get( "globalize-messages/{bundle}" ) !== undefined,
{
locale: cldr.locale
}
);
}

function messagePresence( path, value ) {
path = path.join( "/" );
validate( "E_MISSING_MESSAGE", "Missing required message content `{path}`.",
value !== undefined, { path: path } );
}

function messageType( path, value ) {
path = path.join( "/" );
validate(
"E_INVALID_MESSAGE",
"Invalid message content `{path}`. {expected} expected.",
typeof value === "string",
{
expected: "a string",
path: path
}
);
}

function parameterPresence( value, name ) {
validate( "E_MISSING_PARAMETER", "Missing required parameter `{name}`.",
value !== undefined, { name: name } );
}

/**
* range( value, name, minimum, maximum )
*
* @value [Number].
* @name [String] name of variable.
* @minimum [Number]. The lowest valid value, inclusive.
* @maximum [Number]. The greatest valid value, inclusive.
*/
function parameterRange( value, name, minimum, maximum ) {
validate(
"E_PAR_OUT_OF_RANGE",
"Parameter `{name}` has value `{value}` out of range [{minimum}, {maximum}].",
value === undefined || value >= minimum && value <= maximum,
{
maximum: maximum,
minimum: minimum,
name: name,
value: value
}
);
}

function parameterType( value, name, check, expected ) {
validate(
"E_INVALID_PAR_TYPE",
"Invalid `{name}` parameter ({value}). {expected} expected.",
check,
{
expected: expected,
name: name,
value: value
}
);
}

function pluralModulePresence() {
validate( "E_MISSING_PLURAL_MODULE", "Plural module not loaded.",
Globalize.plural !== undefined, {} );
}

function parameterTypeArray( value, name ) {
parameterType( value, name, value === undefined || Array.isArray( value ), "Array" );
}

function parameterTypeCurrency( value, name ) {
parameterType(
value,
name,
value === undefined || typeof value === "string" && ( /^[A-Za-z]{3}$/ ).test( value ),
"3-letter currency code string as defined by ISO 4217"
);
}

function parameterTypeDate( value, name ) {
parameterType( value, name, value === undefined || value instanceof Date, "Date" );
}

function parameterTypeLocale( value, name ) {
parameterType(
value,
name,
value === undefined || typeof value === "string" || value instanceof Cldr,
"String or Cldr instance"
);
}

function parameterTypeArrayOrObject( value, name ) {
parameterType(
value,
name,
value === undefined || isPlainObject( value ) || Array.isArray( value ),
"Array or Plain Object"
);
}

function parameterTypeNumber( value, name ) {
parameterType(
value,
name,
value === undefined || typeof value === "number",
"Number"
);
}

function parameterTypeObject( value, name ) {
parameterType(
value,
name,
value === undefined || isPlainObject( value ),
"Plain Object"
);
}

function parameterTypePlural( value, name ) {
parameterType(
value,
name,
value === undefined || value === "cardinal" || value === "ordinal",
"String \"cardinal\" or \"ordinal\""
);
}

function parameterTypeString( value, name ) {
parameterType(
value,
name,
value === undefined || typeof value === "string",
"a string"
);
}

return {
cldr: cldr,
defaultLocale: defaultLocale,
messageBundle: messageBundle,
messagePresence: messagePresence,
messageType: messageType,
parameterPresence: parameterPresence,
parameterRange: parameterRange,
parameterType: parameterType,
pluralModulePresence: pluralModulePresence,
parameterTypeArray: parameterTypeArray,
parameterTypeCurrency: parameterTypeCurrency,
parameterTypeDate: parameterTypeDate,
parameterTypeLocale: parameterTypeLocale,
parameterTypeArrayOrObject: parameterTypeArrayOrObject,
parameterTypeNumber: parameterTypeNumber,
parameterTypeObject: parameterTypeObject,
parameterTypePlural: parameterTypePlural,
parameterTypeString: parameterTypeString
};

});
} );
19 changes: 0 additions & 19 deletions src/common/validate/cldr.js

This file was deleted.

10 changes: 0 additions & 10 deletions src/common/validate/default-locale.js

This file was deleted.

16 changes: 0 additions & 16 deletions src/common/validate/message-bundle.js

This file was deleted.

11 changes: 0 additions & 11 deletions src/common/validate/message-presence.js

This file was deleted.

18 changes: 0 additions & 18 deletions src/common/validate/message-type.js

This file was deleted.

10 changes: 0 additions & 10 deletions src/common/validate/parameter-presence.js

This file was deleted.

30 changes: 0 additions & 30 deletions src/common/validate/parameter-range.js

This file was deleted.

Loading

0 comments on commit 1e1e341

Please sign in to comment.