Version 3.18.1
Show:

File: datasource/js/datasource-function.js

            /**
             * Provides a DataSource implementation which can be used to retrieve data from
             * a custom function.
             *
             * @module datasource
             * @submodule datasource-function
             */
            
            /**
             * Function subclass for the DataSource Utility.
             * @class DataSource.Function
             * @extends DataSource.Local
             * @constructor
             */
            var LANG = Y.Lang,
            
                DSFn = function() {
                    DSFn.superclass.constructor.apply(this, arguments);
                };
            
            
                /////////////////////////////////////////////////////////////////////////////
                //
                // DataSource.Function static properties
                //
                /////////////////////////////////////////////////////////////////////////////
            Y.mix(DSFn, {
                /**
                 * Class name.
                 *
                 * @property NAME
                 * @type String
                 * @static
                 * @final
                 * @value "dataSourceFunction"
                 */
                NAME: "dataSourceFunction",
            
            
                /////////////////////////////////////////////////////////////////////////////
                //
                // DataSource.Function Attributes
                //
                /////////////////////////////////////////////////////////////////////////////
            
                ATTRS: {
                    /**
                    * Stores the function that will serve the response data.
                    *
                    * @attribute source
                    * @type {Any}
                    * @default null
                    */
                    source: {
                        validator: LANG.isFunction
                    }
                }
            });
            
            Y.extend(DSFn, Y.DataSource.Local, {
                /**
                 * Passes query data to the source function. Fires <code>response</code>
                 * event with the function results (synchronously).
                 *
                 * @method _defRequestFn
                 * @param e {EventFacade} Event Facade with the following properties:
                 * <dl>
                 * <dt>tId (Number)</dt> <dd>Unique transaction ID.</dd>
                 * <dt>request (Object)</dt> <dd>The request.</dd>
                 * <dt>callback (Object)</dt> <dd>The callback object with the following
                 * properties:
                 *     <dl>
                 *         <dt>success (Function)</dt> <dd>Success handler.</dd>
                 *         <dt>failure (Function)</dt> <dd>Failure handler.</dd>
                 *     </dl>
                 * </dd>
                 * <dt>cfg (Object)</dt> <dd>Configuration object.</dd>
                 * </dl>
                 * @protected
                 */
                _defRequestFn: function(e) {
                    var fn = this.get("source"),
                        payload = e.details[0];
            
                    if (fn) {
                        try {
                            payload.data = fn(e.request, this, e);
                        } catch (ex) {
                            Y.log("Function execution failure", "error", "datasource-function");
                            payload.error = ex;
                        }
                    } else {
                        Y.log("Function data failure", "error", "datasource-function");
                        payload.error = new Error("Function data failure");
                    }
            
                    this.fire("data", payload);
            
                    return e.tId;
                }
            });
            
            Y.DataSource.Function = DSFn;