Skip to content
This repository has been archived by the owner on Apr 19, 2022. It is now read-only.

Commit

Permalink
Merge branch 'release-2.2.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
thetutlage committed Oct 11, 2016
2 parents 71a18e8 + c74cb04 commit ac6af43
Show file tree
Hide file tree
Showing 14 changed files with 1,235 additions and 1,296 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
<a name="2.2.1"></a>
## [2.2.1](https://github.com/poppinss/indicative/compare/v2.2.0...v2.2.1) (2016-10-11)


### Bug Fixes

* **validator:** convert message field to snake_case ([cae5884](https://github.com/poppinss/indicative/commit/cae5884)), closes [#76](https://github.com/poppinss/indicative/issues/76)



<a name="2.2.0"></a>
# [2.2.0](https://github.com/poppinss/indicative/compare/v2.1.0...v2.2.0) (2016-09-23)

Expand Down
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"name": "indicative",
"version": "2.2.0",
"version": "2.2.1",
"description": "Intentionally beautiful schema and raw validator for nodejs",
"main": "index.js",
"scripts": {
"test": "istanbul cover _mocha --report lcovonly -- -R spec test && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage",
"coverage": "istanbul cover _mocha test --bail",
"standard": "standard src/**/*.js"
"test": "npm run lint && istanbul cover _mocha --report lcovonly -- -R spec test && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage",
"coverage": "npm run lint && istanbul cover _mocha test --bail",
"lint": "standard"
},
"author": "amanvirk",
"license": "MIT",
Expand All @@ -17,9 +17,9 @@
"coveralls": "^2.11.9",
"cz-conventional-changelog": "^1.1.6",
"istanbul": "^0.4.3",
"mocha": "^2.4.5",
"mocha": "^3.0.2",
"mocha-lcov-reporter": "^1.2.0",
"standard": "^7.1.0"
"standard": "^8.4.0"
},
"dependencies": {
"inflect": "^0.3.0",
Expand Down
15 changes: 0 additions & 15 deletions src/Parser/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
* file that was distributed with this source code.
*/

const snakeCaseRegex = /_(\w)/g
const arrayExpressionRegex = /(\w[^\.\*]+)(\.\*\.?)(.+)?/
const _ = require('lodash')

Expand Down Expand Up @@ -61,19 +60,6 @@ Parser.parse = function (validations) {
return _parseValidations(validationsArray)
}

/**
* convert a snake case string to camelcase.
*
* @param {String} string
*
* @return {String}
*/
Parser.toCamelCase = function (string) {
return string.replace(snakeCaseRegex, function (m, $1) {
return $1.toUpperCase()
})
}

/**
* parses an array expression to a consumable object
*
Expand All @@ -90,7 +76,6 @@ Parser.expressionCurryFor = function (field, whenMatched, otherwise) {
return whenMatched(expression[1], expression[3])
}


/**
* parses a rule and returns an object with
* field name and parsed rule.
Expand Down
4 changes: 2 additions & 2 deletions src/Sanitization/filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ SanitizationFilters.escape = function (value) {
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/\//g, '&#x2F;')
.replace(/\`/g, '&#96;')
.replace(/\//g, '&#96;')
)
}

Expand All @@ -109,7 +109,7 @@ SanitizationFilters.normalizeEmail = function (value, args) {
removeExtension: true
}

if(args instanceof Array) {
if (args instanceof Array) {
args.forEach(function (option) {
if (option === '!lc') {
options.lowercase = false
Expand Down
2 changes: 1 addition & 1 deletion src/Sanitization/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const filters = require('./filters')
* @private
*/
function _getSanitizationMethod (filter) {
return _.get(filters, Parser.toCamelCase(filter), function () {
return _.get(filters, _.camelCase(filter), function () {
throw new Error(`${filter} is not defined as a filter`)
})
}
Expand Down
2 changes: 1 addition & 1 deletion src/Validations/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -982,7 +982,7 @@ Validations.equals = function (data, field, message, args, get) {
return
}

if (targetedValue == fieldValue) {
if (targetedValue == fieldValue) { // eslint-disable-line eqeqeq
resolve('validation passed')
return
}
Expand Down
3 changes: 1 addition & 2 deletions src/Validator/engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
*/

const Validations = require('../Validations')
const Parser = require('../Parser')
const Messages = require('../Messages')
const _ = require('lodash')
const Q = require('q')
Expand Down Expand Up @@ -74,7 +73,7 @@ ValidationEngine.runValidationOnField = function (data, field, validation, messa
* @throws {Error} If validation is not found
*/
ValidationEngine.getValidationMethod = function (validation) {
return _.get(Validations, Parser.toCamelCase(validation), function () {
return _.get(Validations, _.camelCase(validation), function () {
throw new Error(`${validation} is not defined as a validation`)
})
}
2 changes: 1 addition & 1 deletion src/Validator/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ Validator.extend = function (name, method, message) {
throw new Error('Invalid arguments, extend expects a method to execute')
}
Validations[name] = method
Messages.set(name, message)
Messages.set(_.snakeCase(name), message)
}

Validator.is = require('../Raw')
Expand Down
48 changes: 23 additions & 25 deletions test/messages.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,42 +7,41 @@
*/

const Messages = require('../src/Messages')
const chai = require('chai')
const chai = require('chai')
const expect = chai.expect

describe('Messages', function () {

//////////////////
// ////////////////
// test suite 1 //
//////////////////
// ////////////////
it('should return default message when custom messages are not defined', function () {
const message = Messages.make({}, 'email', 'required')
expect(message).to.equal('required validation failed on email')
})

//////////////////
// ////////////////
// test suite 2 //
//////////////////
// ////////////////
it('should return message defined for rule', function () {
const message = Messages.make({required:'this is required'}, 'email', 'required')
const message = Messages.make({required: 'this is required'}, 'email', 'required')
expect(message).to.equal('this is required')
})

//////////////////
// ////////////////
// test suite 3 //
//////////////////
// ////////////////
it('should return message defined on field for rule', function () {
const message = Messages.make({required:'this is required','email.required':'email is required'}, 'email', 'required')
const message = Messages.make({required: 'this is required', 'email.required': 'email is required'}, 'email', 'required')
expect(message).to.equal('email is required')
})

//////////////////
// ////////////////
// test suite 4 //
//////////////////
// ////////////////
it('should construct valid error message from dynamic placholders', function () {
const message = Messages.make(
{
'email.required':'{{field}} is required'
'email.required': '{{field}} is required'
},
'email',
'required',
Expand All @@ -52,24 +51,24 @@ describe('Messages', function () {
expect(message).to.equal('email is required')
})

//////////////////
// ////////////////
// test suite 5 //
//////////////////
// ////////////////
it('should be able to use rule values as argument', function () {
const message = Messages.make(
{
'between': '{{field}} should be over {{argument.0}} and under {{argument.1}}'
},
'age',
'between',
[18,40]
[18, 40]
)
expect(message).to.equal('age should be over 18 and under 40')
})

//////////////////
// ////////////////
// test suite 6 //
//////////////////
// ////////////////
it('should be able make message out of getter function', function () {
const message = Messages.make(
{
Expand All @@ -79,18 +78,17 @@ describe('Messages', function () {
},
'age',
'between',
[18,40]
[18, 40]
)
expect(message).to.equal('age should be over 18 and under 40')
})

//////////////////
// ////////////////
// test suite 7 //
//////////////////
// ////////////////
it('should be able to set message for a given rule using set method', function () {
Messages.set('required','I need you')
const message = Messages.make({},'username','required',[])
Messages.set('required', 'I need you')
const message = Messages.make({}, 'username', 'required', [])
expect(message).to.equal('I need you')
})

});
})
60 changes: 20 additions & 40 deletions test/parser.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,16 @@
*/

const Parser = require('../src/Parser')
const chai = require('chai')
const chai = require('chai')
const expect = chai.expect

describe('Parser', function() {

//////////////////
describe('Parser', function () {
// ////////////////
// test suite 1 //
//////////////////
// ////////////////
it('should parse a rule and convert it into an object', function () {

const rules = {
name: 'required',
name: 'required'
}

const parsedRules = {
Expand All @@ -27,13 +25,13 @@ describe('Parser', function() {
args: []
}]
}
const parsed = {name:Parser.parse(rules.name)}
const parsed = {name: Parser.parse(rules.name)}
expect(parsed).deep.equal(parsedRules)
})

//////////////////
// ////////////////
// test suite 2 //
//////////////////
// ////////////////
it('should parse multiple rules and convert them into an object', function () {
const rules = {
email: 'email|required'
Expand All @@ -50,16 +48,16 @@ describe('Parser', function() {
}
]
}
const parsed = {email:Parser.parse(rules.email)}
const parsed = {email: Parser.parse(rules.email)}
expect(parsed).deep.equal(parsedRules)
})

//////////////////
// ////////////////
// test suite 3 //
//////////////////
// ////////////////
it('should not split rules already defined as array', function () {
const rules = {
email: ['email','required']
email: ['email', 'required']
}
const parsedRules = {
email: [
Expand All @@ -73,13 +71,13 @@ describe('Parser', function() {
}
]
}
const parsed = {email:Parser.parse(rules.email)}
const parsed = {email: Parser.parse(rules.email)}
expect(parsed).deep.equal(parsedRules)
})

//////////////////
// ////////////////
// test suite 4 //
//////////////////
// ////////////////
it('should extract values defined next to rules', function () {
const rules = {
password: 'required|max:4'
Expand All @@ -96,13 +94,13 @@ describe('Parser', function() {
}
]
}
const parsed = {password:Parser.parse(rules.password)}
const parsed = {password: Parser.parse(rules.password)}
expect(parsed).deep.equal(parsedRules)
})

//////////////////
// ////////////////
// test suite 4 //
//////////////////
// ////////////////
it('should extract multiple values defined next to rules', function () {
const rules = {
password: 'required|between:4,10'
Expand All @@ -115,29 +113,11 @@ describe('Parser', function() {
},
{
name: 'between',
args: ['4','10']
args: ['4', '10']
}
]
}
const parsed = {password:Parser.parse(rules.password)}
const parsed = {password: Parser.parse(rules.password)}
expect(parsed).deep.equal(parsedRules)
})

//////////////////
// test suite 5 //
//////////////////
it('should convert snake case values to camelcase', function () {
const rule = 'alpha_numeric'
const convertedRule = Parser.toCamelCase(rule)
expect(convertedRule).to.equal('alphaNumeric')
})

//////////////////
// test suite 6 //
//////////////////
it('should convert multiple snake case values to camelcase', function () {
const rule = 'before_offset_of'
const convertedRule = Parser.toCamelCase(rule)
expect(convertedRule).to.equal('beforeOffsetOf')
})
})
Loading

0 comments on commit ac6af43

Please sign in to comment.