From 44b2f44f93afe226196cb11acb03eb2fa2de04c1 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Thu, 1 Dec 2011 16:20:08 -0500 Subject: fix($resource): forwardport exposing headers from 0.9.19 --- src/Resource.js | 13 +++++++------ src/service/resource.js | 10 +++++++--- test/ResourceSpec.js | 24 ++++++++++++++++-------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/Resource.js b/src/Resource.js index f4440e00..3b4a6db1 100644 --- a/src/Resource.js +++ b/src/Resource.js @@ -107,23 +107,24 @@ ResourceFactory.prototype = { } var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data)); - var future = self.$http({ + self.$http({ method: action.method, url: route.url(extend({}, extractParams(data), action.params || {}, params)), data: data }).then(function(response) { - response = response.data; - if (response) { + var data = response.data; + + if (data) { if (action.isArray) { value.length = 0; - forEach(response, function(item) { + forEach(data, function(item) { value.push(new Resource(item)); }); } else { - copy(response, value); + copy(data, value); } } - (success||noop)(value); + (success||noop)(value, response.headers); }, error); return value; diff --git a/src/service/resource.js b/src/service/resource.js index 8fe27f1b..bee5af47 100644 --- a/src/service/resource.js +++ b/src/service/resource.js @@ -141,13 +141,17 @@ * * It's worth noting that the success callback for `get`, `query` and other method gets passed - * in the response that came from the server, so one could rewrite the above example as: + * in the response that came from the server as well as $http header getter function, so one + * could rewrite the above example and get access to http headers as: *
      var User = $resource('/user/:userId', {userId:'@id'});
-     User.get({userId:123}, function(u){
+     User.get({userId:123}, function(u, getResponseHeaders){
        u.abc = true;
-       u.$save();
+       u.$save(function(u, putResponseHeaders) {
+         //u => saved user object
+         //putResponseHeaders => $http header getter
+       });
      });
    
diff --git a/test/ResourceSpec.js b/test/ResourceSpec.js index 6045bd30..7ee7aec8 100644 --- a/test/ResourceSpec.js +++ b/test/ResourceSpec.js @@ -107,7 +107,9 @@ describe("resource", function() { $httpBackend.flush(); nakedExpect(cc).toEqual({id: 123, name: 'misko'}); - expect(callback).toHaveBeenCalledWith(cc); + expect(callback).toHaveBeenCalledOnce(); + expect(callback.mostRecentCall.args[0]).toEqual(cc); + expect(callback.mostRecentCall.args[1]()).toEqual({}); })); it("should read resource", inject(function($httpBackend) { @@ -120,7 +122,8 @@ describe("resource", function() { $httpBackend.flush(); nakedExpect(cc).toEqual({id: 123, number: '9876'}); - expect(callback).toHaveBeenCalledWith(cc); + expect(callback.mostRecentCall.args[0]).toEqual(cc); + expect(callback.mostRecentCall.args[1]()).toEqual({}); })); it("should read partial resource", inject(function($httpBackend) { @@ -137,7 +140,8 @@ describe("resource", function() { $httpBackend.expect('GET', '/CreditCard/123').respond({id: {key: 123}, number: '9876'}); cc.$get(callback); $httpBackend.flush(); - expect(callback).toHaveBeenCalledWith(cc); + expect(callback.mostRecentCall.args[0]).toEqual(cc); + expect(callback.mostRecentCall.args[1]()).toEqual({}); expect(cc.number).toEqual('9876'); })); @@ -160,7 +164,8 @@ describe("resource", function() { $httpBackend.flush(); nakedExpect(ccs).toEqual([{id:1}, {id:2}]); - expect(callback).toHaveBeenCalledWith(ccs); + expect(callback.mostRecentCall.args[0]).toEqual(ccs); + expect(callback.mostRecentCall.args[1]()).toEqual({}); })); it("should have all arguments optional", inject(function($httpBackend) { @@ -180,7 +185,8 @@ describe("resource", function() { expect(callback).not.toHaveBeenCalled(); $httpBackend.flush(); - nakedExpect(callback.mostRecentCall.args).toEqual([{}]); + nakedExpect(callback.mostRecentCall.args[0]).toEqual({}); + expect(callback.mostRecentCall.args[1]()).toEqual({}); callback.reset(); $httpBackend.expect('DELETE', '/CreditCard/333').respond(204, null); @@ -188,7 +194,8 @@ describe("resource", function() { expect(callback).not.toHaveBeenCalled(); $httpBackend.flush(); - nakedExpect(callback.mostRecentCall.args).toEqual([{}]); + nakedExpect(callback.mostRecentCall.args[0]).toEqual({}); + expect(callback.mostRecentCall.args[1]()).toEqual({}); })); it('should post charge verb', inject(function($httpBackend) { @@ -205,7 +212,7 @@ describe("resource", function() { })); it('should create on save', inject(function($httpBackend) { - $httpBackend.expect('POST', '/CreditCard', '{"name":"misko"}').respond({id: 123}); + $httpBackend.expect('POST', '/CreditCard', '{"name":"misko"}').respond({id: 123}, {header1: 'a'}); var cc = new CreditCard(); expect(cc.$get).toBeDefined(); @@ -219,7 +226,8 @@ describe("resource", function() { $httpBackend.flush(); nakedExpect(cc).toEqual({id:123}); - expect(callback).toHaveBeenCalledWith(cc); + expect(callback.mostRecentCall.args[0]).toEqual(cc); + expect(callback.mostRecentCall.args[1]()).toEqual({header1: 'a'}); })); it('should not mutate the resource object if response contains no body', inject(function($httpBackend) { -- cgit v1.2.3