Skip to content

Commit efe8e5d

Browse files
authored
feat: Add setHeader method on postgrest builder (#1003)
1 parent 37b1630 commit efe8e5d

File tree

8 files changed

+90
-0
lines changed

8 files changed

+90
-0
lines changed

packages/postgrest/lib/src/postgrest_builder.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ class PostgrestBuilder<T, S, R> implements Future<T> {
9393
);
9494
}
9595

96+
PostgrestBuilder<T, S, R> setHeader(String key, String value) {
97+
return _copyWith(
98+
headers: {..._headers, key: value},
99+
);
100+
}
101+
96102
Future<T> _execute() async {
97103
final String? method = _method;
98104

packages/postgrest/lib/src/postgrest_filter_builder.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,4 +484,11 @@ class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder<T> {
484484
query.forEach((k, v) => url = appendSearchParams(k, 'eq.$v', url));
485485
return copyWithUrl(url);
486486
}
487+
488+
@override
489+
PostgrestFilterBuilder<T> setHeader(String key, String value) {
490+
return PostgrestFilterBuilder(
491+
_copyWith(headers: {..._headers, key: value}),
492+
);
493+
}
487494
}

packages/postgrest/lib/src/postgrest_query_builder.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,4 +256,16 @@ class PostgrestQueryBuilder<T> extends RawPostgrestBuilder<T, T, T> {
256256
count: option,
257257
));
258258
}
259+
260+
@override
261+
PostgrestQueryBuilder<T> setHeader(String key, String value) {
262+
return PostgrestQueryBuilder(
263+
url: _url,
264+
headers: {..._headers, key: value},
265+
httpClient: _httpClient,
266+
method: _method,
267+
schema: _schema,
268+
isolate: _isolate,
269+
);
270+
}
259271
}

packages/postgrest/lib/src/postgrest_transform_builder.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ class PostgrestTransformBuilder<T> extends RawPostgrestBuilder<T, T, T> {
66
PostgrestTransformBuilder<T> copyWithUrl(Uri url) =>
77
PostgrestTransformBuilder(_copyWith(url: url));
88

9+
@override
10+
PostgrestTransformBuilder<T> setHeader(String key, String value) {
11+
return PostgrestTransformBuilder(
12+
_copyWith(headers: {..._headers, key: value}),
13+
);
14+
}
15+
916
/// Performs horizontal filtering with SELECT.
1017
///
1118
/// ```dart

packages/postgrest/lib/src/raw_postgrest_builder.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ class RawPostgrestBuilder<T, S, R> extends PostgrestBuilder<T, S, R> {
4141
));
4242
}
4343

44+
@override
45+
RawPostgrestBuilder<T, S, R> setHeader(String key, String value) {
46+
return PostgrestFilterBuilder(
47+
_copyWithType(headers: {..._headers, key: value}),
48+
);
49+
}
50+
4451
/// Converts any response that comes from the server into a type-safe response.
4552
///
4653
/// ```dart

packages/postgrest/lib/src/response_postgrest_builder.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ class ResponsePostgrestBuilder<T, S, R> extends PostgrestBuilder<T, S, R> {
1616
converter: builder._converter,
1717
);
1818

19+
@override
20+
ResponsePostgrestBuilder<T, S, R> setHeader(String key, String value) {
21+
return ResponsePostgrestBuilder(
22+
_copyWith(headers: {..._headers, key: value}),
23+
);
24+
}
25+
1926
/// Converts any response that comes from the server into a type-safe response.
2027
///
2128
/// ```dart

packages/postgrest/test/basic_test.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,40 @@ void main() {
8787
);
8888
});
8989

90+
test('set header on rpc', () async {
91+
final httpClient = CustomHttpClient();
92+
final postgrest = PostgrestClient(rootUrl, httpClient: httpClient);
93+
94+
await postgrest
95+
.rpc('empty-succ')
96+
.setHeader("myKey", "myValue")
97+
.select()
98+
.head();
99+
expect(httpClient.lastRequest!.headers, containsPair("myKey", "myValue"));
100+
101+
// Other following requests should not have the header
102+
await postgrest.rpc('empty-succ').select().head();
103+
expect(httpClient.lastRequest!.headers,
104+
isNot(containsPair("myKey", "myValue")));
105+
});
106+
107+
test('set header on query builder', () async {
108+
final httpClient = CustomHttpClient();
109+
final postgrest = PostgrestClient(rootUrl, httpClient: httpClient);
110+
111+
await postgrest
112+
.from('empty-succ')
113+
.setHeader("myKey", "myValue")
114+
.select()
115+
.head();
116+
expect(httpClient.lastRequest!.headers, containsPair("myKey", "myValue"));
117+
118+
// Other following requests should not have the header
119+
await postgrest.from('empty-succ').select().head();
120+
expect(httpClient.lastRequest!.headers,
121+
isNot(containsPair("myKey", "myValue")));
122+
});
123+
90124
test('switch schema', () async {
91125
final postgrest = PostgrestClient(rootUrl, schema: 'personal');
92126
final res = await postgrest.from('users').select();

packages/postgrest/test/custom_http_client.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
import 'package:http/http.dart';
22

33
class CustomHttpClient extends BaseClient {
4+
BaseRequest? lastRequest;
45
@override
56
Future<StreamedResponse> send(BaseRequest request) async {
7+
lastRequest = request;
8+
9+
if (request.url.path.endsWith("empty-succ")) {
10+
return StreamedResponse(
11+
Stream.empty(),
12+
200,
13+
request: request,
14+
);
15+
}
616
//Return custom status code to check for usage of this client.
717
return StreamedResponse(
818
request.finalize(),

0 commit comments

Comments
 (0)