Skip to content

Commit

Permalink
Merge pull request #143 from icapps/feature/#126-validate-config.txt
Browse files Browse the repository at this point in the history
Feature/#126 validate config.txt
  • Loading branch information
vanlooverenkoen committed Sep 7, 2023
2 parents 798afc9 + 14f0a32 commit 9525e23
Show file tree
Hide file tree
Showing 48 changed files with 145 additions and 1,315 deletions.
13 changes: 0 additions & 13 deletions bin/model_generator.dart
Expand Up @@ -4,13 +4,11 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:model_generator/config/pubspec_config.dart';
import 'package:model_generator/config/yml_generator_config.dart';
import 'package:model_generator/model/field.dart';
import 'package:model_generator/model/model/custom_model.dart';
import 'package:model_generator/model/model/enum_model.dart';
import 'package:model_generator/model/model/json_converter_model.dart';
import 'package:model_generator/model/model/object_model.dart';
import 'package:model_generator/run_process/run_process.dart';
import 'package:model_generator/util/list_extensions.dart';
import 'package:model_generator/writer/enum_model_writer.dart';
import 'package:model_generator/writer/object_model_writer.dart';
import 'package:path/path.dart';
Expand Down Expand Up @@ -100,20 +98,9 @@ void writeToFiles(
}
String? content;
if (model is ObjectModel) {
final extendsModelfields = <Field>[];
var extendsModelextends = model.extendsModel;
while (extendsModelextends != null) {
final extendsModelextendsModel = modelGeneratorConfig.models
.firstWhereOrNull(
(element) => element.name == extendsModelextends)
as ObjectModel?; // ignore: avoid_as
extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []);
extendsModelextends = extendsModelextendsModel?.extendsModel;
}
content = ObjectModelWriter(
pubspecConfig,
model,
extendsModelfields,
modelGeneratorConfig,
).write();
} else if (model is EnumModel) {
Expand Down
18 changes: 16 additions & 2 deletions lib/writer/object_model_writer.dart
@@ -1,6 +1,7 @@
import 'package:model_generator/model/field.dart';
import 'package:model_generator/model/item_type/map_type.dart';
import 'package:model_generator/util/generic_type.dart';
import 'package:model_generator/util/list_extensions.dart';

import '../config/pubspec_config.dart';
import '../config/yml_generator_config.dart';
Expand All @@ -15,17 +16,16 @@ class ObjectModelWriter {
'// GENERATED CODE - DO NOT MODIFY BY HAND';
final PubspecConfig pubspecConfig;
final ObjectModel jsonModel;
final List<Field> extendsFields;
final YmlGeneratorConfig yamlConfig;

const ObjectModelWriter(
this.pubspecConfig,
this.jsonModel,
this.extendsFields,
this.yamlConfig,
);

String write() {
final extendsFields = _getExtendedFields(jsonModel, yamlConfig);
final sb = StringBuffer()
..writeln(autoGeneratedWarning)
..writeln();
Expand Down Expand Up @@ -351,4 +351,18 @@ class ObjectModelWriter {
'List<Map<String, dynamic>> serialize${jsonModel.name}List(List<${jsonModel.name}> objects)')
..writeln(' => objects.map((object) => object.toJson()).toList();');
}

List<Field> _getExtendedFields(
ObjectModel model, YmlGeneratorConfig ymlConfig) {
final extendsModelfields = <Field>[];
var extendsModelextends = model.extendsModel;
while (extendsModelextends != null) {
final extendsModelextendsModel = ymlConfig.models.firstWhereOrNull(
(element) => element.name == extendsModelextends)
as ObjectModel?; // ignore: avoid_as
extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []);
extendsModelextends = extendsModelextendsModel?.extendsModel;
}
return extendsModelfields;
}
}
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/array/output.txt
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'info', required: true)
@JsonKey(name: 'info', required: true, includeIfNull: false)
final List<String> info;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/converter/config.txt
Expand Up @@ -5,7 +5,7 @@ Person:
- DateTimeConverter
properties:
birthDay:
type: DateTime
type: DateTime?
DateTimeConverter:
path: user/person/
type: json_converter
6 changes: 3 additions & 3 deletions test/writer/object_model_writer/converter/output.txt
Expand Up @@ -8,11 +8,11 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
@DateTimeConverter()
class Person {
@JsonKey(name: 'birthday')
final DateTime? birthday;
@JsonKey(name: 'birthDay', includeIfNull: false)
final DateTime? birthDay;

const Person({
this.birthday,
this.birthDay,
});

factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/custom-from-to/config.txt
Expand Up @@ -2,7 +2,7 @@ Person:
path: user/person/
type: object
properties:
time: Time
time: Time?
Time:
path: user/person/
type: custom_from_to_json
4 changes: 2 additions & 2 deletions test/writer/object_model_writer/custom-from-to/output.txt
Expand Up @@ -8,9 +8,9 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'time', fromJson: handleTimeFromJson, toJson: handleTimeToJson)
Time? time;
final Time? time;

