/*jshint laxcomma: true, smarttabs: true, node: true*/ 'use strict'; /** * Resource Field for dealing with array values * @module tastypie/fields/array * @author Eric Satterwhite * @since 0.5.0 * @requires mout/lang/kindOf * @requires tastypie/lib/class * @requires tastypie/lib/fields/api */ var kindOf = require( 'mout/lang/kindOf' ) , Class = require( '../class' ) , ApiField = require('./api') , ArrayField ; /** * @constructor * @alias module:tastypie/fields/array * @extends module:tastypie/fields/api */ ArrayField = new Class({ inherits: ApiField ,options:{ separator: ',' , help:'converts comma separated string into an array of value' } ,type: function(){ return 'array'; } ,convert: function( value ){ var _val = []; switch( kindOf( value ).toLowerCase() ){ case 'string': _val = value.split( this.options.separator ); break; case 'array': _val = value; break; default: _val = value ? [ value ] : _val; break; } return _val; } ,hydrate: function( bundle, cb ){ this.parent('hydrate', bundle, ( err, value ) => { if( err ){ return setImmediate(cb, err, null ); } try{ value = this.convert( kindOf(value) === 'String' ? JSON.parse( value ) : value ); } catch( err ){ value = this.convert( value ); } return setImmediate(cb, null, value ); }); } }); module.exports = ArrayField;