Skip to content

Commit e9ec651

Browse files
Merge pull request #17 from FieldVal/develop
Fixed check reuse bug and docs updates
2 parents aadb457 + 447d2c6 commit e9ec651

File tree

12 files changed

+179
-138
lines changed

12 files changed

+179
-138
lines changed

docs/fieldval.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
"type": "js",
1212
"runnable": true,
1313
"js_external": "__CURRENT_DOMAIN__/demo_files/fieldval.js",
14-
"runnable_contents": "var data = {\n\t\"my_email\": \"almost@@example.com\",\n \"my_integer\": \"clearly not an integer\",\n \"multiple_of_three\": 8\n}\n\nvar validator = new FieldVal(data);\nvalidator.get(\"my_email\", BasicVal.email(true)());\nvalidator.get(\"my_integer\", BasicVal.integer(true));\nvalidator.get(\"multiple_of_three\", BasicVal.integer(true), function(val){\n if(val % 3 !== 0){\n return {\n \"error_message\": \"Not a multiple of three\",\n \"error\": 1000\n }\n }\n});\n\ndocument.write(\"<pre>\"+JSON.stringify(validator.end(),null,4)+\"</pre>\");",
15-
"contents": "var validator = new FieldVal(data);\nvalidator.get(\"my_email\", BasicVal.email(true)());\nvalidator.get(\"my_integer\", BasicVal.integer(true));\nvalidator.get(\"multiple_of_three\", BasicVal.integer(true), function(val){\n if(val % 3 !== 0){\n return {\n \"error_message\": \"Not a multiple of three\",\n \"error\": 1000\n }\n }\n});\n\nconsole.log(validator.end());"
14+
"runnable_contents": "var data = {\n\t\"my_email\": \"almost@@example.com\",\n \"my_integer\": \"clearly not an integer\",\n \"multiple_of_three\": 8\n}\n\nvar validator = new FieldVal(data);\nvalidator.get(\"my_email\", BasicVal.email(true));\nvalidator.get(\"my_integer\", BasicVal.integer(true));\nvalidator.get(\"multiple_of_three\", BasicVal.integer(true), function(val){\n if(val % 3 !== 0){\n return {\n \"error_message\": \"Not a multiple of three\",\n \"error\": 1000\n }\n }\n});\n\ndocument.write(\"<pre>\"+JSON.stringify(validator.end(),null,4)+\"</pre>\");",
15+
"contents": "var validator = new FieldVal(data);\nvalidator.get(\"my_email\", BasicVal.email(true));\nvalidator.get(\"my_integer\", BasicVal.integer(true));\nvalidator.get(\"multiple_of_three\", BasicVal.integer(true), function(val){\n if(val % 3 !== 0){\n return {\n \"error_message\": \"Not a multiple of three\",\n \"error\": 1000\n }\n }\n});\n\nconsole.log(validator.end());"
1616
}
1717
],
1818
"text": "<p>FieldVal is a Javascript library that allows you to easily create readable and structured error reports for any data.</p>\n<p>It works on both the front end in the browser and on the back end using Node.</p>\n<p>FieldVal comes with a collection of checks called BasicVal. These are standard checks such as email, numeric limits etc., but you can write your own FieldVal checks with simple functions.</p>\n<p>To start validating, pass your data to a new instance of <code>FieldVal</code>.</p>\n<p>Then use <code>.get(key_name, checks...)</code> to retrieve values whilst simultaneously building an error report.</p>\n<p>When you&#39;ve finished validating, use <code>.end()</code> to retrieve the error report or null if there were no errors.</p>\n<h4 id=\"run-the-code-example-to-the-right\">Run the code example to the right</h4>\n<p>Try out FieldVal using CodePen by clicking the &quot;Run on Codepen&quot; button below the example.</p>\n<p>Try changing the data provided to <code>FieldVal</code> to see how the error changes.</p>\n",
@@ -30,7 +30,7 @@
3030
"name": "Browser Usage",
3131
"code": [
3232
{
33-
"contents": "<script type=\"text/javascript\" src=\"/PATH_TO/fieldval.js\"></script>script>\n<script type=\"text/javascript\">\n\nvar validator = new FieldVal({\n\t\"my_key\": 37\n})\n\nvar my_key = validator.get(\"my_key\", BasicVal.integer(true), BasicVal.minimum(40));\n\nconsole.log(validator.end());\n\n</script>"
33+
"contents": "<script type=\"text/javascript\" src=\"/PATH_TO/fieldval.js\"></script>\n<script type=\"text/javascript\">\n\nvar validator = new FieldVal({\n\t\"my_key\": 37\n})\n\nvar my_key = validator.get(\"my_key\", BasicVal.integer(true), BasicVal.minimum(40));\n\nconsole.log(validator.end());\n\n</script>"
3434
}
3535
],
3636
"text": "<p>To use FieldVal in the browser as demonstrated above, include a script tag for the <code>fieldval.js</code> file.</p>\n",
@@ -90,7 +90,7 @@
9090
"name": "Validating nested objects",
9191
"code": [
9292
{
93-
"contents": "var validator = new FieldVal(val);\nvalidator.get(\"name\", BasicVal.string(true));\nvalidator.get(\"email\", BasicVal.email(true)());\nvalidator.get(\"enquiry\", BasicVal.object(true), function(enquiry){\n var inner_validator = new FieldVal(enquiry);\n inner_validator.get(\"type\", BasicVal.string(true), BasicVal.one_of([\"One\",\"Two\"]))\n inner_validator.get(\"message\", BasicVal.string(true))\n return inner_validator.end();\n});\n\nvalidator.end();"
93+
"contents": "var validator = new FieldVal(val);\nvalidator.get(\"name\", BasicVal.string(true));\nvalidator.get(\"email\", BasicVal.email(true));\nvalidator.get(\"enquiry\", BasicVal.object(true), function(enquiry){\n var inner_validator = new FieldVal(enquiry);\n inner_validator.get(\"type\", BasicVal.string(true), BasicVal.one_of([\"One\",\"Two\"]))\n inner_validator.get(\"message\", BasicVal.string(true))\n return inner_validator.end();\n});\n\nvalidator.end();"
9494
}
9595
],
9696
"text": "<p>Nested objects can be validated using an inner_validator in a <a href=\"/docs/fieldval/Check%20Functions\">custom check function</a> that is validating the object.</p>\n"

