Skip to content

Commit

Permalink
feat(dynamite): allow escaping reserved method names
Browse files Browse the repository at this point in the history
Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
  • Loading branch information
Leptopoda committed Feb 28, 2024
1 parent 974f564 commit aa19a9a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 13 deletions.
2 changes: 1 addition & 1 deletion packages/dynamite/dynamite/lib/src/builder/client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ Iterable<Method> buildTags(
...?pathEntry.value.parameters,
...?operation.parameters,
]..sort(sortRequiredParameters);
final name = toDartName(filterMethodName(operationName, tag ?? ''));
final name = toMethodName(operationName, tag);

final hasContentEncoding = operation.requestBody?.content?.entries.isNotEmpty ?? false;
final hasAuthentication = needsAuthCheck(pathEntry, operation, spec, client);
Expand Down
28 changes: 28 additions & 0 deletions packages/dynamite/dynamite/lib/src/helpers/dart_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,29 @@ String toDartName(
return result;
}

String toMethodName(String operationId, String? tag) {
String? filtered;
if (tag != null && tag.isNotEmpty) {
final expandedTag = tag.split('/').toList();
final parts = operationId.split('-');
final output = <String>[];
for (var i = 0; i < parts.length; i++) {
if (expandedTag.length <= i || expandedTag[i] != parts[i]) {
output.add(parts[i]);
}
}
filtered = output.join('-');
}

final dartName = toDartName(filtered ?? operationId);

if (_reservedMethodNames.contains(dartName)) {
return '\$$dartName';
}

return dartName;
}

/// Helper methods to work with strings.
extension StringUtils on String {
/// Capitalizes this string.
Expand All @@ -98,6 +121,11 @@ extension StringUtils on String {
}
}

const _reservedMethodNames = [
'executeRequest',
'executeRawRequest',
];

/// A list of dart keywords and type names that need to be escaped.
const _reservedNames = [
'abstract',
Expand Down
12 changes: 0 additions & 12 deletions packages/dynamite/dynamite/lib/src/helpers/dynamite.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,6 @@
import 'package:dynamite/src/helpers/dart_helpers.dart';
import 'package:dynamite/src/models/openapi.dart' as openapi;

String filterMethodName(String operationId, String tag) {
final expandedTag = tag.split('/').toList();
final parts = operationId.split('-');
final output = <String>[];
for (var i = 0; i < parts.length; i++) {
if (expandedTag.length <= i || expandedTag[i] != parts[i]) {
output.add(parts[i]);
}
}
return output.join('-');
}

String clientName(String tag) => '\$${toDartName(tag, className: true)}Client';

bool isDartParameterNullable(
Expand Down

0 comments on commit aa19a9a

Please sign in to comment.