From 9aeb121315fd4af6fb5bb4fb5b1edb03123e3f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klaudio=20Ku=C3=A7aj?= Date: Fri, 3 Jan 2025 10:51:54 +0100 Subject: [PATCH] refactor: Restrict subclassing of RelicAddress using 'abstract final' --- README.md | 2 +- example/example.dart | 3 +-- lib/relic.dart | 3 +-- lib/src/address/relic_address.dart | 14 +++++++------- test/headers/headers_test_utils.dart | 5 ++--- test/relic_server_serve_test.dart | 11 +++++------ test/relic_server_test.dart | 4 ++-- 7 files changed, 19 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 626cf30..fe15c32 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ void main() async { var server = await serve( handler, - RelicHostnameAddress(hostname: 'localhost'), + RelicAddress.fromHostname('localhost'), 8080, ); diff --git a/example/example.dart b/example/example.dart index 5f342fd..864b407 100644 --- a/example/example.dart +++ b/example/example.dart @@ -1,5 +1,4 @@ import 'package:relic/relic.dart'; -import 'package:relic/src/address/relic_address.dart'; void main() async { var handler = @@ -7,7 +6,7 @@ void main() async { var server = await serve( handler, - RelicHostnameAddress(hostname: 'localhost'), + RelicAddress.fromHostname('localhost'), 8080, ); diff --git a/lib/relic.dart b/lib/relic.dart index 2dbbccd..5df7d0f 100644 --- a/lib/relic.dart +++ b/lib/relic.dart @@ -28,8 +28,7 @@ export 'src/middleware/middleware.dart' show Middleware, createMiddleware; export 'src/middleware/middleware_extensions.dart' show MiddlewareExtensions; /// Relic server related exports -export 'src/address/relic_address.dart' - show RelicAddress, RelicHostnameAddress, RelicInternetAddress; +export 'src/address/relic_address.dart' show RelicAddress; export 'dart:io' show InternetAddress; export 'src/relic_server.dart' show RelicServer; export 'src/relic_server_serve.dart' show serve; diff --git a/lib/src/address/relic_address.dart b/lib/src/address/relic_address.dart index 0a3bb74..0dfc366 100644 --- a/lib/src/address/relic_address.dart +++ b/lib/src/address/relic_address.dart @@ -1,29 +1,29 @@ import 'dart:io'; /// A class that represents an address. -abstract class RelicAddress { +abstract final class RelicAddress { /// Returns the address as an [Object]. T get address; /// Creates a [RelicAddress] from a [String]. static RelicAddress fromHostname(String hostname) { - return RelicHostnameAddress(hostname: hostname); + return _RelicHostnameAddress(hostname: hostname); } /// Creates a [RelicAddress] from an [InternetAddress]. static RelicAddress fromInternetAddress( InternetAddress address, ) { - return RelicInternetAddress(internetAddress: address); + return _RelicInternetAddress(internetAddress: address); } } /// A class that represents a hostname address. -class RelicHostnameAddress implements RelicAddress { +final class _RelicHostnameAddress implements RelicAddress { /// The hostname of the address. final String hostname; - RelicHostnameAddress({ + _RelicHostnameAddress({ required this.hostname, }); @@ -36,11 +36,11 @@ class RelicHostnameAddress implements RelicAddress { } /// A class that represents an internet address. -class RelicInternetAddress implements RelicAddress { +final class _RelicInternetAddress implements RelicAddress { /// The internet address of the address. final InternetAddress internetAddress; - RelicInternetAddress({ + _RelicInternetAddress({ required this.internetAddress, }); diff --git a/test/headers/headers_test_utils.dart b/test/headers/headers_test_utils.dart index d323a65..5f89439 100644 --- a/test/headers/headers_test_utils.dart +++ b/test/headers/headers_test_utils.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'package:relic/relic.dart'; import 'package:http/http.dart' as http; -import 'package:relic/src/address/relic_address.dart'; /// Thrown when the server returns a 400 status code. class BadRequestException implements Exception { @@ -22,13 +21,13 @@ Future createServer({ }) async { try { return RelicServer.createServer( - RelicInternetAddress(internetAddress: InternetAddress.loopbackIPv6), + RelicAddress.fromInternetAddress(InternetAddress.loopbackIPv6), 0, strictHeaders: strictHeaders, ); } on SocketException catch (_) { return RelicServer.createServer( - RelicInternetAddress(internetAddress: InternetAddress.loopbackIPv4), + RelicAddress.fromInternetAddress(InternetAddress.loopbackIPv4), 0, strictHeaders: strictHeaders, ); diff --git a/test/relic_server_serve_test.dart b/test/relic_server_serve_test.dart index 57772d3..715a5eb 100644 --- a/test/relic_server_serve_test.dart +++ b/test/relic_server_serve_test.dart @@ -10,7 +10,6 @@ import 'package:async/async.dart'; import 'package:http/http.dart' as http; import 'package:http_parser/http_parser.dart' as parser; import 'package:relic/relic.dart'; -import 'package:relic/src/address/relic_address.dart'; import 'package:relic/src/method/request_method.dart'; import 'package:relic/src/relic_server_serve.dart' as relic_server; import 'package:test/test.dart'; @@ -286,7 +285,7 @@ void main() { Future(() => throw StateError('oh no')); return syncHandler(request); }, - RelicHostnameAddress(hostname: 'localhost'), + RelicAddress.fromHostname('localhost'), 0, ); @@ -306,7 +305,7 @@ void main() { Future(() => throw StateError('oh no')); return syncHandler(request); }, - RelicHostnameAddress(hostname: 'localhost'), + RelicAddress.fromHostname('localhost'), 0, ); @@ -417,7 +416,7 @@ void main() { test('can be set at the server level', () async { _server = await relic_server.serve( syncHandler, - RelicHostnameAddress(hostname: 'localhost'), + RelicAddress.fromHostname('localhost'), 0, poweredByHeader: 'ourServer', ); @@ -438,7 +437,7 @@ void main() { ), ); }, - RelicHostnameAddress(hostname: 'localhost'), + RelicAddress.fromHostname('localhost'), 0, poweredByHeader: 'ourServer', ); @@ -654,7 +653,7 @@ Future _scheduleServer( assert(_server == null); _server = await relic_server.serve( handler, - RelicHostnameAddress(hostname: 'localhost'), + RelicAddress.fromHostname('localhost'), 0, securityContext: securityContext, ); diff --git a/test/relic_server_test.dart b/test/relic_server_test.dart index c462972..8d1c2b1 100644 --- a/test/relic_server_test.dart +++ b/test/relic_server_test.dart @@ -17,12 +17,12 @@ void main() { setUp(() async { try { server = await RelicServer.createServer( - RelicInternetAddress(internetAddress: InternetAddress.loopbackIPv6), + RelicAddress.fromInternetAddress(InternetAddress.loopbackIPv6), 0, ); } on SocketException catch (_) { server = await RelicServer.createServer( - RelicInternetAddress(internetAddress: InternetAddress.loopbackIPv4), + RelicAddress.fromInternetAddress(InternetAddress.loopbackIPv4), 0, ); }