      1 var Type = require("./index").Type,
      2  comb = require("comb");
      3
      4 //Boolean Types
      5 var setBoolType = function() {
      6     return function(val) {
      7         if (!comb.isBoolean(val)) {
      8             if (val == "true") {
      9                 val = true;
     10             } else if (val == "false") {
     11                 val = false;
     12             } else {
     13                 throw new Error("Invalid Boolean value");
     14             }
     15         }
     16         return val;
     17     };
     18 };
     19
     20 var checkBooleanType = function(type) {
     21     return function(val) {
     22         if (!comb.isBoolean(val)) {
     23             throw new Error(type + " requires a boolean type");
     24         }
     25     };
     26 };
     27
     28
     29 var boolDefaults = {
     30     allowNull : true,
     31     primaryKey : false,
     32     foreignKey : false,
     33     "default" : null,
     34     description : ""
     35 };
     36
     37 /**
     38  * Mysql BOOL datatype
     39  *
     40  * @function
     41  * @param {Object} options options for the BOOL data type.
     42  * @param {Boolean} [options.allowNull=true] should the field allow null
     43  * @param {Boolean} [options.default = null] default value of the field
     44  * @param {Boolean} [options.unsigned = false] unsigned number
     45  * @param {Boolean} [options.description = ""] description fo the field.
     46  *
     47  * @return {Type} A Type representing a BOOL column.
     48  *
     49  * @name BOOL
     50  * @memberOf moose.adapters.mysql.types
     51  *
     52  */
     53 exports.BOOL = function(options) {
     54     var ops = comb.merge({}, boolDefaults, {type : "BOOL"}, options || {});
     55     ops.setSql = setBoolType();
     56     ops.checkType = checkBooleanType(ops.type);
     57     return new Type(ops);
     58 };
     59
     60 /**
     61  * Mysql BOOLEAN datatype
     62  *
     63  * @function
     64  * @param {Object} options options for the BOOLEAN data type.
     65  * @param {Boolean} [options.allowNull=true] should the field allow null
     66  * @param {Boolean} [options.default = null] default value of the field
     67  * @param {Boolean} [options.unsigned = false] unsigned number
     68  * @param {Boolean} [options.description = ""] description fo the field.
     69  *
     70  * @return {Type} A Type representing a BOOLEAN column.
     71  *
     72  * @name BOOLEAN
     73  * @memberOf moose.adapters.mysql.types
     74  *
     75  */
     76 exports.BOOLEAN = function(options) {
     77     var ops = comb.merge({}, boolDefaults, {type : "BOOLEAN"}, options || {});
     78     ops.setSql = setBoolType();
     79     ops.checkType = checkBooleanType(ops.type);
     80     return new Type(ops);
     81 };
     82