diff options
| author | pavelgj | 2013-01-08 14:19:40 -0800 | 
|---|---|---|
| committer | Igor Minar | 2013-01-22 11:32:27 -0800 | 
| commit | 4439e393198d6a1657c02c098e1b13212c3f1db6 (patch) | |
| tree | 412e92f690f792aff6f2168e19e46753cb3296bd | |
| parent | b49c3a1a1efc85b31053481eea450c7be407957c (diff) | |
| download | angular.js-4439e393198d6a1657c02c098e1b13212c3f1db6.tar.bz2 | |
fix(ngResource): correct leading slash removal.
Fixed an issues with ngResource param substitution where it was incorrectly removing leading slash when param was followed by a non-slash character.
Ex:
'/:foo/:bar.baz/:aux'
params = {
  foo: 'aaa',
  bar: undefined,
  aux: undefined
}
The above params were incorrectly producing '/aaa.baz' but now it results in '/aaa/.baz'.
| -rw-r--r-- | src/ngResource/resource.js | 9 | ||||
| -rw-r--r-- | test/ngResource/resourceSpec.js | 25 | 
2 files changed, 33 insertions, 1 deletions
| diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 6dfad572..36b0eff7 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -291,7 +291,14 @@ angular.module('ngResource', ['ng']).              encodedVal = encodeUriSegment(val);              url = url.replace(new RegExp(":" + urlParam + "(\\W)", "g"), encodedVal + "$1");            } else { -            url = url.replace(new RegExp("/?:" + urlParam + "(\\W)", "g"), '$1'); +            url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W)", "g"), function(match, +                leadingSlashes, tail) { +              if (tail.charAt(0) == '/') { +                return tail; +              } else { +                return leadingSlashes + tail; +              } +            });            }          });          url = url.replace(/\/?#$/, ''); diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 8ff248b7..9eb32d8d 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -66,6 +66,31 @@ describe("resource", function() {      R.get({a:6, b:7, c:8});    }); +  it('should not ignore leading slashes of undefinend parameters that have non-slash trailing sequence', function() { +    var R = $resource('/Path/:a.foo/:b.bar/:c.baz'); + +    $httpBackend.when('GET', '/Path/.foo/.bar/.baz').respond('{}'); +    $httpBackend.when('GET', '/Path/0.foo/.bar/.baz').respond('{}'); +    $httpBackend.when('GET', '/Path/false.foo/.bar/.baz').respond('{}'); +    $httpBackend.when('GET', '/Path/.foo/.bar/.baz').respond('{}'); +    $httpBackend.when('GET', '/Path/.foo/.bar/.baz').respond('{}'); +    $httpBackend.when('GET', '/Path/1.foo/.bar/.baz').respond('{}'); +    $httpBackend.when('GET', '/Path/2.foo/3.bar/.baz').respond('{}'); +    $httpBackend.when('GET', '/Path/4.foo/.bar/5.baz').respond('{}'); +    $httpBackend.when('GET', '/Path/6.foo/7.bar/8.baz').respond('{}'); + +    R.get({}); +    R.get({a:0}); +    R.get({a:false}); +    R.get({a:null}); +    R.get({a:undefined}); +    R.get({a:''}); +    R.get({a:1}); +    R.get({a:2, b:3}); +    R.get({a:4, c:5}); +    R.get({a:6, b:7, c:8}); +  }); +    it('should support escaping colons in url template', function() {      var R = $resource('http://localhost\\:8080/Path/:a/\\:stillPath/:b'); | 
