# Source: AbstractSelfableObject.js

    (function(window)
    {
        var Gitana = window.Gitana;

        Gitana.AbstractSelfableObject = Gitana.AbstractObject.extend(
        /** @lends Gitana.AbstractSelfableObject.prototype */
        {
            /**
             * @constructs
             * @augments Gitana.AbstractObject
             *
             * @class Abstract base class for selfable Gitana document objects.
             *
             * @param {Gitana} driver
             * @param {Object} [object]
             */
            constructor: function(driver, object)
            {
                // finally chain to parent prototype
                this.base(driver, object);
            },

            //////////////////////////////////////////////////////////////////////////////////////////////////
            //
            // SELFABLE
            //
            //////////////////////////////////////////////////////////////////////////////////////////////////

            /**
             * Delete
             *
             * @chained this
             *
             * @public
             */
            del: function()
            {
                var self = this;

                var uriFunction = function()
                {
                    return self.getUri();
                };

                // NOTE: pass control back to the server instance
                return this.chainDelete(this.getPlatform(), uriFunction);
            },

            /**
             * Reload
             *
             * @chained this
             *
             * @public
             */
            reload: function()
            {
                var self = this;

                var uriFunction = function()
                {
                    return self.getUri();
                };

                return this.chainReload(null, uriFunction);
            },

            /**
             * Update
             *
             * @chained this
             *
             * @public
             */
            update: function()
            {
                var self = this;

                var uriFunction = function()
                {
                    return self.getUri();
                };

                return this.chainUpdate(null, uriFunction);
            }

        });

    })(window);