diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 5bf3e07a0757..166fc9b8b212 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -36,8 +36,8 @@ * @param {Object.=} actions Hash with declaration of custom action that should extend the * default set of resource actions. The declaration should be created in the following format: * - * {action1: {method:?, params:?, isArray:?}, - * action2: {method:?, params:?, isArray:?}, + * {action1: {method:?, params:?, isArray:?, headers:?}, + * action2: {method:?, params:?, isArray:?, headers:?}, * ...} * * Where: @@ -49,6 +49,7 @@ * - `params` – {object=} – Optional set of pre-bound parameters for this action. * - isArray – {boolean=} – If true then the returned object for this action is an array, see * `returns` section. + * - `headers` – {object=} – Optional HTTP headers to send * * @returns {Object} A resource "class" object with methods for the default set of resource actions * optionally extended with custom `actions`. The default set contains these actions: @@ -130,7 +131,7 @@ * The object returned from this function execution is a resource "class" which has "static" method * for each action in the definition. * - * Calling these methods invoke `$http` on the `url` template with the given `method` and `params`. + * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and `headers`. * When the data is returned from the server then the object is an instance of the resource type and * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD * operations (create, read, update, delete) on server-side data. @@ -362,7 +363,8 @@ angular.module('ngResource', ['ng']). $http({ method: action.method, url: route.url(extend({}, extractParams(data), action.params || {}, params)), - data: data + data: data, + headers: extend({}, action.headers || {}) }).then(function(response) { var data = response.data; diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 2981732c9683..e6bab249873c 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -14,7 +14,14 @@ describe("resource", function() { }, patch: { method: 'PATCH' + }, + conditionalPut: { + method: 'PUT', + headers: { + 'If-None-Match': '*' + } } + }); callback = jasmine.createSpy(); })); @@ -146,6 +153,15 @@ describe("resource", function() { }); + it('should send correct headers', function() { + $httpBackend.expectPUT('/CreditCard/123', undefined, function(headers) { + return headers['If-None-Match'] == "*"; + }).respond({id:123}); + + CreditCard.conditionalPut({id: {key:123}}); + }); + + it("should read partial resource", function() { $httpBackend.expect('GET', '/CreditCard').respond([{id:{key:123}}]); var ccs = CreditCard.query();