Comparing version 0.0.3 to 0.0.4
@@ -16,10 +16,2 @@ { | ||
"bootstrap": "^3.3.5", | ||
"bootstrap-webpack": "0.0.5", | ||
"css-loader": "^0.19.0", | ||
"exports-loader": "^0.6.2", | ||
"extract-text-webpack-plugin": "^0.8.2", | ||
"file-loader": "^0.8.4", | ||
"imports-loader": "^0.6.4", | ||
"less": "^2.5.3", | ||
"less-loader": "^2.2.1", | ||
"express": "^4.13.3", | ||
@@ -29,6 +21,3 @@ "jquery": "^2.1.4", | ||
"react-dom": "^0.14.0", | ||
"style-loader": "^0.12.4", | ||
"url-loader": "^0.5.6", | ||
"webpack": "^1.12.2", | ||
"valour": "0.0.1" | ||
"valour": "0.0.3" | ||
}, | ||
@@ -40,4 +29,14 @@ "devDependencies": { | ||
"expose-loader": "^0.7.0", | ||
"webpack": "^1.12.2" | ||
"style-loader": "^0.12.4", | ||
"url-loader": "^0.5.6", | ||
"webpack": "^1.12.2", | ||
"bootstrap-webpack": "0.0.5", | ||
"css-loader": "^0.19.0", | ||
"exports-loader": "^0.6.2", | ||
"extract-text-webpack-plugin": "^0.8.2", | ||
"file-loader": "^0.8.4", | ||
"imports-loader": "^0.6.4", | ||
"less": "^2.5.3", | ||
"less-loader": "^2.2.1" | ||
} | ||
} |
import React from 'react'; | ||
import valour from 'valour'; | ||
export default class ValidatedForm extends React.Component{ | ||
constructor() { | ||
super(); | ||
this.state = { | ||
valid: null | ||
}; | ||
} | ||
render() { | ||
@@ -8,5 +16,17 @@ return ( | ||
{this.props.children} | ||
<fieldset disabled={!this.state.valid}> | ||
<input type='button' value='Submit' className='btn btn-primary' /> | ||
</fieldset> | ||
</form> | ||
); | ||
} | ||
componentDidMount() { | ||
let {name} = this.props; | ||
valour.onUpdated(name, () => { | ||
this.setState({ | ||
valid: valour.isValid(name) | ||
}); | ||
}); | ||
} | ||
} |
@@ -29,2 +29,10 @@ 'use strict'; | ||
var _lodashLangIsUndefined = require('lodash/lang/isUndefined'); | ||
var _lodashLangIsUndefined2 = _interopRequireDefault(_lodashLangIsUndefined); | ||
var _lodashLangIsNull = require('lodash/lang/isNull'); | ||
var _lodashLangIsNull2 = _interopRequireDefault(_lodashLangIsNull); | ||
function getDates(beforeIn, afterIn) { | ||
@@ -58,2 +66,10 @@ var before = new Date(beforeIn.toString()); | ||
var requiredFunc = function requiredFunc(val) { | ||
return !!val; | ||
}; | ||
var isCheckable = function isCheckable(val) { | ||
return !(0, _lodashLangIsUndefined2['default'])(val) && !(0, _lodashLangIsNull2['default'])(val) && val.toString().length; | ||
}; | ||
var ValidationUnit = (function () { | ||
@@ -83,7 +99,16 @@ function ValidationUnit() { | ||
_createClass(ValidationUnit, [{ | ||
key: 'hasIsRequired', | ||
value: function hasIsRequired() { | ||
return this.rules.some(function (x) { | ||
return (0, _utilFunctionsEqual2['default'])(x.func, requiredFunc); | ||
}); | ||
} | ||
}, { | ||
key: 'createCustomPromiseGenerator', | ||
value: function createCustomPromiseGenerator(func) { | ||
var _this = this; | ||
return function (val, allValues, messageList, name) { | ||
return new Promise(function (resolve, reject) { | ||
return func(val, allValues, messageList, name, resolve, reject); | ||
return !_this.hasIsRequired() && !isCheckable(val) || func(val, allValues, messageList, name, resolve, reject); | ||
}); | ||
@@ -106,3 +131,3 @@ }; | ||
value: function runValidation(value, allValues, name) { | ||
var _this = this; | ||
var _this2 = this; | ||
@@ -115,7 +140,7 @@ this.valid = undefined; | ||
return Promise.all(generators.map(function (gen) { | ||
return gen(value, allValues, _this.messages, name); | ||
return gen(value, allValues, _this2.messages, name); | ||
})).then(function () { | ||
return _this.valid = true; | ||
return _this2.valid = true; | ||
}, function () { | ||
return _this.valid = false; | ||
return _this2.valid = false; | ||
}); | ||
@@ -194,5 +219,3 @@ } | ||
return this.setRequirement(function (val) { | ||
return !!val; | ||
}, '{name} is required.', message); | ||
return this.setRequirement(requiredFunc, '{name} is required.', message); | ||
} | ||
@@ -485,9 +508,2 @@ }, { | ||
}, { | ||
key: 'isNull', | ||
value: function isNull() { | ||
var message = arguments.length <= 0 || arguments[0] === undefined ? '{name} must be null.' : arguments[0]; | ||
return this.setValidatorRequirement('isNull', message); | ||
} | ||
}, { | ||
key: 'isNumeric', | ||
@@ -494,0 +510,0 @@ value: function isNumeric() { |
@@ -122,3 +122,3 @@ 'use strict'; | ||
return !Object.keys(result).some(function (key) { | ||
return result[key].valid === false; | ||
return !result[key].valid; | ||
}); | ||
@@ -125,0 +125,0 @@ } |
{ | ||
"name": "valour", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"description": "Simple javascript validation for any application", | ||
@@ -5,0 +5,0 @@ "main": "lib/valour.js", |
import validator from 'validator'; | ||
import functionsEqual from './util/functions-equal'; | ||
import formatValidationMessage from './util/format-validation-message'; | ||
import isUndefined from 'lodash/lang/isUndefined'; | ||
import isNull from 'lodash/lang/isNull'; | ||
@@ -33,2 +35,6 @@ function getDates(beforeIn, afterIn) { | ||
let requiredFunc = val => !!val; | ||
let isCheckable = val => !isUndefined(val) && !isNull(val) && val.toString().length; | ||
export default class ValidationUnit { | ||
@@ -48,4 +54,8 @@ constructor(...existing) { | ||
hasIsRequired() { | ||
return this.rules.some(x => functionsEqual(x.func, requiredFunc)); | ||
} | ||
createCustomPromiseGenerator(func) { | ||
return (val, allValues, messageList, name) => new Promise((resolve, reject) => func(val, allValues, messageList, name, resolve, reject)); | ||
return (val, allValues, messageList, name) => new Promise((resolve, reject) => (!this.hasIsRequired() && !isCheckable(val)) || func(val, allValues, messageList, name, resolve, reject)); | ||
} | ||
@@ -116,3 +126,3 @@ | ||
isRequired(message = '{name} is required.') { | ||
return this.setRequirement(val => !!val, '{name} is required.', message); | ||
return this.setRequirement(requiredFunc, '{name} is required.', message); | ||
} | ||
@@ -293,6 +303,2 @@ | ||
isNull(message = '{name} must be null.') { | ||
return this.setValidatorRequirement('isNull', message); | ||
} | ||
isNumeric(message = '{name} must be numeric.') { | ||
@@ -299,0 +305,0 @@ return this.setValidatorRequirement('isNumeric', message); |
@@ -83,3 +83,3 @@ import ValidationUnit from './ValidationUnit'; | ||
let result = this.getResult(name); | ||
return !Object.keys(result).some((key) => result[key].valid === false); | ||
return !Object.keys(result).some((key) => !result[key].valid); | ||
} | ||
@@ -86,0 +86,0 @@ } |
@@ -1105,24 +1105,2 @@ import {expect} from "./support/eventual-chai"; | ||
describe('isNull', () => { | ||
beforeEach(() => { | ||
unit = unit.isNull(); | ||
}); | ||
it('passes when the given value is null', (done) => { | ||
unit.runValidation(null).then(() => { | ||
expect(unit.getState().valid).to.be.true; | ||
done(); | ||
}); | ||
}); | ||
it('fails when the given value is not null', (done) => { | ||
unit.runValidation('nope', {}, 'Null field').then(() => { | ||
let result = unit.getState(); | ||
expect(result.valid).to.be.false; | ||
expect(result.messages).to.deep.equal([ 'Null field must be null.' ]); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
describe('isNumeric', () => { | ||
@@ -1236,2 +1214,13 @@ beforeEach(() => { | ||
}); | ||
describe('hasIsRequired', () => { | ||
it('returns true when the unit is required', () => { | ||
unit = unit.isRequired(); | ||
expect(unit.hasIsRequired()).to.be.true; | ||
}); | ||
it('returns false when the unit is not required', () => { | ||
expect(unit.hasIsRequired()).to.be.false; | ||
}); | ||
}); | ||
}); |
94853
2306