Skip to content

Commit

Permalink
Merge pull request #40 from netglade/feat/more-extensions
Browse files Browse the repository at this point in the history
Add a few new useful extensions
  • Loading branch information
petrnymsa committed Apr 19, 2024
2 parents 52b112c + b9e9fb9 commit c55b853
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 4 deletions.
4 changes: 2 additions & 2 deletions packages/netglade_flutter_utils/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ documentation: https://github.com/netglade/flutter_core/tree/main/packages/netgl

environment:
sdk: ^3.0.0
flutter: '>=3.0.0'
flutter: ">=3.0.0"

dependencies:
flutter:
Expand All @@ -19,7 +19,7 @@ dev_dependencies:
flutter_test:
sdk: flutter
mocktail: ^1.0.0
netglade_analysis: ^8.0.0
netglade_analysis: ^10.0.0
test: ^1.24.6

flutter:
Expand Down
6 changes: 6 additions & 0 deletions packages/netglade_utils/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@

## 2.1.0
- Add `byNameOrDefault` and `byNameOrNull` Enum's extensions.
- Add `normalizeUrl` and `rtrim` String's extensions.
- Add `flattenedList` on Iterable of Iterables extension.

## 2.0.0
- Remove `isBlank`, `isNotBlank` from `String?` extension.

Expand Down
4 changes: 4 additions & 0 deletions packages/netglade_utils/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,9 @@ include: package:netglade_analysis/lints.yaml
dart_code_metrics:
extends:
- package:netglade_analysis/dcm.yaml
rules:
avoid-duplicate-collection-elements:
exclude:
- test/**
pubspec-rules:
prefer-publish-to-none: false
24 changes: 24 additions & 0 deletions packages/netglade_utils/lib/src/extensions/enum_extensions.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
extension EnumExtensions<T extends Enum> on Iterable<T> {
/// Finds the enum value in this list with name [name].
///
/// Goes through this collection looking for an enum with
/// name [name], as reported by [EnumName.name].
/// Returns the first value with the given name. Such a value must be found.
T byNameOrDefault(String name, {required T defaultValue}) {
try {
return byName(name);
// ignore: avoid_catching_errors, byName throws it
} on ArgumentError catch (_) {
return defaultValue;
}
}

T? byNameOrNull(String name) {
try {
return byName(name);
// ignore: avoid_catching_errors, byName throws it
} on ArgumentError catch (_) {
return null;
}
}
}
1 change: 1 addition & 0 deletions packages/netglade_utils/lib/src/extensions/extensions.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export 'date_time_extensions.dart';
export 'enum_extensions.dart';
export 'future_extensions.dart';
export 'iterable_extensions.dart';
export 'object_extensions.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,7 @@ extension IterableExtensions<T> on Iterable<T> {
return result.values;
}
}

extension IterableIterableExtension<T> on Iterable<Iterable<T>> {
List<T> get flattenedList => [for (final elements in this) ...elements];
}
19 changes: 19 additions & 0 deletions packages/netglade_utils/lib/src/extensions/string_extensions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,25 @@ extension StringExtensions on String {
String? ifBlank([String? defaultValue]) {
return isBlank ? defaultValue : this;
}

/// Normalize supposedly string containing URL
///
/// Appends https:// when does not start with.
/// Trims any trailing '/' chars.
String normalizeUrl() {
final value = trim();

if (value.startsWith(RegExp(r'http[s]?:\/\/'))) return value.rtrim('/');

return 'https://$value'.rtrim('/');
}

/// Removes any trailing char from [chars].
String rtrim(String chars) {
final pattern = RegExp('[$chars]+\$');

return replaceAll(pattern, '');
}
}

extension NullableStringExtensions on String? {
Expand Down
4 changes: 2 additions & 2 deletions packages/netglade_utils/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: netglade_utils
version: 2.0.0
version: 2.1.0
description: Dart utils used internally at netglade.
repository: https://github.com/netglade/flutter_core/tree/main/packages/netglade_utils
issue_tracker: https://github.com/netglade/flutter_core/issues
Expand All @@ -17,5 +17,5 @@ dependencies:
mocktail: ^1.0.0

dev_dependencies:
netglade_analysis: ^8.0.0
netglade_analysis: ^10.0.0
test: ^1.24.6

0 comments on commit c55b853

Please sign in to comment.