Skip to content

Commit

Permalink
Merge pull request #154 from toshiossada/master
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jacobaraujo7 committed Jun 1, 2020
2 parents 4e59006 + cf6c9b6 commit 8f8a3e1
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 17 deletions.
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

0 comments on commit 8f8a3e1

Please sign in to comment.