atsid/circuits-js

View on GitHub
js/DojoXhrDataProvider.js

Summary

Maintainability
D
1 day
Test Coverage
"use strict";
/**
 * @class circuits/DojoXhrDataProvider
 *
 * Data provider implementation that delegates directly to dojo.xhr() methods.
 */
define([
    "dojo",
    "./declare",
    "./log",
    "./DataProvider",
    "./Request"
], function (
    dojo,
    declare,
    logger,
    DataProvider,
    Request
) {
    var module = declare(DataProvider, {
            test: function (url) {
                var ret = true, xhr;
                try {
                    // try the lowest footprint synchronous request to specific url.
                    xhr = new XMLHttpRequest();
                    xhr.open("HEAD", url, false);
                    xhr.send();
                } catch (e) {
                    ret = false;
                }
                return ret;
            },

            create: function (params) {

                var payload = dojo.toJson(params.payload),
                    request = new Request({
                        url: params.url,
                        handleAs: params.handleAs || "json",
                        headers: params.headers || { "Content-Type": "application/json"},
                        postData: payload,
                        load: params.load || this.defaultLoad,
                        error: params.error || this.defaultError
                    }, dojo.xhrPost);

                logger.debug("Xhr-based store executing POST to " + params.url, payload);

                if (!params.dontExecute) {
                    request.execute();
                }
                return request;

            },

            read: function (params) {

                var request = new Request({
                    url: params.url,
                    handleAs: params.handleAs || "json", //great spot to inject a pre-process handler
                    load: params.load || this.defaultLoad,
                    error: params.error || this.defaultError
                }, dojo.xhrGet);

                logger.debug("Xhr-based store executing GET to " + params.url);

                if (!params.dontExecute) {
                    request.execute();
                }
                return request;

            },

            update: function (params) {

                var payload = dojo.toJson(params.payload),
                    request = new Request({
                        url: params.url,
                        handleAs: params.handleAs || "json",
                        headers: params.headers || { "Content-Type": "application/json"},
                        putData: payload,
                        load: params.load || this.defaultLoad,
                        error: params.error || this.defaultError
                    }, dojo.xhrPut);

                logger.debug("Xhr-based store executing PUT to " + params.url, payload);

                if (!params.dontExecute) {
                    request.execute();
                }
                return request;

            },

            del: function (params) {

                var request = new Request({
                    url: params.url,
                    load: params.load || this.defaultLoad,
                    error: params.error || this.defaultError
                }, dojo.xhrDelete);

                logger.debug("Xhr-based store executing DELETE to " + params.url);

                if (!params.dontExecute) {
                    request.execute();
                }
                return request;

            },

            defaultLoad: function (data, ioArgs) {
                logger.warn("No load handler specified for XHR call to " + ioArgs.url);
            },

            defaultError: function (data, ioArgs) {
                logger.warn("No error handler specified for XHR call to " + ioArgs.url);
                logger.error(data);
            }
        });
    return module;
});