From b94ca12fa0b027d8592f5717e038b7b116c59384 Mon Sep 17 00:00:00 2001 From: Leandro Ostera Date: Tue, 14 May 2013 02:41:01 -0300 Subject: [PATCH] feat($resource): support an unescaped URL port The colon character is used to identify parameters in $resource. This meant that we had to escape the colon used in a port. It turns out that this is not necessary if we assume that parameter names cannot consist of only digits. If the parameter consists only of numbers, then it's a port. Closes #2778 --- src/ngResource/resource.js | 5 ++--- test/ngResource/resourceSpec.js | 7 +++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 827886a3cbd9..2df593c1e04d 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -31,8 +31,7 @@ * * @param {string} url A parametrized URL template with parameters prefixed by `:` as in * `/user/:username`. If you are using a URL with a port number (e.g. - * `http://example.com:8080/api`), you'll need to escape the colon character before the port - * number, like this: `$resource('http://example.com\\:8080/api')`. + * `http://example.com:8080/api`), it will be respected. * * If you are using a url with a suffix, just add the suffix, like this: * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json') @@ -345,7 +344,7 @@ angular.module('ngResource', ['ng']). var urlParams = self.urlParams = {}; forEach(url.split(/\W/), function(param){ - if (param && (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) { + if (!(new RegExp("^\\d+$").test(param)) && param && (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) { urlParams[param] = true; } }); diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 6a709fb7bf08..52395297b896 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -106,6 +106,13 @@ describe("resource", function() { R.get({a: 'foo', b: 'bar'}); }); + it('should support an unescaped url', function() { + var R = $resource('http://localhost:8080/Path/:a'); + + $httpBackend.expect('GET', 'http://localhost:8080/Path/foo').respond(); + R.get({a: 'foo'}); + }); + it('should correctly encode url params', function() { var R = $resource('/Path/:a');