Browse Source

dynamite: Do not rely on globally defined tags

pull/202/head
jld3103 2 years ago
parent
commit
1ecea62e0c
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 1
      packages/dynamite/lib/dynamite.dart
  2. 26
      packages/dynamite/lib/src/openapi_builder.dart

1
packages/dynamite/lib/dynamite.dart

@ -9,7 +9,6 @@ import 'package:dynamite/src/models/open_api.dart';
import 'package:dynamite/src/models/parameter.dart' as spec_parameter;
import 'package:dynamite/src/models/path_item.dart';
import 'package:dynamite/src/models/schema.dart';
import 'package:dynamite/src/models/tag.dart';
import 'package:path/path.dart' as p;
part 'src/openapi_builder.dart';

26
packages/dynamite/lib/src/openapi_builder.dart

@ -28,12 +28,18 @@ class OpenAPIBuilder implements Builder {
throw Exception('Only OpenAPI ${supportedVersions.join(', ')} are supported');
}
final tags = <Tag?>[
final tags = <String?>{
null,
if (spec.tags != null) ...[
...spec.tags!,
],
];
if (spec.paths != null) ...{
for (final pathItem in spec.paths!.values) ...{
for (final operation in pathItem.operations.values) ...{
if (operation.tags != null) ...{
...operation.tags!,
},
},
},
},
};
final hasAnySecurity = spec.security?.isNotEmpty ?? false;
final state = State(prefix);
@ -321,7 +327,7 @@ class OpenAPIBuilder implements Builder {
final pathItem = spec.paths![path]!;
for (final method in pathItem.operations.keys) {
final operation = pathItem.operations[method]!;
if ((tag != null && operation.tags != null && operation.tags!.contains(tag.name)) ||
if ((tag != null && operation.tags != null && operation.tags!.contains(tag)) ||
(tag == null && (operation.tags == null || operation.tags!.isEmpty))) {
if (paths[path] == null) {
paths[path] = PathItem(
@ -441,10 +447,10 @@ class OpenAPIBuilder implements Builder {
)
..methods.addAll([
if (isRootClient) ...[
for (final tag in tags.where((final tag) => tag != null).toList().cast<Tag>()) ...[
for (final tag in tags.where((final tag) => tag != null).toList().cast<String>()) ...[
Method(
(final b) => b
..name = _toDartName(tag.name)
..name = _toDartName(tag)
..lambda = true
..type = MethodType.getter
..returns = refer('$prefix${_clientName(tag)}')
@ -744,7 +750,7 @@ class OpenAPIBuilder implements Builder {
String? headersValue;
if (response.headers != null) {
final identifier =
'${tag != null ? _toDartName(tag.name, uppercaseFirstCharacter: true) : null}${_toDartName(operationId, uppercaseFirstCharacter: true)}Headers';
'${tag != null ? _toDartName(tag, uppercaseFirstCharacter: true) : null}${_toDartName(operationId, uppercaseFirstCharacter: true)}Headers';
final headerParseFunctions = <String, String>{};
for (final headerName in response.headers!.keys) {
final functionIdentifier = '_${_toDartName('${identifier}Parse$headerName')}';
@ -951,7 +957,7 @@ class OpenAPIBuilder implements Builder {
}
}
String _clientName(final Tag tag) => '${_toDartName(tag.name, uppercaseFirstCharacter: true)}Client';
String _clientName(final String tag) => '${_toDartName(tag, uppercaseFirstCharacter: true)}Client';
String _toDartName(
final String input, {

Loading…
Cancel
Save