diff options
author | uzhas <uzhas@yandex-team.ru> | 2022-02-22 17:11:59 +0300 |
---|---|---|
committer | uzhas <uzhas@yandex-team.ru> | 2022-02-22 17:11:59 +0300 |
commit | 5e27728a04ad014b09bd1ae4d2ebe46f6e40256c (patch) | |
tree | b034196f4d7d6fbe818abb940464b808e10efd58 | |
parent | 50401556c95bb9dbfd2d2c6bcbe80cdc2ba84817 (diff) | |
download | ydb-5e27728a04ad014b09bd1ae4d2ebe46f6e40256c.tar.gz |
YQ-895: use TStringBuilder to compose url, simplify code
ref:4816e92a12fc736734fcf90b6849931f99f703d4
-rw-r--r-- | ydb/library/yql/utils/url_builder.cpp | 20 | ||||
-rw-r--r-- | ydb/library/yql/utils/url_builder.h | 3 | ||||
-rw-r--r-- | ydb/library/yql/utils/url_builder_ut.cpp | 9 |
3 files changed, 19 insertions, 13 deletions
diff --git a/ydb/library/yql/utils/url_builder.cpp b/ydb/library/yql/utils/url_builder.cpp index 733c616dab..3aa1172ffa 100644 --- a/ydb/library/yql/utils/url_builder.cpp +++ b/ydb/library/yql/utils/url_builder.cpp @@ -3,21 +3,25 @@ namespace NYql { -TUrlBuilder::TUrlBuilder( - const TString& uri) +TUrlBuilder::TUrlBuilder(const TString& uri) : MainUri(uri) - {} +{ +} -void TUrlBuilder::AddUrlParam(const TString& name, const TString& value) { +TUrlBuilder& TUrlBuilder::AddUrlParam(const TString& name, const TString& value) { Params.emplace_back(TParam {name, value}); + return *this; } TString TUrlBuilder::Build() const { - TString res = MainUri + "?"; - for (size_t i = 0; i < Params.size(); ++i) { - res += TStringBuilder() << (i > 0 ? "&" : "") << Params[i].Name << "=" << CGIEscapeRet(Params[i].Value); + TStringBuilder res; + res << MainUri << "?"; + TStringBuf separator = ""sv; + for (const auto& p : Params) { + res << separator << p.Name << "=" << CGIEscapeRet(p.Value); + separator = "&"sv; } - return res; + return std::move(res); } } // NYql diff --git a/ydb/library/yql/utils/url_builder.h b/ydb/library/yql/utils/url_builder.h index 87dbd99a52..5ef53e9e3d 100644 --- a/ydb/library/yql/utils/url_builder.h +++ b/ydb/library/yql/utils/url_builder.h @@ -13,7 +13,8 @@ class TUrlBuilder { public: explicit TUrlBuilder(const TString& uri); - void AddUrlParam(const TString& name, const TString& value); // Assuming name is already escaped, do not use strings from user input + // Assuming name is already escaped, do not use strings from user input + TUrlBuilder& AddUrlParam(const TString& name, const TString& value); TString Build() const; private: diff --git a/ydb/library/yql/utils/url_builder_ut.cpp b/ydb/library/yql/utils/url_builder_ut.cpp index 22a15e85e6..d28ac955b3 100644 --- a/ydb/library/yql/utils/url_builder_ut.cpp +++ b/ydb/library/yql/utils/url_builder_ut.cpp @@ -14,10 +14,11 @@ Y_UNIT_TEST_SUITE(TUrlBuilder) { } Y_UNIT_TEST(Test1) { - TUrlBuilder builder("https://localhost/abc"); - builder.AddUrlParam("param1", "=!@#$%^&*(){}[]\" "); - builder.AddUrlParam("param2", "val2"); + auto url = TUrlBuilder("https://localhost/abc") + .AddUrlParam("param1", "=!@#$%^&*(){}[]\" ") + .AddUrlParam("param2", "val2") + .Build(); - UNIT_ASSERT_VALUES_EQUAL(builder.Build(), "https://localhost/abc?param1=%3D!@%23$%25^%26*%28%29%7B%7D%5B%5D%22+¶m2=val2"); + UNIT_ASSERT_VALUES_EQUAL(url, "https://localhost/abc?param1=%3D!@%23$%25^%26*%28%29%7B%7D%5B%5D%22+¶m2=val2"); } } |