docs_src/Examples/Nested/Nested.code

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var validator = new FieldVal(val);
22
validator.get("name", BasicVal.string(true));
3-
validator.get("email", BasicVal.email(true)());
3+
validator.get("email", BasicVal.email(true));
44
validator.get("enquiry", BasicVal.object(true), function(enquiry){
55
var inner_validator = new FieldVal(enquiry);
66
inner_validator.get("type", BasicVal.string(true), BasicVal.one_of(["One","Two"]))

docs_src/FieldVal.code

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
var validator = new FieldVal(data);
2-
validator.get("my_email", BasicVal.email(true)());
2+
validator.get("my_email", BasicVal.email(true));
33
validator.get("my_integer", BasicVal.integer(true));
44
validator.get("multiple_of_three", BasicVal.integer(true), function(val){
55
if(val % 3 !== 0){

docs_src/FieldVal_runnable.code

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ var data = {
55
}
66

77
var validator = new FieldVal(data);
8-
validator.get("my_email", BasicVal.email(true)());
8+
validator.get("my_email", BasicVal.email(true));
99
validator.get("my_integer", BasicVal.integer(true));
1010
validator.get("multiple_of_three", BasicVal.integer(true), function(val){
1111
if(val % 3 !== 0){

docs_src/GetBrowser/GetBrowser.code

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<script type="text/javascript" src="/PATH_TO/fieldval.js"></script>script>
1+
<script type="text/javascript" src="/PATH_TO/fieldval.js"></script>
22
<script type="text/javascript">
33

44
var validator = new FieldVal({

fieldval.js

Lines changed: 36 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,6 @@ var FieldVal = (function(){
464464
* to prevent multiple instances of FieldVal (due to being
465465
* a dependency) having not-strictly-equal constants. */
466466
FieldVal.ASYNC = -1;//Used to indicate async functions
467-
FieldVal.REQUIRED_ERROR = Math.sqrt;
468467
FieldVal.NOT_REQUIRED_BUT_MISSING = Math.floor;
469468

470469
FieldVal.FIELD_MISSING = 1;
@@ -606,41 +605,19 @@ var FieldVal = (function(){
606605
}
607606
shared_options.had_error = true;
608607

609-
if (response === FieldVal.REQUIRED_ERROR) {
610-
611-
if (shared_options.field_name!==undefined) {
612-
shared_options.validator.error(shared_options.field_name, FieldVal.create_error(FieldVal.MISSING_ERROR, flags));
613-
use_check_done();
614-
return;
615-
} else {
616-
if (shared_options.existing_validator) {
617-
618-
shared_options.validator.error(
619-
FieldVal.create_error(FieldVal.MISSING_ERROR, flags)
620-
);
621-
use_check_done();
622-
return;
623-
} else {
624-
shared_options.return_missing = true;
625-
use_check_done();
626-
return;
627-
}
628-
}
629-
} else if (response === FieldVal.NOT_REQUIRED_BUT_MISSING) {
608+
if (response === FieldVal.NOT_REQUIRED_BUT_MISSING) {
630609
//NOT_REQUIRED_BUT_MISSING means "don't process proceeding checks, but don't throw an error"
631610
use_check_done();
632611
} else {
633612

634-
if (shared_options.existing_validator) {
635-
if (shared_options.field_name!==undefined) {
636-
shared_options.validator.invalid(shared_options.field_name, response);
637-
} else {
638-
shared_options.validator.error(response);
639-
}
613+
if (shared_options.field_name!==undefined) {
614+
shared_options.validator.error(shared_options.field_name, response);
640615
use_check_done();
616+
return;
641617
} else {
642618
shared_options.validator.error(response);
643619
use_check_done();
620+
return;
644621
}
645622
}
646623
} else {
@@ -691,7 +668,6 @@ var FieldVal = (function(){
691668
},
692669
options: options,
693670
stop: false,
694-
return_missing: false,
695671
had_error: false
696672
};
697673

@@ -724,12 +700,6 @@ var FieldVal = (function(){
724700
}
725701
}
726702

727-
if (shared_options.return_missing) {
728-
finish(FieldVal.REQUIRED_ERROR);
729-
shared_options.validator.async_call_ended();
730-
return;
731-
}
732-
733703
if(!shared_options.existing_validator){
734704
finish(shared_options.validator.end());
735705
shared_options.validator.async_call_ended();
@@ -753,21 +723,30 @@ var FieldVal = (function(){
753723
}
754724
};
755725

726+
FieldVal.merge_flags_and_checks = function(flags, check){
727+
var new_flags = {};
728+
if(flags){
729+
for(var i in flags){
730+
if(flags.hasOwnProperty(i)){
731+
new_flags[i] = flags[i];
732+
}
733+
}
734+
}
735+
new_flags.check = check;
736+
return new_flags;
737+
}
738+
756739
FieldVal.required = function (required, flags) {//required defaults to true
757740
var check = function (value) {
758741
if (value === null || value === undefined) {
759742
if (required || required === undefined) {
760-
return FieldVal.REQUIRED_ERROR;
743+
return FieldVal.create_error(FieldVal.MISSING_ERROR, flags);
761744
}
762745

763746
return FieldVal.NOT_REQUIRED_BUT_MISSING;
764747
}
765748
};
766-
if (flags !== undefined) {
767-
flags.check = check;
768-
return flags;
769-
}
770-
return check;
749+
return FieldVal.merge_flags_and_checks(flags,check);
771750
};
772751

773752
FieldVal.type = function (desired_type, flags) {
@@ -776,7 +755,7 @@ var FieldVal = (function(){
776755

777756
var check = function (value, emit) {
778757

779-
var required_error = FieldVal.required(required)(value);
758+
var required_error = FieldVal.required(required, flags || {}).check(value);
780759

781760
if (required_error) {
782761
return required_error;
@@ -796,12 +775,7 @@ var FieldVal = (function(){
796775
}
797776
};
798777

799-
if (flags !== undefined) {
800-
flags.check = check;
801-
return flags;
802-
}
803-
804-
return check;
778+
return FieldVal.merge_flags_and_checks(flags,check);
805779
};
806780

807781
FieldVal.create_error = function (default_error, flags) {
@@ -1357,15 +1331,24 @@ var FieldVal = (function(){
13571331
};
13581332
},
13591333
merge_required_and_flags: function(required, flags){
1334+
var new_flags = {};
13601335
if((typeof required)==="object"){
13611336
flags = required;
1337+
required = undefined;
13621338
} else {
13631339
if(!flags){
13641340
flags = {};
13651341
}
1366-
flags.required = required;
13671342
}
1368-
return flags;
1343+
for(var i in flags){
1344+
if(flags.hasOwnProperty(i)){
1345+
new_flags[i] = flags[i];
1346+
}
1347+
}
1348+
if(required!==undefined){
1349+
new_flags.required = required;
1350+
}
1351+
return new_flags;
13691352
},
13701353
integer: function(required, flags){
13711354
return FieldVal.type("integer",BasicVal.merge_required_and_flags(required, flags));
@@ -1401,7 +1384,7 @@ var FieldVal = (function(){
14011384
}
14021385
if (value.length === 0) {
14031386
if(required || required===undefined){
1404-
return FieldVal.REQUIRED_ERROR;
1387+
return FieldVal.create_error(FieldVal.MISSING_ERROR, flags);
14051388
} else {
14061389
return FieldVal.NOT_REQUIRED_BUT_MISSING;
14071390
}
@@ -1460,7 +1443,7 @@ var FieldVal = (function(){
14601443
no_whitespace: function(flags) {
14611444
var check = function(value) {
14621445
if (/\s/.test(value)){
1463-
return FieldVal.create_error(BasicVal.errors.contains_whitespace, flags, max_len);
1446+
return FieldVal.create_error(BasicVal.errors.contains_whitespace, flags);
14641447
}
14651448
};
14661449
if(flags){
@@ -1688,9 +1671,7 @@ var FieldVal = (function(){
16881671
if(res===FieldVal.ASYNC){
16891672
throw new Error(".each used with async checks, use .each_async.");
16901673
}
1691-
if (res === FieldVal.REQUIRED_ERROR){
1692-
validator.missing("" + i);
1693-
} else if (res) {
1674+
if (res) {
16941675
validator.invalid("" + i, res);
16951676
}
16961677
};

fieldval.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "fieldval",
3-
"version": "0.4.0",
3+
"version": "0.4.1",
44
"description": "fieldval",
55
"main": "fieldval.js",
66
"scripts": {

src/BasicVal.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,15 +156,24 @@ var BasicVal = (function(){
156156
};
157157
},
158158
merge_required_and_flags: function(required, flags){
159+
var new_flags = {};
159160
if((typeof required)==="object"){
160161
flags = required;
162+
required = undefined;
161163
} else {
162164
if(!flags){
163165
flags = {};
164166
}
165-
flags.required = required;
166167
}
167-
return flags;
168+
for(var i in flags){
169+
if(flags.hasOwnProperty(i)){
170+
new_flags[i] = flags[i];
171+
}
172+
}
173+
if(required!==undefined){
174+
new_flags.required = required;
175+
}
176+
return new_flags;
168177
},
169178
integer: function(required, flags){
170179
return FieldVal.type("integer",BasicVal.merge_required_and_flags(required, flags));
@@ -200,7 +209,7 @@ var BasicVal = (function(){
200209
}
201210
if (value.length === 0) {
202211
if(required || required===undefined){
203-
return FieldVal.REQUIRED_ERROR;
212+
return FieldVal.create_error(FieldVal.MISSING_ERROR, flags);
204213
} else {
205214
return FieldVal.NOT_REQUIRED_BUT_MISSING;
206215
}
@@ -259,7 +268,7 @@ var BasicVal = (function(){
259268
no_whitespace: function(flags) {
260269
var check = function(value) {
261270
if (/\s/.test(value)){
262-
return FieldVal.create_error(BasicVal.errors.contains_whitespace, flags, max_len);
271+
return FieldVal.create_error(BasicVal.errors.contains_whitespace, flags);
263272
}
264273
};
265274
if(flags){
@@ -487,9 +496,7 @@ var BasicVal = (function(){
487496
if(res===FieldVal.ASYNC){
488497
throw new Error(".each used with async checks, use .each_async.");
489498
}
490-
if (res === FieldVal.REQUIRED_ERROR){
491-
validator.missing("" + i);
492-
} else if (res) {
499+
if (res) {
493500
validator.invalid("" + i, res);
494501
}
495502
};

0 commit comments

Comments
 (0)