Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Contempla em fazer os imports através de caminhos relativos do projeto e não atraves do caminho do package respeitando o effective_dart(prefer relative imports), também acho melhor gerar as interfaces em uma pasta chamada interface e modifiquei o jeito q o @Bwolfs2 gera na mesma pasta do repositorio #154

Merged
merged 11 commits into from
Jun 1, 2020
Merged
21 changes: 21 additions & 0 deletions lib/src/modules/start.dart
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,26 @@ Function blocOrModular([int selected, String directory]) {
};
}

void generateScript() async {
final yaml = File('pubspec.yaml');
var node = yaml.readAsLinesSync();

final index =
node.indexWhere((t) => t.contains('uses-material-design: true')) + 1;

try {
node.insert(index, 'scripts: ');
node.insert(index + 1,
'\n mobx_build: flutter clean & flutter pub get & flutter pub run build_runner build --delete-conflicting-outputs');
node.insert(index + 1,
'\n mobx_watch: flutter clean & flutter pub get & flutter pub run build_runner watch --delete-conflicting-outputs');

yaml.writeAsStringSync(node.join('\n') + '\n');
} catch (e) {
output.error('Erro o generate scripts');
}
}

Function selecStateManagement([int selected, String directory]) {
selected ??= stateCLIOptions('Choose a state manager', [
'mobx (default)',
Expand All @@ -121,6 +141,7 @@ Function selecStateManagement([int selected, String directory]) {
await install(['mobx', 'flutter_mobx'], false, directory: directory);
await install(['build_runner', 'mobx_codegen'], true,
directory: directory);
await generateScript();
} else {
exit(1);
}
Expand Down
4 changes: 2 additions & 2 deletions lib/src/templates/generator/repository_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ abstract class I${obj.name}Repository implements Disposable {

String extendsInterfaceRepositoryGeneratorModular(ObjectGenerate obj) => '''
import 'package:dio/dio.dart';
import '${ReCase(obj.name).snakeCase}_repository_interface.dart';
import 'interfaces/${ReCase(obj.name).snakeCase}_repository_interface.dart';

class ${obj.name}Repository implements I${obj.name}Repository {

Expand Down Expand Up @@ -90,7 +90,7 @@ abstract class I${obj.name}Repository implements Disposable {

String extendsInterfaceRepositoryGenerator(ObjectGenerate obj) => '''
import 'package:dio/dio.dart';
import '${ReCase(obj.name).snakeCase}_repository_interface.dart';
import 'interfaces/${ReCase(obj.name).snakeCase}_repository_interface.dart';

class ${obj.name}Repository implements I${obj.name}Repository {

Expand Down
11 changes: 9 additions & 2 deletions lib/src/templates/generator/repository_test_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,18 @@ void main() {
}
''';

String interfaceRepositoryTestGenerator(ObjectGenerate obj) => '''
String interfaceRepositoryTestGenerator(ObjectGenerate obj) {
var fileDart = obj.import.split('/').last;
var import =
'${obj.import.replaceFirst("lib/", "").replaceAll(fileDart, 'interfaces/')}${fileDart}';
return '''
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:dio/dio.dart';

import 'package:${obj.packageName}/${obj.import.replaceFirst("lib/", "").replaceAll("\\", "/").replaceAll("_repository.dart", "_repository_interface.dart")}';
import 'package:${obj.packageName}/${import.replaceAll('.dart', '_interface.dart')}';



class MockClient extends Mock implements Dio {}

Expand Down Expand Up @@ -69,3 +75,4 @@ void main() {
});
}
''';
}
4 changes: 2 additions & 2 deletions lib/src/templates/generator/service_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ abstract class I${obj.name}Service implements Disposable {

String extendsInterfaceServiceGenerator(ObjectGenerate obj) => '''
import 'package:bloc_pattern/bloc_pattern.dart';
import '${ReCase(obj.name).snakeCase}_service_interface.dart';
import 'interfaces/${ReCase(obj.name).snakeCase}_service_interface.dart';

class ${obj.name}Service implements I${obj.name}Service {
//dispose will be called automatically
Expand All @@ -60,7 +60,7 @@ abstract class I${obj.name}Service implements Disposable {

String extendsInterfaceServiceGeneratorModular(ObjectGenerate obj) => '''
import 'package:flutter_modular/flutter_modular.dart';
import '${ReCase(obj.name).snakeCase}_service_interface.dart';
import 'interfaces/${ReCase(obj.name).snakeCase}_service_interface.dart';

class ${obj.name}Service implements I${obj.name}Service {
//dispose will be called automatically
Expand Down
9 changes: 7 additions & 2 deletions lib/src/templates/generator/service_test_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,14 @@ void main() {
}
''';

String interfaceServiceTestGenerator(ObjectGenerate obj) => '''
String interfaceServiceTestGenerator(ObjectGenerate obj) {
var fileDart = obj.import.split('/').last;
var import =
'${obj.import.replaceFirst("lib/", "").replaceAll(fileDart, 'interfaces/')}${fileDart}';
return '''
import 'package:flutter_test/flutter_test.dart';

import 'package:${obj.packageName}/${obj.import.replaceFirst("lib/", "").replaceAll("\\", "/").replaceAll("_service.dart", "_service_interface.dart")}';
import 'package:${obj.packageName}/${import.replaceAll(".dart", "_interface.dart")}';


void main() {
Expand All @@ -44,3 +48,4 @@ void main() {
});
}
''';
}
34 changes: 25 additions & 9 deletions lib/src/utils/file_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ Future createFile(
'${dir.path.replaceFirst("lib/", "test/")}/${name}_${type.replaceAll("_complete", "")}_test.dart');
}
} else {
file =
File('${dir.path}/${ReCase(name).snakeCase}_${type}_interface.dart');
file = File(
'${dir.path}/interfaces/${ReCase(name).snakeCase}_${type}_interface.dart');
}

if (await file.exists()) {
Expand Down Expand Up @@ -260,17 +260,32 @@ Future<File> addModule(
var node = (await module.readAsString()).split('\n');

var packageName = await getNamePackage();
var import =
'package:${packageName}/${path.replaceFirst("lib/", "").replaceAll("\\", "/")}'
.replaceAll('$packageName/$packageName', packageName);

var pathFormated = path.replaceFirst('lib/', '').replaceAll('\\', '/');
var pathFile = '${packageName}/${pathFormated}'
.replaceAll('$packageName/$packageName', '')
.replaceFirst('lib/', '')
.replaceAll('\\', '/')
.split('app/')
.last
.replaceFirst('modules/', '');
pathFile = pathFile.replaceFirst('${pathFile.split('/').first}/', '');

var import = "import '$pathFile';";
if (hasInterface) {
import +=
'\';\n import \'package:${packageName}/${path.replaceFirst("lib/", "").replaceAll("\\", "/")}'
.replaceAll('.dart', '_interface.dart');
var file = pathFile.split('/').last;
var interfacePath = pathFile.replaceAll(
file, 'interfaces/${file.replaceFirst('.dart', '_interface.dart')}');

import += "\nimport '${interfacePath}';";
}

node.insert(0, " import '$import';");
node.insert(0, import);
if (nameCap.contains('Repository') &&
!node.any(
(element) => element.contains("import 'package:dio/dio.dart';"))) {
node.insert(0, "import 'package:dio/dio.dart';");
}

index = node.indexWhere((t) => t.contains('binds => ['));
node[index] = node[index].replaceFirst(
Expand All @@ -286,6 +301,7 @@ Future<File> addModule(

await module.writeAsString(node.join('\n'));
await formatFile(module);

output.success('${module.path} modified');
return module;
}
Expand Down