Skip to content
This repository was archived by the owner on Apr 5, 2020. It is now read-only.

Commit d1e4b1d

Browse files
committed
Resolve GET parameters in URL, restoring BC
See PR #20
1 parent 67626dd commit d1e4b1d

3 files changed

Lines changed: 25 additions & 2 deletions

File tree

src/main/php/webservices/rest/RestClient.class.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ public function execute(RestRequest $request) {
213213
} else if ($request->hasBody()) {
214214
$send->setParameters($request->getBody());
215215
} else {
216-
$send->setParameters($request->getParameters());
216+
$send->setParameters($request->targetParameters());
217217
}
218218

219219
try {

src/main/php/webservices/rest/RestRequest.class.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,15 @@ private function authenticate($base, $url) {
451451
return $url;
452452
}
453453

454+
/**
455+
* Returns parameters, resolving segments if necessary
456+
*
457+
* @return [:string]
458+
*/
459+
public function targetParameters() {
460+
return array_map([$this, 'resolve'], $this->parameters);
461+
}
462+
454463
/**
455464
* Resolves target URL
456465
*
@@ -475,7 +484,7 @@ public function targetUrl(URL $base= null) {
475484
$url= clone $base;
476485
}
477486

478-
return $url->setParams(array_map([$this, 'resolve'], $this->parameters))->setPath($this->resolve($resource));
487+
return $url->setParams($this->targetParameters())->setPath($this->resolve($resource));
479488
}
480489

481490
/**

src/test/php/webservices/rest/unittest/RestRequestTest.class.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,20 @@ public function targetWithSegmentParametersAndConstantsMixed() {
320320
$this->assertEquals('/repos/thekid/xp-framework/issues/1', $fixture->targetUrl(new URL('http://test'))->getPath());
321321
}
322322

323+
#[@test]
324+
public function segments_allowed_in_get_parameters() {
325+
$fixture= new RestRequest('/repos/?user={user}');
326+
$fixture->addSegment('user', 'thekid');
327+
$this->assertEquals(['user' => 'thekid'], $fixture->targetUrl(new URL('http://test'))->getParams());
328+
}
329+
330+
#[@test]
331+
public function segments_in_parameters_resolved_in_target_parameters() {
332+
$fixture= new RestRequest('/repos/?user={user}');
333+
$fixture->addSegment('user', 'thekid');
334+
$this->assertEquals(['user' => 'thekid'], $fixture->targetParameters());
335+
}
336+
323337
#[@test, @values(['/rest/api/v2/', '/rest/api/v2'])]
324338
public function relativeResource($base) {
325339
$fixture= new RestRequest('issues');

0 commit comments

Comments
 (0)