Skip to content

Commit d0cdf28

Browse files
committed
Added support for 'boolean' type.
1 parent cd6ce81 commit d0cdf28

File tree

3 files changed

+45
-14
lines changed

3 files changed

+45
-14
lines changed

src/plugins/mongodb-support/plugin.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
}
8080

8181
rule.value.forEach(function(v, i) {
82-
values.push(changeType(v, rule.type));
82+
values.push(changeType(v, rule.type, 'mongo'));
8383
});
8484
}
8585

@@ -102,15 +102,24 @@
102102
// UTILITIES
103103
// ===============================
104104
/**
105-
* Change type of a value to int or float
105+
* Change type of a value to int, float or boolean
106106
* @param value {mixed}
107107
* @param type {string}
108108
* @return {mixed}
109109
*/
110-
function changeType(value, type) {
110+
function changeType(value, type, db) {
111111
switch (type) {
112112
case 'integer': return parseInt(value);
113113
case 'double': return parseFloat(value);
114+
case 'boolean':
115+
var bool = value.trim().toLowerCase() === "true" || value.trim() === '1' || value === 1;
116+
if (db === 'sql') {
117+
return bool ? 1 : 0;
118+
}
119+
else if (db === 'mongo') {
120+
return bool;
121+
}
122+
break;
114123
default: return value;
115124
}
116125
}

src/plugins/sql-support/plugin.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@
9292
value+= sql.sep;
9393
}
9494

95-
if (rule.type=='integer' || rule.type=='double') {
96-
v = changeType(v, rule.type);
95+
if (rule.type=='integer' || rule.type=='double' || rule.type=='boolean') {
96+
v = changeType(v, rule.type, 'sql');
9797
}
9898
else if (!stmt) {
9999
v = escapeString(v);
@@ -174,15 +174,24 @@
174174
// UTILITIES
175175
// ===============================
176176
/**
177-
* Change type of a value to int or float
177+
* Change type of a value to int, float or boolean
178178
* @param value {mixed}
179179
* @param type {string}
180180
* @return {mixed}
181181
*/
182-
function changeType(value, type) {
182+
function changeType(value, type, db) {
183183
switch (type) {
184184
case 'integer': return parseInt(value);
185185
case 'double': return parseFloat(value);
186+
case 'boolean':
187+
var bool = value.trim().toLowerCase() === "true" || value.trim() === '1' || value === 1;
188+
if (db === 'sql') {
189+
return bool ? 1 : 0;
190+
}
191+
else if (db === 'mongo') {
192+
return bool;
193+
}
194+
break;
186195
default: return value;
187196
}
188197
}

src/query-builder.js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
'double',
1919
'date',
2020
'time',
21-
'datetime'
21+
'datetime',
22+
'boolean'
2223
],
2324
internalTypes = [
2425
'string',
2526
'number',
26-
'datetime'
27+
'datetime',
28+
'boolean'
2729
],
2830
inputs = [
2931
'text',
@@ -124,13 +126,14 @@
124126
"number_wrong_step": "Must be a multiple of {0}",
125127
"datetime_invalid": "Invalid date format ({0})",
126128
"datetime_exceed_min": "Must be after {0}",
127-
"datetime_exceed_max": "Must be before {0}"
129+
"datetime_exceed_max": "Must be before {0}",
130+
"boolean_not_valid": "Not a boolean"
128131
}
129132
},
130133

131134
operators: [
132-
{type: 'equal', accept_values: 1, apply_to: ['string', 'number', 'datetime']},
133-
{type: 'not_equal', accept_values: 1, apply_to: ['string', 'number', 'datetime']},
135+
{type: 'equal', accept_values: 1, apply_to: ['string', 'number', 'datetime', 'boolean']},
136+
{type: 'not_equal', accept_values: 1, apply_to: ['string', 'number', 'datetime', 'boolean']},
134137
{type: 'in', accept_values: 1, apply_to: ['string', 'number', 'datetime']},
135138
{type: 'not_in', accept_values: 1, apply_to: ['string', 'number', 'datetime']},
136139
{type: 'less', accept_values: 1, apply_to: ['number', 'datetime']},
@@ -146,8 +149,8 @@
146149
{type: 'not_ends_with', accept_values: 1, apply_to: ['string']},
147150
{type: 'is_empty', accept_values: 0, apply_to: ['string']},
148151
{type: 'is_not_empty', accept_values: 0, apply_to: ['string']},
149-
{type: 'is_null', accept_values: 0, apply_to: ['string', 'number', 'datetime']},
150-
{type: 'is_not_null', accept_values: 0, apply_to: ['string', 'number', 'datetime']}
152+
{type: 'is_null', accept_values: 0, apply_to: ['string', 'number', 'datetime', 'boolean']},
153+
{type: 'is_not_null', accept_values: 0, apply_to: ['string', 'number', 'datetime', 'boolean']}
151154
],
152155

153156
icons: {
@@ -532,6 +535,9 @@
532535
case 'date': case 'time': case 'datetime':
533536
filter.internalType = 'datetime';
534537
break;
538+
case 'boolean':
539+
filter.internalType = 'boolean';
540+
break;
535541
}
536542

537543
switch (filter.input) {
@@ -1052,6 +1058,13 @@
10521058
}
10531059
}
10541060
break;
1061+
1062+
case 'boolean':
1063+
if (value[i].trim().toLowerCase() !== 'true' && value[i].trim().toLowerCase() !== 'false' &&
1064+
value[i].trim() !== '1' && value[i].trim() !== '0' && value[i] !== 1 && value[i] !== 0) {
1065+
result = ['boolean_not_valid'];
1066+
break;
1067+
}
10551068
}
10561069
}
10571070

0 commit comments

Comments
 (0)