Skip to content

Commit

Permalink
feat: create dart package new usage
Browse files Browse the repository at this point in the history
  • Loading branch information
renancaraujo committed Jan 6, 2023
1 parent c6acd32 commit 21ddedb
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 1 deletion.
2 changes: 2 additions & 0 deletions lib/src/commands/create/commands/commands.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export 'dart_package.dart';
export 'flutter_app.dart';
35 changes: 35 additions & 0 deletions lib/src/commands/create/commands/dart_package.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import 'package:mason_logger/mason_logger.dart';
import 'package:usage/usage.dart';
import 'package:very_good_cli/src/commands/create/create_subcommand.dart';
import 'package:very_good_cli/src/commands/create/templates/templates.dart';

/// {@template very_good_create_dart_package_command}
/// A [CreateSubCommand] for creating Dart packages.
/// {@endtemplate}
class CreateDartPackage extends CreateSubCommand with Publishable {
/// {@macro very_good_create_dart_package_command}
CreateDartPackage({
required Analytics analytics,
required Logger logger,
required MasonGeneratorFromBundle? generatorFromBundle,
required MasonGeneratorFromBrick? generatorFromBrick,
}) : super(
analytics: analytics,
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
);

@override
String get name => 'dart_package';

@override
List<String> get aliases => ['dart_pkg'];

@override
String get description =>
'Creates a new very good Dart package in the specified directory.';

@override
Template get template => DartPkgTemplate();
}
12 changes: 11 additions & 1 deletion lib/src/commands/create/create.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:args/command_runner.dart';
import 'package:mason/mason.dart';
import 'package:usage/usage_io.dart';
import 'package:very_good_cli/src/commands/create/commands/flutter_app.dart';
import 'package:very_good_cli/src/commands/create/commands/commands.dart';
import 'package:very_good_cli/src/commands/create/create_legacy.dart';
import 'package:very_good_cli/src/commands/create/create_subcommand.dart';

Expand Down Expand Up @@ -40,6 +40,16 @@ class CreateCommand extends Command<int> {
generatorFromBrick: generatorFromBrick,
),
);

// very_good create dart_pkg <args>
addSubcommand(
CreateDartPackage(
analytics: analytics,
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);
}

@override
Expand Down
19 changes: 19 additions & 0 deletions lib/src/commands/create/create_subcommand.dart
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,14 @@ abstract class CreateSubCommand extends Command<int> {
aliases: ['org'],
);
}

if (this is Publishable) {
argParser.addFlag(
'publishable',
negatable: false,
help: 'Whether the generated project is intended to be published.',
);
}
}

final Analytics _analytics;
Expand Down Expand Up @@ -235,6 +243,7 @@ abstract class CreateSubCommand extends Command<int> {
'project_name': projectName,
'description': projectDescription,
if (this is OrgName) 'org_name': (this as OrgName).orgName,
if (this is Publishable) 'publishable': (this as Publishable).publishable,
};
}
}
Expand Down Expand Up @@ -297,3 +306,13 @@ mixin MultiTemplates on CreateSubCommand {
);
}
}

/// Mixin for [CreateSubCommand] subclasses that receives the publishable
/// flag.
///
/// Takes care of parsing it from [argResults] and pass it
/// to the brick generator.
mixin Publishable on CreateSubCommand {
/// Gets the publishable flag.
bool get publishable => argResults['publishable'] as bool? ?? false;
}

0 comments on commit 21ddedb

Please sign in to comment.