datasource-io-debug.js revision 2fe13ddab136a6eb6239d89e5e064e09d9e1bb92
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('datasource-io', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Provides a DataSource implementation which can be used to retrieve data via the IO Utility.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module datasource
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule datasource-io
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * IO subclass for the DataSource Utility.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @class DataSource.IO
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @extends DataSource.Local
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @constructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar DSIO = function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DSIO.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // DataSource.IO static properties
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.mix(DSIO, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Class name.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property NAME
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @final
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @value "dataSourceIO"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass NAME: "dataSourceIO",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // DataSource.IO Attributes
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ATTRS: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Pointer to IO Utility.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute io
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.io
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default Y.io
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass io: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: Y.io,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass cloneDefaultValue: false
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Default IO Config.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute ioConfig
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default null
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ioConfig: {
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith value: null
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.extend(DSIO, Y.DataSource.Local, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Internal init() handler.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method initializer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param config {Object} Config object.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass initializer: function(config) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._queue = {interval:null, conn:null, requests:[]};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * IO success callback.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method successHandler
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param id {String} Transaction ID.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param response {String} Response.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param e {Event.Facade} Event facade.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass successHandler: function (id, response, e) {
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith var defIOConfig = this.get("ioConfig"),
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith payload = e.details[0];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass delete Y.DataSource.Local.transactions[e.tId];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith payload.data = response;
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith this.fire("data", payload);
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log("Received IO data response for \"" + e.request + "\"", "info", "datasource-io");
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (defIOConfig && defIOConfig.on && defIOConfig.on.success) {
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith defIOConfig.on.success.apply(defIOConfig.context || Y, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * IO failure callback.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method failureHandler
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param id {String} Transaction ID.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param response {String} Response.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param e {Event.Facade} Event facade.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass failureHandler: function (id, response, e) {
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith var defIOConfig = this.get("ioConfig"),
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith payload = e.details[0];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass delete Y.DataSource.Local.transactions[e.tId];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith payload.error = new Error("IO data failure");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log("IO data failure", "error", "datasource-io");
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith payload.data = response;
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith this.fire("data", payload);
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log("Received IO data failure for \"" + e.request + "\"", "info", "datasource-io");
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (defIOConfig && defIOConfig.on && defIOConfig.on.failure) {
2fe13ddab136a6eb6239d89e5e064e09d9e1bb92Luke Smith defIOConfig.on.failure.apply(defIOConfig.context || Y, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _queue
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Object literal to manage asynchronous request/response
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * cycles enabled if queue needs to be managed (asyncMode/ioConnMode):
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>interval {Number}</dt>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dd>Interval ID of in-progress queue.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>conn</dt>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dd>In-progress connection identifier (if applicable).</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>requests {Object[]}</dt>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dd>Array of queued request objects: {request:request, callback:callback}.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default {interval:null, conn:null, requests:[]}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _queue: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Passes query string to IO. Fires <code>response</code> event when
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * response is received asynchronously.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defRequestFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param e {Event.Facade} Event Facade with the following properties:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>tId (Number)</dt> <dd>Unique transaction ID.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>request (Object)</dt> <dd>The request.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>callback (Object)</dt> <dd>The callback object with the following properties:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>success (Function)</dt> <dd>Success handler.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>failure (Function)</dt> <dd>Failure handler.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>cfg (Object)</dt> <dd>Configuration object.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defRequestFn: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var uri = this.get("source"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass io = this.get("io"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass defIOConfig = this.get("ioConfig"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass request = e.request,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass cfg = Y.merge(defIOConfig, e.cfg, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass on: Y.merge(defIOConfig, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass success: this.successHandler,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass failure: this.failureHandler
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass context: this,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass "arguments": e
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Support for POST transactions
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(Y.Lang.isString(request)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(cfg.method && (cfg.method.toUpperCase() === "POST")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass cfg.data = cfg.data ? cfg.data+request : request;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass uri += request;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.DataSource.Local.transactions[e.tId] = io(uri, cfg);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return e.tId;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.DataSource.IO = DSIO;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{requires:['datasource-local', 'io-base']});