Skip to content

Commit

Permalink
v5.9.0
Browse files Browse the repository at this point in the history
  • Loading branch information
agordn52 committed Nov 22, 2023
1 parent d37bac1 commit df1bed0
Show file tree
Hide file tree
Showing 13 changed files with 183 additions and 249 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## [5.9.0] - 2023-11-22

* New ability to create dio Interceptors using Metro. E.g. `metro make:interceptor auth_token`
* Update stubs for creating pages and api services
* Small refactor to Metro class
* Remove ny_base_networking.dart
* Update pubspec.yaml

## [5.8.0] - 2023-11-04

* Fix `make:api_service` when using Postman flag
Expand Down
44 changes: 26 additions & 18 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,18 @@ packages:
dependency: transitive
description:
name: collection
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.17.2"
version: "1.18.0"
dio:
dependency: transitive
description:
name: dio
sha256: "417e2a6f9d83ab396ec38ff4ea5da6c254da71e4db765ad737a42af6930140b7"
sha256: "01870acd87986f768e0c09cc4d7a19a59d814af7b34cbeb0b437d2c33bdfea4c"
url: "https://pub.dev"
source: hosted
version: "5.3.3"
version: "5.3.4"
equatable:
dependency: transitive
description:
Expand Down Expand Up @@ -225,25 +225,25 @@ packages:
dependency: transitive
description:
name: meta
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.10.0"
nylo_framework:
dependency: "direct dev"
description:
path: ".."
relative: true
source: path
version: "5.8.0"
version: "5.9.0"
nylo_support:
dependency: transitive
description:
name: nylo_support
sha256: d680d8d4b413d297b7b86210c3751d8f2ab87d8c56df5344ecd529725740e3bf
sha256: c20052ebd9849fa4c6908dcf0f693437647bbd56761f2cb39a3e504e0ad947e9
url: "https://pub.dev"
source: hosted
version: "5.14.0"
version: "5.15.0"
page_transition:
dependency: transitive
description:
Expand Down Expand Up @@ -324,6 +324,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.5"
pretty_dio_logger:
dependency: transitive
description:
name: pretty_dio_logger
sha256: "00b80053063935cf9a6190da344c5373b9d0e92da4c944c878ff2fbef0ef6dc2"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
pull_to_refresh_flutter3:
dependency: transitive
description:
Expand Down Expand Up @@ -421,18 +429,18 @@ packages:
dependency: transitive
description:
name: stack_trace
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
version: "1.11.0"
version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.2"
string_scanner:
dependency: transitive
description:
Expand All @@ -453,10 +461,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
url: "https://pub.dev"
source: hosted
version: "0.6.0"
version: "0.6.1"
theme_provider:
dependency: transitive
description:
Expand Down Expand Up @@ -493,10 +501,10 @@ packages:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
version: "0.3.0"
win32:
dependency: transitive
description:
Expand All @@ -514,5 +522,5 @@ packages:
source: hosted
version: "1.0.2"
sdks:
dart: ">=3.1.0 <4.0.0"
dart: ">=3.2.0-194.0.dev <4.0.0"
flutter: ">=3.7.0"
1 change: 1 addition & 0 deletions lib/metro/menu.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ All commands:
make:provider
make:event
make:api_service
make:interceptor
make:theme
make:route_guard
make:config
Expand Down
73 changes: 64 additions & 9 deletions lib/metro/metro.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:nylo_framework/json_dart_generator/dart_code_generator.dart';
import 'package:nylo_framework/metro/stubs/config_stub.dart';
import 'package:nylo_framework/metro/stubs/interceptor_stub.dart';
import 'package:nylo_framework/metro/stubs/route_guard_stub.dart';
import 'package:nylo_support/metro/models/ny_command.dart';
import 'package:nylo_framework/metro/stubs/api_service_stub.dart';
Expand Down Expand Up @@ -76,6 +77,12 @@ List<NyCommand> allCommands = [
arguments: ["-h", "-f", "-model", "-resource"],
category: "make",
action: _makeApiService),
NyCommand(
name: "interceptor",
options: 1,
arguments: ["-h", "-f"],
category: "make",
action: _makeInterceptor),
NyCommand(
name: "theme",
options: 1,
Expand Down Expand Up @@ -397,6 +404,34 @@ _makeApiService(List<String> arguments) async {
hasForceFlag: hasForceFlag);
}

