Source: lib/fields/date.js

/*jshint laxcomma: true, smarttabs: true, node: true*/
'use strict';
/**
 * Field class for dealing for formatted Dates with out Time information
 * @module tastypie/fields/date
 * @author Eric Satterwhite
 * @since 0.5.0
 * @requires tastypie/lib/class
 * @requires tastypie/lib/fields/api
 */

var util           = require( 'util' )
  , boom           = require( 'boom' )
  , strftime       = require( 'mout/date/strftime' )
  , isString       = require( 'mout/lang/isString'  )
  , Class          = require( '../class' )
  , ApiField       = require('./api')
  , DATE_REGEX     = /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/
  , sample         = new Date('Jan 31, 1960')
  , DateField
  ;

/**
 * @constructor
 * @alias module:tastypie/fields/date
 * @extends module:tastypie/fields/api
 * @param {Object} [options]
 * @param {String} [options.format=%F]
 * @example var x = new tastypie/fields/date();
 */
DateField = new Class({
    inherits: ApiField
    ,options:{
        format:'%F'
       ,help:'Converts Date object to and from YYYY-MM-DD'
    }

    ,convert: function convert( value ){
      if( value && isString( value ) ){
        var valid = value.match( DATE_REGEX );
        if( !valid ){
            this.emit('error', boom.create(400, util.format( "Invalid Date String for field %s: %s", this.options.name, value ) ) );
        }

        return new Date( valid[1], valid[2] ? valid[2]-1:valid[2] , valid[3]);
      }

      return value;
    }

    ,dehydrate: function( obj, cb ){
      var that = this;
      this.parent('dehydrate', obj, function( err, value ){
        return cb( err, value ? strftime( value, that.options.format ) : value );
      });
    }

    ,hydrate: function( bundle, cb ){
      this.parent('hydrate', bundle, function( err, value ){
        var data = value.match( DATE_REGEX );
        return cb( err, new Date( data[1], data[2], data[3] ) );
      });
    }

    ,format: function(){
      return strftime( sample, this.options.format );
    }

    ,type: function( ){
      return 'date';
    }
});

module.exports = DateField;