Source: lib/class/parent.js

/*jshint laxcomma: true, smarttabs: true, node:true, mocha: true*/
'use strict';
/**
 * parent.js
 * @module parent.js
 * @author Eric Satterwhite
 * @since 3.0.1
 * @requires tastypie/lib/class
 * @requires mout/array/slice
 */

var Class = require( './index' )
  , slice = require("mout/array/slice")
  ;


function attempt( fn, args, scope ){
    try{
        return [ null, fn.apply( scope, args ) ];
    } catch( err ){
        return [ err, null ];
    }
}
/**
 * @alias module:tastypie/lib/class/parent
 */
module.exports = new Class({
    /**
     * Calls a function on the parent class in the scope of the child class
     * @method module:tastypie/lib/class/parent#parent
     * @param {TYPE} name DESCRIPTION
     * @param {...Mixed} argument arguments to pass to the function
     * @return {?Object} returns the result of the parent function call
     **/
    parent: function(method){
        var parent, result;

        parent       = this._parent || this.constructor.parent;
        this._parent = parent.constructor.parent;
        result       = attempt(parent[method], slice(arguments, 1) , this );
        this._parent = parent;

        if( result[0] ){
            throw result[0];
        }

        return result[1];
    }

});