From 2f0352b128e2034bd6fd1d6f5c33c71f5d13e08a Mon Sep 17 00:00:00 2001 From: Javier Cejudo Date: Mon, 16 Mar 2015 23:05:55 +1100 Subject: [PATCH] feat(abort): make abort reason customizable --- src/request-factory.js | 29 +++++++++++++++++++---------- test/request-factory.js | 24 ++++++++++++++++++++---- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/src/request-factory.js b/src/request-factory.js index 84a91bd..77ff119 100644 --- a/src/request-factory.js +++ b/src/request-factory.js @@ -6,9 +6,10 @@ */ angular.module('angular-abortable-requests', ['ngResource']) + .constant('DEFAULT_REASON', 'ABORT') .factory('RequestFactory', [ '$resource', '$http', - 'Util', '$q' ,function($resource, $http, - Util, $q) { + 'Util', '$q', 'DEFAULT_REASON', function($resource, $http, + Util, $q, DEFAULT_REASON) { function abortablePromiseWrap (promise, deferred, outstanding) { @@ -52,8 +53,8 @@ angular.module('angular-abortable-requests', ['ngResource']) return { promise: deferred.promise, - abort: function (){ - deferred.reject('ABORT'); + abort: function (reason) { + deferred.reject(getRejectReason(reason)); } }; @@ -64,9 +65,9 @@ angular.module('angular-abortable-requests', ['ngResource']) * Abort all the outstanding requests on * this $resource */ - resource.abortAll = function () { + resource.abortAll = function (reason) { angular.forEach(outstanding, function(deferred) { - deferred.reject('ABORT'); + deferred.reject(getRejectReason(reason)); }); outstanding = []; }; @@ -74,6 +75,14 @@ angular.module('angular-abortable-requests', ['ngResource']) return resource; } + function getRejectReason (reason) { + if (!angular.isDefined(reason)) { + return DEFAULT_REASON; + } + + return reason; + } + function getHttpConfig (url) { return { method: 'GET', @@ -93,9 +102,9 @@ angular.module('angular-abortable-requests', ['ngResource']) /* * Abort all outstanding requests */ - abortAll: function() { + abortAll: function(reason) { angular.forEach(outstanding, function(deferred) { - deferred.reject('ABORT'); + deferred.reject(getRejectReason(reason)); }); outstanding = []; }, @@ -130,8 +139,8 @@ angular.module('angular-abortable-requests', ['ngResource']) promise: deferred.promise, - abort: function() { - deferred.reject('ABORT'); + abort: function(reason) { + deferred.reject(getRejectReason(reason)); } }; } diff --git a/test/request-factory.js b/test/request-factory.js index b43071e..0b2010a 100644 --- a/test/request-factory.js +++ b/test/request-factory.js @@ -3,21 +3,30 @@ describe('RequestFactory', function () { var RequestFactory, resourceConfig, + DEFAULT_REASON, $httpBackend; beforeEach(module('angular-abortable-requests')); //Takes the api from http/resource - function abortRequestTest (api, output) { - // abort the request - api.abort(); + function abortRequestTest (api, output, reason) { + var expectedReason; + + if (!angular.isDefined(reason)) { + expectedReason = DEFAULT_REASON; + api.abort(); + } else { + expectedReason = reason; + api.abort(reason); + } + // on reject api.promise.catch(function(err){ output = err; }); $httpBackend.flush(); - expect(output).toEqual('ABORT'); + expect(output).toEqual(expectedReason); } function resolveRequestTest (api, output) { @@ -33,6 +42,7 @@ describe('RequestFactory', function () { beforeEach(inject(function ($injector) { RequestFactory = $injector.get('RequestFactory'); $httpBackend = $injector.get('$httpBackend'); + DEFAULT_REASON = $injector.get('DEFAULT_REASON'); resourceConfig = { url : '/proxy/test', options: null, @@ -82,6 +92,12 @@ describe('RequestFactory', function () { abortRequestTest(res, output); }); + it('returns a promise which can be aborted with a custom reason', function() { + var res, output; + res = rInstance.get(); + abortRequestTest(res, output, 'arbitrary reason'); + }); + it('returns a promise which resolves', function() { var res, output;