datasource-dataparser.js revision fde564a2cb44f0d31d9eb8e59bac8c457f7d8ca6
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye/**
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye * Extends DataSource with schema-based parsing functionality.
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye *
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye * @module datasource-dataparser
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye * @requires datasource-base,dataparser-base
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye * @title DataSource DataParser Extension
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye */
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye var LANG = Y.Lang,
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye BASE = Y.DataSource,
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye /**
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye * Adds parsability to the YUI DataSource utility.
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye * @class Parsable
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye */
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye Parsable = function() {};
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond NorbyeParsable.ATTRS = {
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye /////////////////////////////////////////////////////////////////////////////
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye //
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger // DataSource Attributes
838924562130977ca1a3d3839d146fcda39ea1afKryštof Tulinger //
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye /////////////////////////////////////////////////////////////////////////////
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye /**
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye * Instance of DataParser.
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye *
b83ec1ad246d9827a68e9bb6ec2669908ab75d98Knut Anders Hatlen * @attribute parser
b83ec1ad246d9827a68e9bb6ec2669908ab75d98Knut Anders Hatlen * @type Y.DataParser.Base
013b5dd2cc9412960b4ebb2fcce23dc54c901a26Trond Norbye * @default null
013b5dd2cc9412960b4ebb2fcce23dc54c901a26Trond Norbye */
a92ced6cf7126aca5fed821c5349a642196c67d9Trond Norbye parser: {
838924562130977ca1a3d3839d146fcda39ea1afKryštof Tulinger value: null,
a92ced6cf7126aca5fed821c5349a642196c67d9Trond Norbye validator: function(value) {
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye return ((value instanceof Y.DataParser.Base) || (value === null));
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye }
838924562130977ca1a3d3839d146fcda39ea1afKryštof Tulinger }
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye};
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond NorbyeParsable.prototype = {
b83ec1ad246d9827a68e9bb6ec2669908ab75d98Knut Anders Hatlen /**
838924562130977ca1a3d3839d146fcda39ea1afKryštof Tulinger * Overriding <code>data</code> event handler parses raw data into a normalized response.
838924562130977ca1a3d3839d146fcda39ea1afKryštof Tulinger *
a92ced6cf7126aca5fed821c5349a642196c67d9Trond Norbye * @method _handleData
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye * @param e {Event.Facade} Event Facade.
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger * @param o {Object} Object with the following properties:
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger * <dl>
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger * <dt>tId (Number)</dt> <dd>Unique transaction ID.</dd>
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger * <dt>request (Object)</dt> <dd>The request.</dd>
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger * <dt>callback (Object)</dt> <dd>The callback object.</dd>
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger * <dt>data (Object)</dt> <dd>The raw response.</dd>
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger * </dl>
d470e59c0405a31b7e5f194bd9b705e91b12bf0aKryštof Tulinger * @protected
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye */
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye _handleData: function(e, o) {
eb1776903fd1f998009e97470a65fba8a499a0d9Lubos Kosco var response = (this.get("parser") && this.get("parser").parse(o.data));
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye if(!response) {
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye response = {
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye meta: {},
eb1776903fd1f998009e97470a65fba8a499a0d9Lubos Kosco results: o.data
f91fda86b928fae2fbfda0e5691e031cdd9c36e4Lubos Kosco };
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye }
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye this.fire("response", null, Y.mix(o, response));
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye }
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye};
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond NorbyeY.Base.build(BASE, [Parsable], {
9be8460a4d4915ca1a46021adc07b75568cb47eaTrond Norbye dynamic: false
f91fda86b928fae2fbfda0e5691e031cdd9c36e4Lubos Kosco});
eb1776903fd1f998009e97470a65fba8a499a0d9Lubos Kosco