/*!

* Chai - flag utility
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
* MIT Licensed
*/

/*!

* Module dependencies
*/

var inspect = require('./inspect'); var config = require('../config');

/**

* ### .objDisplay(object)
*
* Determines if an object or an array matches
* criteria to be inspected in-line for error
* messages or should be truncated.
*
* @param {Mixed} javascript object to inspect
* @name objDisplay
* @namespace Utils
* @api public
*/

module.exports = function objDisplay(obj) {

var str = inspect(obj)
  , type = Object.prototype.toString.call(obj);

if (config.truncateThreshold && str.length >= config.truncateThreshold) {
  if (type === '[object Function]') {
    return !obj.name || obj.name === ''
      ? '[Function]'
      : '[Function: ' + obj.name + ']';
  } else if (type === '[object Array]') {
    return '[ Array(' + obj.length + ') ]';
  } else if (type === '[object Object]') {
    var keys = Object.keys(obj)
      , kstr = keys.length > 2
        ? keys.splice(0, 2).join(', ') + ', ...'
        : keys.join(', ');
    return '{ Object (' + kstr + ') }';
  } else {
    return str;
  }
} else {
  return str;
}

};