/// Creates an Interceptor for Nylo projects
/// E.g. run: `dart run nylo_framework:main make:interceptor auth_token`
_makeInterceptor(List<String> arguments) async {
parser.addFlag(helpFlag,
abbr: 'h', help: 'e.g. make:interceptor auth_token', negatable: false);
parser.addFlag(forceFlag,
abbr: 'f',
help: 'Creates a new Interceptor even if it already exists.',
negatable: false);

final ArgResults argResults = parser.parse(arguments);

bool? hasForceFlag = argResults[forceFlag];

MetroService.hasHelpFlag(argResults[helpFlag], parser.usage);

MetroService.checkArguments(arguments,
'You are missing the \'name\' of the interceptor that you want to create.\ne.g. make:interceptor auth_token');

String interceptorName =
argResults.arguments.first.replaceAll(RegExp(r'(_?interceptor)'), "");

ReCase classReCase = ReCase(interceptorName);
String stubInterceptor = interceptorStub(interceptorName: classReCase);
await MetroService.makeInterceptor(classReCase.snakeCase, stubInterceptor,
forceCreate: hasForceFlag ?? false);
}

/// Creates an API Service from Postman v2 schema
_makePostmanApiService(
{required dynamic json,
Expand Down Expand Up @@ -638,17 +673,37 @@ _makePostmanApiService(
if (file.contains(apiServiceName)) {
return "";
}
RegExp reg = RegExp(
r'final Map<Type, BaseApiService> apiDecoders = \{([^}]*)\};');
String temp =
"""final Map<Type, BaseApiService> apiDecoders = {${reg.allMatches(file).map((e) => e.group(1)).toList()[0]}

if (file.contains("final Map<Type, BaseApiService> apiDecoders =")) {
RegExp reg = RegExp(
r'final Map<Type, BaseApiService> apiDecoders = \{([^}]*)\};');
String temp =
"""final Map<Type, NyApiService> apiDecoders = {${reg.allMatches(file).map((e) => e.group(1)).toList()[0]}
$apiServiceName: $apiServiceName(),
};""";

return file.replaceFirst(
RegExp(r'final Map<Type, BaseApiService> apiDecoders = \{([^}]*)\};'),
temp,
);
return file.replaceFirst(
RegExp(
r'final Map<Type, BaseApiService> apiDecoders = \{([^}]*)\};'),
temp,
);
}

if (file.contains("final Map<Type, NyApiService> apiDecoders =")) {
RegExp reg = RegExp(
r'final Map<Type, NyApiService> apiDecoders = \{([^}]*)\};');
String temp =
"""final Map<Type, NyApiService> apiDecoders = {${reg.allMatches(file).map((e) => e.group(1)).toList()[0]}
$apiServiceName: $apiServiceName(),
};""";

return file.replaceFirst(
RegExp(r'final Map<Type, NyApiService> apiDecoders = \{([^}]*)\};'),
temp,
);
}

return file;
});
}

Expand Down Expand Up @@ -827,7 +882,7 @@ _makePage(List<String> arguments) async {
await MetroService.makeController(className.snakeCase, stubController,
forceCreate: hasForceFlag ?? false);
} else {
String stubPage = pageStub(pageName: classReCase);
String stubPage = pageStub(className: classReCase);
await MetroService.makePage(className.snakeCase, stubPage,
forceCreate: hasForceFlag ?? false, addToRoute: true);
}
Expand Down
11 changes: 5 additions & 6 deletions lib/metro/stubs/api_service_stub.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@ import 'package:recase/recase.dart';
/// This stub is used to create a new API Service.
String apiServiceStub(ReCase rc,
{required ReCase model, required String baseUrl}) =>
'''
import 'package:flutter/material.dart';
import '/app/networking/dio/base_api_service.dart';
'''import 'package:flutter/material.dart';
import '/config/decoders.dart';
${baseUrl == "getEnv('API_BASE_URL')" ? "import 'package:nylo_framework/nylo_framework.dart';" : ""}
${model.originalText != 'Model' ? "import '../../app/models/${model.snakeCase}.dart';" : ""}
${model.originalText != 'Model' ? "import '/app/models/${model.snakeCase}.dart';" : ""}
class ${rc.pascalCase}ApiService extends BaseApiService {
${rc.pascalCase}ApiService({BuildContext? buildContext}) : super(buildContext);
class ${rc.pascalCase}ApiService extends NyApiService {
${rc.pascalCase}ApiService({BuildContext? buildContext}) : super(buildContext, decoders: modelDecoders);
@override
String get baseUrl => $baseUrl;
Expand Down
23 changes: 23 additions & 0 deletions lib/metro/stubs/interceptor_stub.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:recase/recase.dart';

/// This stub is used to create an Interceptor.
String interceptorStub({required ReCase interceptorName}) => '''
import 'package:nylo_framework/nylo_framework.dart';
class ${interceptorName.pascalCase}Interceptor extends Interceptor {
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
return super.onRequest(options, handler);
}
@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
handler.next(response);
}
@override
void onError(DioException dioException, ErrorInterceptorHandler handler) {
handler.next(dioException);
}
}
''';
16 changes: 10 additions & 6 deletions lib/metro/stubs/page_stub.dart
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
import 'package:recase/recase.dart';

/// This stub is used to create a new Page.
String pageStub({required ReCase pageName}) => '''
String pageStub({required ReCase className}) => '''
import 'package:flutter/material.dart';
import 'package:nylo_framework/nylo_framework.dart';
class ${pageName.pascalCase}Page extends NyPage {
class ${className.pascalCase}Page extends NyStatefulWidget {
static const path = '/${className.paramCase}';
${className.pascalCase}Page() : super(path, child: _${className.pascalCase}PageState());
}
static String path = '/${pageName.paramCase}';
class _${className.pascalCase}PageState extends NyState<${className.pascalCase}Page> {
@override
init() async {
// To update the state,
// use: refreshPage(setState: () { });
super.init();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("${pageName.titleCase}")
title: Text("${className.titleCase}")
),
body: SafeArea(
child: Container(),
Expand Down
12 changes: 8 additions & 4 deletions lib/metro/stubs/page_w_controller_stub.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,18 @@ import 'package:flutter/material.dart';
import 'package:nylo_framework/nylo_framework.dart';
import '/app/controllers/${className.snakeCase}_controller.dart';
class ${className.pascalCase}Page extends NyPage<${className.pascalCase}Controller> {
class ${className.pascalCase}Page extends NyStatefulWidget<${className.pascalCase}Controller> {
static const path = '/${className.paramCase}';
static String path = '/${className.paramCase}';
${className.pascalCase}Page() : super(path, child: _${className.pascalCase}PageState());
}
class _${className.pascalCase}PageState extends NyState<${className.pascalCase}Page> {
@override
init() async {
// To update the state,
// use: refreshPage(setState: () { });
super.init();
}
@override
Expand Down
10 changes: 5 additions & 5 deletions lib/metro/stubs/postman_api_service_stub.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ String postmanApiServiceStub(ReCase rc,
required,
required String imports,
required String baseUrl}) =>
'''
${baseUrl == "getEnv('API_BASE_URL')" ? "import 'package:nylo_framework/nylo_framework.dart';\n" : ""}import 'package:flutter/material.dart';
${imports != "" ? imports + '\n' : ''}import '/app/networking/dio/base_api_service.dart';
'''import 'package:flutter/material.dart';
import 'package:nylo_framework/nylo_framework.dart';
import '/config/decoders.dart';${imports != "" ? '\n' + imports + '' : ''}
class ${rc.pascalCase}ApiService extends BaseApiService {
${rc.pascalCase}ApiService({BuildContext? buildContext}) : super(buildContext);
class ${rc.pascalCase}ApiService extends NyApiService {
${rc.pascalCase}ApiService({BuildContext? buildContext}) : super(buildContext, decoders: modelDecoders);
@override
String get baseUrl => $baseUrl;
Expand Down

0 comments on commit df1bed0

Please sign in to comment.