Person({
const Person({
this.time,
});

Expand Down
Expand Up @@ -5,5 +5,5 @@ Person:
firstName:
description: A good description
type: String
default_field: "'test'"
default_value: "'test'"
disallow_null: true
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName', required: false, disallowNullValue: true)
@JsonKey(name: 'firstName', required: false, disallowNullValue: true, includeIfNull: false)
final String firstName;

const Person({
Expand Down
Expand Up @@ -5,4 +5,4 @@ Person:
firstName:
description: A good description
type: String
default_field: "'test'"
default_value: "'test'"
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName', required: false, disallowNullValue: false)
@JsonKey(name: 'firstName', required: false, disallowNullValue: false, includeIfNull: false)
final String firstName;

const Person({
Expand Down
4 changes: 2 additions & 2 deletions test/writer/object_model_writer/default-field/config.txt
Expand Up @@ -4,5 +4,5 @@ Person:
properties:
firstName:
description: A good description
type: string
default_field: "'test'"
type: String?
default_value: "'test'"
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/default-field/output.txt
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Expand Up @@ -3,7 +3,7 @@ Admin:
type: object
extends: User
properties:
permission: String?
permission: String

User:
path: user/person/
Expand Down
Expand Up @@ -12,11 +12,11 @@ class Admin extends User {

const Admin({
required this.permission,
required String name,
required String email,
String? email,
String? name,
}) : super(
name: name,
email: email,
name: name,
);

factory Admin.fromJson(Map<String, dynamic> json) => _$AdminFromJson(json);
Expand Down
Expand Up @@ -3,7 +3,7 @@ User:
type: object
extends: Person
properties:
email: String?
email: String

Person:
path: user/person/
Expand Down
6 changes: 2 additions & 4 deletions test/writer/object_model_writer/extend-fields/config.txt
@@ -1,12 +1,10 @@
User:
path: user/person/
type: object
extends: Person
properties:
email: String?
email: String

Person:
path: user/person/
type: object
properties:
name: String?
name: String
6 changes: 3 additions & 3 deletions test/writer/object_model_writer/ignore/output.txt
Expand Up @@ -6,10 +6,10 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeFromJson: false, includeToJson: false)
final String? firstName;
@JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false, includeToJson: false)
String? firstName;

const Person({
Person({
this.firstName,
});

Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/import_sorting/config.txt
Expand Up @@ -2,7 +2,7 @@ BModel:
path: user/b_model/
type: object
properties:
firstName: AModel?
aModel: AModel?
AModel:
path: user/a_model/
type: object
Expand Down
@@ -0,0 +1,7 @@
Person:
path: user/person/
type: object
properties:
firstName:
include_if_null: true
type: String?
20 changes: 20 additions & 0 deletions test/writer/object_model_writer/include-if-null-true/output.txt
@@ -0,0 +1,20 @@
// GENERATED CODE - DO NOT MODIFY BY HAND

import 'package:json_annotation/json_annotation.dart';

part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
final String? firstName;

const Person({
this.firstName,
});

factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);

Map<String, dynamic> toJson() => _$PersonToJson(this);

}
@@ -0,0 +1,4 @@
name: model_generator_example

model_generator:
config_path: model_generator/config.yaml
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/includeFromJson/output.txt
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeFromJson: false)
@JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false)
final String? firstName;

const Person({
Expand Down
Expand Up @@ -5,4 +5,5 @@ Person:
firstName:
includeFromJson: false
includeToJson: false
include_if_null: false
type: String?
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeFromJson: false, includeToJson: false)
@JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false, includeToJson: false)
final String? firstName;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/includeToJson/output.txt
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeToJson: false)
@JsonKey(name: 'firstName', includeIfNull: false, includeToJson: false)
final String? firstName;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/map-reference/output.txt
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'info')
@JsonKey(name: 'info', includeIfNull: false)
final Map<String, Person>? info;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/non-final/output.txt
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'gender')
@JsonKey(name: 'gender', includeIfNull: false)
String? gender;

Person({
Expand Down
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;
@JsonKey(name: 'lastName')
final String? lastName;
Expand Down
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down

0 comments on commit 9525e23

Please sign in to comment.