diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 5bf3e07a0757..d133c3c01bee 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -359,12 +359,18 @@ angular.module('ngResource', ['ng']). } var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data)); - $http({ + var config = angular.extend({ method: action.method, url: route.url(extend({}, extractParams(data), action.params || {}, params)), data: data - }).then(function(response) { - var data = response.data; + }, (action.httpConfig || {})); + $http(config).then(function(response) { + var data; + if (action.parseResponse) { + data = action.parseResponse(response); + } else { + data = response.data; + } if (data) { if (action.isArray) { diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 2981732c9683..5d32fcbc56b4 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -115,6 +115,23 @@ describe("resource", function() { expect(item).toEqualData({id: 'abc'}); }); + it("should let custom action httpConfig and parseResponse override defaults", function() { + $httpBackend.expect('GET', '/Book/234').respond({result: {author: 'Dickens'}}); + var Book = $resource( + '/Book/:id', + {id:'@bookId'}, + {get: { + method: 'POST', + parseResponse: function(response) { return response.data.result }, + httpConfig: { method: 'GET' } //custom httpConfig overrides default + }} + ); + var book = Book.get({bookId: 234}); + + $httpBackend.flush(); + expect(book).toEqualData({author: 'Dickens'}); + }); + it("should create resource", function() { $httpBackend.expect('POST', '/CreditCard', '{"name":"misko"}').respond({id: 123, name: 'misko'});