Skip to content

Commit

Permalink
feat(dynamite): document generated libraries and add support for all …
Browse files Browse the repository at this point in the history
…info fields

Signed-off-by: Nikolas Rimikis <[email protected]>
  • Loading branch information
Leptopoda committed Dec 30, 2023
1 parent 6c8eaad commit bfb5d42
Show file tree
Hide file tree
Showing 9 changed files with 353 additions and 5 deletions.
2 changes: 1 addition & 1 deletion packages/dynamite/dynamite/lib/src/helpers/docs.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Iterable<String> descriptionToDocs(final String? description) sync* {
for (final line in description.split('\n')) {
final buffer = StringBuffer('$docsSeparator ')..write(line);

if (!line.endsWith('.') && line.isNotEmpty) {
if (!line.endsWith('.') && !line.endsWith(':') && line.isNotEmpty) {
buffer.write('.');
}

Expand Down
2 changes: 2 additions & 0 deletions packages/dynamite/dynamite/lib/src/models/openapi.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:built_value/json_object.dart';
import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';
import 'package:dynamite/src/models/openapi/components.dart';
import 'package:dynamite/src/models/openapi/contact.dart';
import 'package:dynamite/src/models/openapi/discriminator.dart';
import 'package:dynamite/src/models/openapi/header.dart';
import 'package:dynamite/src/models/openapi/info.dart';
Expand Down Expand Up @@ -42,6 +43,7 @@ part 'openapi.g.dart';

@SerializersFor([
Components,
Contact,
Discriminator,
Header,
Info,
Expand Down
1 change: 1 addition & 0 deletions packages/dynamite/dynamite/lib/src/models/openapi.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 40 additions & 0 deletions packages/dynamite/dynamite/lib/src/models/openapi/contact.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';

part 'contact.g.dart';

abstract class Contact implements Built<Contact, ContactBuilder> {
factory Contact([final void Function(ContactBuilder) updates]) = _$Contact;

const Contact._();

static Serializer<Contact> get serializer => _$contactSerializer;

String? get name;
String? get url;
String? get email;

String? formattedDescription() {
final name = this.name;
final url = this.url;
final email = this.email;

if (name == null || (url ?? email) == null) {
return null;
}

final buffer = StringBuffer('You can contact the $name team under:');
if (email != null) {
buffer
..write('\n')
..write(' Email: `$email`');
}
if (url != null) {
buffer
..write('\n')
..write(' Website: `$url`');
}

return buffer.toString();
}
}
163 changes: 163 additions & 0 deletions packages/dynamite/dynamite/lib/src/models/openapi/contact.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

49 changes: 49 additions & 0 deletions packages/dynamite/dynamite/lib/src/models/openapi/info.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
import 'package:dynamite/src/helpers/docs.dart';
import 'package:dynamite/src/models/openapi/contact.dart';
import 'package:dynamite/src/models/openapi/license.dart';

part 'info.g.dart';
Expand All @@ -18,6 +20,53 @@ abstract class Info implements Built<Info, InfoBuilder> {

License? get license;

Contact? get contact;

@BuiltValueField(compare: false)
String? get description;

String? get termsOfService;

String? get summary;

Iterable<String> formattedDescription() {
final buffer = StringBuffer()..write('$title Version: $version');

final summary = this.summary;
if (summary != null && summary.isNotEmpty) {
buffer
..write('\n')
..write(summary);
}

final description = this.description;
if (description != null && description.isNotEmpty) {
buffer
..write('\n\n')
..write(description);
}

final contact = this.contact;
if (contact != null) {
buffer
..write('\n\n')
..write(contact.formattedDescription());
}

final license = this.license;
if (license != null) {
buffer
..write('\n\n')
..write(license.formattedDescription(singleLine: false));
}

final termsOfService = this.termsOfService;
if (termsOfService != null) {
buffer
..write('\n\n')
..write('Usage of these apis must adhere to the terms of service: `$termsOfService`');
}

return descriptionToDocs(buffer.toString());
}
}
Loading

0 comments on commit bfb5d42

Please sign in to comment.