Skip to content

Commit d198c93

Browse files
committed
- Correção de parse para params x-www-form-urlencoded cujo value é vazio
- Pequena otimização do parse melhorando um pouco o tempo de resposta dos servers + Adição de função para devolver os params como um JSONObject: Params.AsJSON
1 parent 8e0fed1 commit d198c93

2 files changed

Lines changed: 39 additions & 11 deletions

File tree

src/base/RALParams.pas

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ TRALParams = class
190190
function URLEncodedToList(ASource: StringRAL): TStringList;
191191
/// returns all the params in a comma separated UTF8string.
192192
function AsString: StringRAL;
193+
/// returns all the params in a JSON UTF8string format.
194+
function AsJSON: StringRAL;
193195

194196
/// Grabs only the body kind of params, excluding headers and cookies.
195197
property Body: TList read GetBody;
@@ -214,6 +216,9 @@ implementation
214216

215217
{ TRALParam }
216218

219+
uses
220+
RALJson;
221+
217222
procedure TRALParam.Clone(ASource: TRALParam);
218223
begin
219224
ASource.ContentDisposition := Self.ContentDisposition;
@@ -735,6 +740,26 @@ procedure TRALParams.AssignParams(ADest: TStringList; AKind: TRALParamKind;
735740
AssignParams(TStrings(ADest), AKind, ASeparator);
736741
end;
737742

743+
function TRALParams.AsJSON: StringRAL;
744+
var
745+
I: IntegerRAL;
746+
JSON: TRALJSONObject;
747+
begin
748+
Result := '';
749+
if (FParams <> nil) and (FParams.Count > 0) then
750+
begin
751+
JSON := TRALJSONObject.Create;
752+
try
753+
for I := 0 to Pred(FParams.Count) do
754+
JSON.Add(TRALParam(FParams.Items[I]).ParamName, TRALParam(FParams.Items[I]).AsString);
755+
756+
Result := JSON.ToJSON;
757+
finally
758+
JSON.Free;
759+
end;
760+
end;
761+
end;
762+
738763
procedure TRALParams.AssignParams(ADest: TStrings; AKind: TRALParamKind;
739764
ASeparator: StringRAL);
740765
var
@@ -1135,12 +1160,14 @@ function TRALParams.FindNameSeparator(const ASource: StringRAL): StringRAL;
11351160
begin
11361161
vMin := Length(ASource);
11371162
vPos := Pos('=', ASource);
1138-
if (vPos > 0) and (vPos < vMin) then
1139-
Result := '=';
1140-
1141-
vPos := Pos(StringRAL(': '), ASource);
1142-
if (vPos > 0) and (vPos < vMin) then
1143-
Result := ': ';
1163+
if (vPos > 0) and (vPos <= vMin) then
1164+
Result := '='
1165+
else
1166+
begin
1167+
vPos := Pos(StringRAL(': '), ASource);
1168+
if (vPos > 0) and (vPos <= vMin) then
1169+
Result := ': ';
1170+
end;
11441171
end;
11451172

11461173
procedure TRALParams.AppendParamLine(const ALine, ANameSeparator: StringRAL;
@@ -1166,7 +1193,8 @@ procedure TRALParams.AppendParamLine(const ALine, ANameSeparator: StringRAL;
11661193
if vParam = nil then
11671194
vParam := NewParam;
11681195
vParam.ParamName := vName;
1169-
vParam.AsString := vValue;
1196+
if vValue <> '' then
1197+
vParam.AsString := vValue;
11701198
vParam.ContentType := rctTEXTPLAIN;
11711199
vParam.Kind := AKind;
11721200
end;

src/base/RALRoutes.pas

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,10 @@ function TRALBaseRoute.GetAllowMethods: StringRAL;
196196

197197
procedure TRALBaseRoute.SetRoute(AValue: StringRAL);
198198
var
199-
vList : TStringList;
200-
vInt, vPos : IntegerRAL;
201-
vStr : StringRAL;
202-
vParam : TRALRouteParam;
199+
vList: TStringList;
200+
vInt, vPos: IntegerRAL;
201+
vStr: StringRAL;
202+
vParam: TRALRouteParam;
203203
begin
204204
AValue := FixRoute(Trim(AValue));
205205

0 commit comments

Comments
 (0)