From 8e89468aa19ad6a2d2c2883a3acbfa1553e73312 Mon Sep 17 00:00:00 2001 From: Dennis Angelov Date: Mon, 26 Jul 2021 13:23:33 -0500 Subject: [PATCH 1/4] feat: support description param in CLI --- README.md | 1 + lib/src/commands/create.dart | 18 ++++++- test/src/commands/create_test.dart | 75 ++++++++++++++++++++++++------ 3 files changed, 80 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index b835f160..64eb12c6 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ Creates a new very good project in the specified directory. Usage: very_good create -h, --help Print this usage information. --project-name The project name for this new Flutter project. This must be a valid dart package name. + --desc The description for this new project. --org-name The organization for this new Flutter project. (defaults to "com.example.verygoodcore") -t, --template The template used to generate this new project. diff --git a/lib/src/commands/create.dart b/lib/src/commands/create.dart index aa683fa8..ef68d223 100644 --- a/lib/src/commands/create.dart +++ b/lib/src/commands/create.dart @@ -43,6 +43,11 @@ class CreateCommand extends Command { 'This must be a valid dart package name.', defaultsTo: null, ) + ..addOption( + 'desc', + help: 'The description for this new project.', + defaultsTo: '', + ) ..addOption( 'org-name', help: 'The organization for this new Flutter project.', @@ -91,13 +96,18 @@ class CreateCommand extends Command { Future run() async { final outputDirectory = _outputDirectory; final projectName = _projectName; + final description = _description; final orgName = _orgName; final template = _template; final generateDone = _logger.progress('Bootstrapping'); final generator = await _generator(template.bundle); final fileCount = await generator.generate( DirectoryGeneratorTarget(outputDirectory, _logger), - vars: {'project_name': projectName, 'org_name': orgName}, + vars: { + 'project_name': projectName, + 'description': description, + 'org_name': orgName + }, ); generateDone('Generated $fileCount file(s)'); @@ -124,6 +134,12 @@ class CreateCommand extends Command { return projectName; } + //// Gets the description for the project + String get _description { + final description = _argResults['desc'] as String? ?? ''; + return description; + } + /// Gets the organization name. List> get _orgName { final orgName = _argResults['org-name'] as String? ?? _defaultOrgName; diff --git a/test/src/commands/create_test.dart b/test/src/commands/create_test.dart index fccb91f3..d9f4f4aa 100644 --- a/test/src/commands/create_test.dart +++ b/test/src/commands/create_test.dart @@ -19,6 +19,9 @@ const expectedUsage = [ ' --project-name ' 'The project name for this new Flutter project. ' 'This must be a valid dart package name.\n' + ' --desc ' + 'The description for this new project.\n' + ' (defaults to "")\n' ' --org-name ' 'The organization for this new Flutter project.\n' ' (defaults to "com.example.verygoodcore")\n' @@ -182,6 +185,7 @@ void main() { {'value': 'example', 'separator': '.'}, {'value': 'verygoodcore', 'separator': ''} ], + 'description': '', }, ), ).called(1); @@ -197,6 +201,46 @@ void main() { ).called(1); }); + test('completes successfully w/ custom description', () async { + final argResults = MockArgResults(); + final generator = MockMasonGenerator(); + final command = CreateCommand( + analytics: analytics, + logger: logger, + generator: (_) async => generator, + )..argResultOverrides = argResults; + when(() => argResults['project-name']).thenReturn('my_app'); + when(() => argResults['desc']).thenReturn('very good description'); + when(() => argResults.rest).thenReturn(['.tmp']); + when(() => generator.id).thenReturn('generator_id'); + when(() => generator.description).thenReturn('generator description'); + when( + () => generator.generate(any(), vars: any(named: 'vars')), + ).thenAnswer((_) async => 62); + final result = await command.run(); + expect(result, equals(ExitCode.success.code)); + verify( + () => generator.generate( + any( + that: isA().having( + (g) => g.dir.path, + 'dir', + '.tmp', + ), + ), + vars: { + 'project_name': 'my_app', + 'org_name': [ + {'value': 'com', 'separator': '.'}, + {'value': 'example', 'separator': '.'}, + {'value': 'verygoodcore', 'separator': ''} + ], + 'description': 'very good description', + }, + ), + ).called(1); + }); + group('org-name', () { group('invalid --org-name', () { void expectInvalidOrgName(String orgName) async { @@ -265,45 +309,49 @@ void main() { '.tmp', ), ), - vars: {'project_name': 'my_app', 'org_name': expected}, + vars: { + 'project_name': 'my_app', + 'description': '', + 'org_name': expected + }, ), ).called(1); } - test('alphanumeric with three parts', () { - expectValidOrgName('very.good.ventures', [ + test('alphanumeric with three parts', () async { + await expectValidOrgName('very.good.ventures', [ {'value': 'very', 'separator': '.'}, {'value': 'good', 'separator': '.'}, {'value': 'ventures', 'separator': ''}, ]); }); - test('containing an underscore', () { - expectValidOrgName('very.good.test_case', [ + test('containing an underscore', () async { + await expectValidOrgName('very.good.test_case', [ {'value': 'very', 'separator': '.'}, {'value': 'good', 'separator': '.'}, {'value': 'test case', 'separator': ''}, ]); }); - test('containing a hyphen', () { - expectValidOrgName('very.bad.test-case', [ + test('containing a hyphen', () async { + await expectValidOrgName('very.bad.test-case', [ {'value': 'very', 'separator': '.'}, {'value': 'bad', 'separator': '.'}, {'value': 'test case', 'separator': ''}, ]); }); - test('single character parts', () { - expectValidOrgName('v.g.v', [ + test('single character parts', () async { + await expectValidOrgName('v.g.v', [ {'value': 'v', 'separator': '.'}, {'value': 'g', 'separator': '.'}, {'value': 'v', 'separator': ''}, ]); }); - test('more than three parts', () { - expectValidOrgName('very.good.ventures.app.identifier', [ + test('more than three parts', () async { + await expectValidOrgName('very.good.ventures.app.identifier', [ {'value': 'very', 'separator': '.'}, {'value': 'good', 'separator': '.'}, {'value': 'ventures', 'separator': '.'}, @@ -312,8 +360,8 @@ void main() { ]); }); - test('less than three parts', () { - expectValidOrgName('verygood.ventures', [ + test('less than three parts', () async { + await expectValidOrgName('verygood.ventures', [ {'value': 'verygood', 'separator': '.'}, {'value': 'ventures', 'separator': ''}, ]); @@ -387,6 +435,7 @@ void main() { {'value': 'example', 'separator': '.'}, {'value': 'verygoodcore', 'separator': ''} ], + 'description': '', }, ), ).called(1); From cda64e5e69821397308b7134e00d7bb8101e269e Mon Sep 17 00:00:00 2001 From: Dennis Angelov Date: Tue, 27 Jul 2021 13:45:42 -0500 Subject: [PATCH 2/4] update very_good_core mason bundle --- lib/src/templates/very_good_core_bundle.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/src/templates/very_good_core_bundle.dart b/lib/src/templates/very_good_core_bundle.dart index 9c1cd708..0bddb1f8 100644 --- a/lib/src/templates/very_good_core_bundle.dart +++ b/lib/src/templates/very_good_core_bundle.dart @@ -86,7 +86,7 @@ final veryGoodCoreBundle = MasonBundle.fromJson({ { "path": "web/manifest.json", "data": - "ewogICAgIm5hbWUiOiAie3sjdGl0bGVDYXNlfX17e3Byb2plY3RfbmFtZX19e3svdGl0bGVDYXNlfX0iLAogICAgInNob3J0X25hbWUiOiAie3sjdGl0bGVDYXNlfX17e3Byb2plY3RfbmFtZX19e3svdGl0bGVDYXNlfX0iLAogICAgInN0YXJ0X3VybCI6ICIuIiwKICAgICJkaXNwbGF5IjogInN0YW5kYWxvbmUiLAogICAgImJhY2tncm91bmRfY29sb3IiOiAiIzAxNzVDMiIsCiAgICAidGhlbWVfY29sb3IiOiAiIzAxNzVDMiIsCiAgICAiZGVzY3JpcHRpb24iOiAiQSBuZXcgRmx1dHRlciBwcm9qZWN0LiIsCiAgICAib3JpZW50YXRpb24iOiAicG9ydHJhaXQtcHJpbWFyeSIsCiAgICAicHJlZmVyX3JlbGF0ZWRfYXBwbGljYXRpb25zIjogZmFsc2UsCiAgICAiaWNvbnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAic3JjIjogImljb25zL0ljb24tMTkyLnBuZyIsCiAgICAgICAgICAgICJzaXplcyI6ICIxOTJ4MTkyIiwKICAgICAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAic3JjIjogImljb25zL0ljb24tNTEyLnBuZyIsCiAgICAgICAgICAgICJzaXplcyI6ICI1MTJ4NTEyIiwKICAgICAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgIF0KfQo=", + "ewogICAgIm5hbWUiOiAie3sjdGl0bGVDYXNlfX17e3Byb2plY3RfbmFtZX19e3svdGl0bGVDYXNlfX0iLAogICAgInNob3J0X25hbWUiOiAie3sjdGl0bGVDYXNlfX17e3Byb2plY3RfbmFtZX19e3svdGl0bGVDYXNlfX0iLAogICAgInN0YXJ0X3VybCI6ICIuIiwKICAgICJkaXNwbGF5IjogInN0YW5kYWxvbmUiLAogICAgImJhY2tncm91bmRfY29sb3IiOiAiIzAxNzVDMiIsCiAgICAidGhlbWVfY29sb3IiOiAiIzAxNzVDMiIsCiAgICAiZGVzY3JpcHRpb24iOiAie3tkZXNjcmlwdGlvbn19IiwKICAgICJvcmllbnRhdGlvbiI6ICJwb3J0cmFpdC1wcmltYXJ5IiwKICAgICJwcmVmZXJfcmVsYXRlZF9hcHBsaWNhdGlvbnMiOiBmYWxzZSwKICAgICJpY29ucyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJzcmMiOiAiaWNvbnMvSWNvbi0xOTIucG5nIiwKICAgICAgICAgICAgInNpemVzIjogIjE5MngxOTIiLAogICAgICAgICAgICAidHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJzcmMiOiAiaWNvbnMvSWNvbi01MTIucG5nIiwKICAgICAgICAgICAgInNpemVzIjogIjUxMng1MTIiLAogICAgICAgICAgICAidHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgfQogICAgXQp9Cg==", "type": "text" }, { @@ -835,7 +835,7 @@ final veryGoodCoreBundle = MasonBundle.fromJson({ { "path": "README.md", "data": - "IyB7eyN0aXRsZUNhc2V9fXt7cHJvamVjdF9uYW1lfX17ey90aXRsZUNhc2V9fQoKIVtjb3ZlcmFnZV1bY292ZXJhZ2VfYmFkZ2VdClshW3N0eWxlOiB2ZXJ5IGdvb2QgYW5hbHlzaXNdW3ZlcnlfZ29vZF9hbmFseXNpc19iYWRnZV1dW3ZlcnlfZ29vZF9hbmFseXNpc19saW5rXQpbIVtMaWNlbnNlOiBNSVRdW2xpY2Vuc2VfYmFkZ2VdXVtsaWNlbnNlX2xpbmtdCgpHZW5lcmF0ZWQgYnkgdGhlIFtWZXJ5IEdvb2QgQ0xJXVt2ZXJ5X2dvb2RfY2xpX2xpbmtdIPCfpJYKCi0tLQoKIyMgR2V0dGluZyBTdGFydGVkIPCfmoAKClRoaXMgcHJvamVjdCBjb250YWlucyAzIGZsYXZvcnM6CgotIGRldmVsb3BtZW50Ci0gc3RhZ2luZwotIHByb2R1Y3Rpb24KClRvIHJ1biB0aGUgZGVzaXJlZCBmbGF2b3IgZWl0aGVyIHVzZSB0aGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24gaW4gVlNDb2RlL0FuZHJvaWQgU3R1ZGlvIG9yIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgoKYGBgc2gKIyBEZXZlbG9wbWVudAokIGZsdXR0ZXIgcnVuIC0tZmxhdm9yIGRldmVsb3BtZW50IC0tdGFyZ2V0IGxpYi9tYWluX2RldmVsb3BtZW50LmRhcnQKCiMgU3RhZ2luZwokIGZsdXR0ZXIgcnVuIC0tZmxhdm9yIHN0YWdpbmcgLS10YXJnZXQgbGliL21haW5fc3RhZ2luZy5kYXJ0CgojIFByb2R1Y3Rpb24KJCBmbHV0dGVyIHJ1biAtLWZsYXZvciBwcm9kdWN0aW9uIC0tdGFyZ2V0IGxpYi9tYWluX3Byb2R1Y3Rpb24uZGFydApgYGAKCl9cKnt7I3RpdGxlQ2FzZX19e3twcm9qZWN0X25hbWV9fXt7L3RpdGxlQ2FzZX19IHdvcmtzIG9uIGlPUywgQW5kcm9pZCwgYW5kIFdlYi5fCgotLS0KCiMjIFJ1bm5pbmcgVGVzdHMg8J+nqgoKVG8gcnVuIGFsbCB1bml0IGFuZCB3aWRnZXQgdGVzdHMgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKCmBgYHNoCiQgZmx1dHRlciB0ZXN0IC0tY292ZXJhZ2UgLS10ZXN0LXJhbmRvbWl6ZS1vcmRlcmluZy1zZWVkIHJhbmRvbQpgYGAKClRvIHZpZXcgdGhlIGdlbmVyYXRlZCBjb3ZlcmFnZSByZXBvcnQgeW91IGNhbiB1c2UgW2xjb3ZdKGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC10ZXN0LXByb2plY3QvbGNvdikuCgpgYGBzaAojIEdlbmVyYXRlIENvdmVyYWdlIFJlcG9ydAokIGdlbmh0bWwgY292ZXJhZ2UvbGNvdi5pbmZvIC1vIGNvdmVyYWdlLwoKIyBPcGVuIENvdmVyYWdlIFJlcG9ydAokIG9wZW4gY292ZXJhZ2UvaW5kZXguaHRtbApgYGAKCi0tLQoKIyMgV29ya2luZyB3aXRoIFRyYW5zbGF0aW9ucyDwn4yQCgpUaGlzIHByb2plY3QgcmVsaWVzIG9uIFtmbHV0dGVyX2xvY2FsaXphdGlvbnNdW2ZsdXR0ZXJfbG9jYWxpemF0aW9uc19saW5rXSBhbmQgZm9sbG93cyB0aGUgW29mZmljaWFsIGludGVybmF0aW9uYWxpemF0aW9uIGd1aWRlIGZvciBGbHV0dGVyXVtpbnRlcm5hdGlvbmFsaXphdGlvbl9saW5rXS4KCiMjIyBBZGRpbmcgU3RyaW5ncwoKMS4gVG8gYWRkIGEgbmV3IGxvY2FsaXphYmxlIHN0cmluZywgb3BlbiB0aGUgYGFwcF9lbi5hcmJgIGZpbGUgYXQgYGxpYi9sMTBuL2FyYi9hcHBfZW4uYXJiYC4KCmBgYGFyYgp7CiAgICAiQEBsb2NhbGUiOiAiZW4iLAogICAgImNvdW50ZXJBcHBCYXJUaXRsZSI6ICJDb3VudGVyIiwKICAgICJAY291bnRlckFwcEJhclRpdGxlIjogewogICAgICAgICJkZXNjcmlwdGlvbiI6ICJUZXh0IHNob3duIGluIHRoZSBBcHBCYXIgb2YgdGhlIENvdW50ZXIgUGFnZSIKICAgIH0KfQpgYGAKCjIuIFRoZW4gYWRkIGEgbmV3IGtleS92YWx1ZSBhbmQgZGVzY3JpcHRpb24KCmBgYGFyYgp7CiAgICAiQEBsb2NhbGUiOiAiZW4iLAogICAgImNvdW50ZXJBcHBCYXJUaXRsZSI6ICJDb3VudGVyIiwKICAgICJAY291bnRlckFwcEJhclRpdGxlIjogewogICAgICAgICJkZXNjcmlwdGlvbiI6ICJUZXh0IHNob3duIGluIHRoZSBBcHBCYXIgb2YgdGhlIENvdW50ZXIgUGFnZSIKICAgIH0sCiAgICAiaGVsbG9Xb3JsZCI6ICJIZWxsbyBXb3JsZCIsCiAgICAiQGhlbGxvV29ybGQiOiB7CiAgICAgICAgImRlc2NyaXB0aW9uIjogIkhlbGxvIFdvcmxkIFRleHQiCiAgICB9Cn0KYGBgCgozLiBVc2UgdGhlIG5ldyBzdHJpbmcKCmBgYGRhcnQKaW1wb3J0ICdwYWNrYWdlOnt7cHJvamVjdF9uYW1lfX0vbDEwbi9sMTBuLmRhcnQnOwoKQG92ZXJyaWRlCldpZGdldCBidWlsZChCdWlsZENvbnRleHQgY29udGV4dCkgewogIGZpbmFsIGwxMG4gPSBjb250ZXh0LmwxMG47CiAgcmV0dXJuIFRleHQobDEwbi5oZWxsb1dvcmxkKTsKfQpgYGAKCiMjIyBBZGRpbmcgU3VwcG9ydGVkIExvY2FsZXMKClVwZGF0ZSB0aGUgYENGQnVuZGxlTG9jYWxpemF0aW9uc2AgYXJyYXkgaW4gdGhlIGBJbmZvLnBsaXN0YCBhdCBgaW9zL1J1bm5lci9JbmZvLnBsaXN0YCB0byBpbmNsdWRlIHRoZSBuZXcgbG9jYWxlLgoKYGBgeG1sCiAgICAuLi4KCiAgICA8a2V5PkNGQnVuZGxlTG9jYWxpemF0aW9uczwva2V5PgoJPGFycmF5PgoJCTxzdHJpbmc+ZW48L3N0cmluZz4KCQk8c3RyaW5nPmVzPC9zdHJpbmc+Cgk8L2FycmF5PgoKICAgIC4uLgpgYGAKCiMjIyBBZGRpbmcgVHJhbnNsYXRpb25zCgoxLiBGb3IgZWFjaCBzdXBwb3J0ZWQgbG9jYWxlLCBhZGQgYSBuZXcgQVJCIGZpbGUgaW4gYGxpYi9sMTBuL2FyYmAuCgpgYGAK4pSc4pSA4pSAIGwxMG4K4pSCICAg4pSc4pSA4pSAIGFyYgrilIIgICDilIIgICDilJzilIDilIAgYXBwX2VuLmFyYgrilIIgICDilIIgICDilJTilIDilIAgYXBwX2VzLmFyYgpgYGAKCjIuIEFkZCB0aGUgdHJhbnNsYXRlZCBzdHJpbmdzIHRvIGVhY2ggYC5hcmJgIGZpbGU6CgpgYXBwX2VuLmFyYmAKCmBgYGFyYgp7CiAgICAiQEBsb2NhbGUiOiAiZW4iLAogICAgImNvdW50ZXJBcHBCYXJUaXRsZSI6ICJDb3VudGVyIiwKICAgICJAY291bnRlckFwcEJhclRpdGxlIjogewogICAgICAgICJkZXNjcmlwdGlvbiI6ICJUZXh0IHNob3duIGluIHRoZSBBcHBCYXIgb2YgdGhlIENvdW50ZXIgUGFnZSIKICAgIH0KfQpgYGAKCmBhcHBfZXMuYXJiYAoKYGBgYXJiCnsKICAgICJAQGxvY2FsZSI6ICJlcyIsCiAgICAiY291bnRlckFwcEJhclRpdGxlIjogIkNvbnRhZG9yIiwKICAgICJAY291bnRlckFwcEJhclRpdGxlIjogewogICAgICAgICJkZXNjcmlwdGlvbiI6ICJUZXh0byBtb3N0cmFkbyBlbiBsYSBBcHBCYXIgZGUgbGEgcMOhZ2luYSBkZWwgY29udGFkb3IiCiAgICB9Cn0KYGBgCgpbY292ZXJhZ2VfYmFkZ2VdOiBjb3ZlcmFnZV9iYWRnZS5zdmcKW2ZsdXR0ZXJfbG9jYWxpemF0aW9uc19saW5rXTogaHR0cHM6Ly9hcGkuZmx1dHRlci5kZXYvZmx1dHRlci9mbHV0dGVyX2xvY2FsaXphdGlvbnMvZmx1dHRlcl9sb2NhbGl6YXRpb25zLWxpYnJhcnkuaHRtbApbaW50ZXJuYXRpb25hbGl6YXRpb25fbGlua106IGh0dHBzOi8vZmx1dHRlci5kZXYvZG9jcy9kZXZlbG9wbWVudC9hY2Nlc3NpYmlsaXR5LWFuZC1sb2NhbGl6YXRpb24vaW50ZXJuYXRpb25hbGl6YXRpb24KW2xpY2Vuc2VfYmFkZ2VdOiBodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2xpY2Vuc2UtTUlULWJsdWUuc3ZnCltsaWNlbnNlX2xpbmtdOiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVApbdmVyeV9nb29kX2FuYWx5c2lzX2JhZGdlXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9zdHlsZS12ZXJ5X2dvb2RfYW5hbHlzaXMtQjIyQzg5LnN2ZwpbdmVyeV9nb29kX2FuYWx5c2lzX2xpbmtdOiBodHRwczovL3B1Yi5kZXYvcGFja2FnZXMvdmVyeV9nb29kX2FuYWx5c2lzClt2ZXJ5X2dvb2RfY2xpX2xpbmtdOiBodHRwczovL2dpdGh1Yi5jb20vVmVyeUdvb2RPcGVuU291cmNlL3ZlcnlfZ29vZF9jbGkK", + "IyB7eyN0aXRsZUNhc2V9fXt7cHJvamVjdF9uYW1lfX17ey90aXRsZUNhc2V9fQoKIVtjb3ZlcmFnZV1bY292ZXJhZ2VfYmFkZ2VdClshW3N0eWxlOiB2ZXJ5IGdvb2QgYW5hbHlzaXNdW3ZlcnlfZ29vZF9hbmFseXNpc19iYWRnZV1dW3ZlcnlfZ29vZF9hbmFseXNpc19saW5rXQpbIVtMaWNlbnNlOiBNSVRdW2xpY2Vuc2VfYmFkZ2VdXVtsaWNlbnNlX2xpbmtdCgpHZW5lcmF0ZWQgYnkgdGhlIFtWZXJ5IEdvb2QgQ0xJXVt2ZXJ5X2dvb2RfY2xpX2xpbmtdIPCfpJYKCnt7ZGVzY3JpcHRpb259fQoKLS0tCgojIyBHZXR0aW5nIFN0YXJ0ZWQg8J+agAoKVGhpcyBwcm9qZWN0IGNvbnRhaW5zIDMgZmxhdm9yczoKCi0gZGV2ZWxvcG1lbnQKLSBzdGFnaW5nCi0gcHJvZHVjdGlvbgoKVG8gcnVuIHRoZSBkZXNpcmVkIGZsYXZvciBlaXRoZXIgdXNlIHRoZSBsYXVuY2ggY29uZmlndXJhdGlvbiBpbiBWU0NvZGUvQW5kcm9pZCBTdHVkaW8gb3IgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CgpgYGBzaAojIERldmVsb3BtZW50CiQgZmx1dHRlciBydW4gLS1mbGF2b3IgZGV2ZWxvcG1lbnQgLS10YXJnZXQgbGliL21haW5fZGV2ZWxvcG1lbnQuZGFydAoKIyBTdGFnaW5nCiQgZmx1dHRlciBydW4gLS1mbGF2b3Igc3RhZ2luZyAtLXRhcmdldCBsaWIvbWFpbl9zdGFnaW5nLmRhcnQKCiMgUHJvZHVjdGlvbgokIGZsdXR0ZXIgcnVuIC0tZmxhdm9yIHByb2R1Y3Rpb24gLS10YXJnZXQgbGliL21haW5fcHJvZHVjdGlvbi5kYXJ0CmBgYAoKX1wqe3sjdGl0bGVDYXNlfX17e3Byb2plY3RfbmFtZX19e3svdGl0bGVDYXNlfX0gd29ya3Mgb24gaU9TLCBBbmRyb2lkLCBhbmQgV2ViLl8KCi0tLQoKIyMgUnVubmluZyBUZXN0cyDwn6eqCgpUbyBydW4gYWxsIHVuaXQgYW5kIHdpZGdldCB0ZXN0cyB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBgc2gKJCBmbHV0dGVyIHRlc3QgLS1jb3ZlcmFnZSAtLXRlc3QtcmFuZG9taXplLW9yZGVyaW5nLXNlZWQgcmFuZG9tCmBgYAoKVG8gdmlldyB0aGUgZ2VuZXJhdGVkIGNvdmVyYWdlIHJlcG9ydCB5b3UgY2FuIHVzZSBbbGNvdl0oaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LXRlc3QtcHJvamVjdC9sY292KS4KCmBgYHNoCiMgR2VuZXJhdGUgQ292ZXJhZ2UgUmVwb3J0CiQgZ2VuaHRtbCBjb3ZlcmFnZS9sY292LmluZm8gLW8gY292ZXJhZ2UvCgojIE9wZW4gQ292ZXJhZ2UgUmVwb3J0CiQgb3BlbiBjb3ZlcmFnZS9pbmRleC5odG1sCmBgYAoKLS0tCgojIyBXb3JraW5nIHdpdGggVHJhbnNsYXRpb25zIPCfjJAKClRoaXMgcHJvamVjdCByZWxpZXMgb24gW2ZsdXR0ZXJfbG9jYWxpemF0aW9uc11bZmx1dHRlcl9sb2NhbGl6YXRpb25zX2xpbmtdIGFuZCBmb2xsb3dzIHRoZSBbb2ZmaWNpYWwgaW50ZXJuYXRpb25hbGl6YXRpb24gZ3VpZGUgZm9yIEZsdXR0ZXJdW2ludGVybmF0aW9uYWxpemF0aW9uX2xpbmtdLgoKIyMjIEFkZGluZyBTdHJpbmdzCgoxLiBUbyBhZGQgYSBuZXcgbG9jYWxpemFibGUgc3RyaW5nLCBvcGVuIHRoZSBgYXBwX2VuLmFyYmAgZmlsZSBhdCBgbGliL2wxMG4vYXJiL2FwcF9lbi5hcmJgLgoKYGBgYXJiCnsKICAgICJAQGxvY2FsZSI6ICJlbiIsCiAgICAiY291bnRlckFwcEJhclRpdGxlIjogIkNvdW50ZXIiLAogICAgIkBjb3VudGVyQXBwQmFyVGl0bGUiOiB7CiAgICAgICAgImRlc2NyaXB0aW9uIjogIlRleHQgc2hvd24gaW4gdGhlIEFwcEJhciBvZiB0aGUgQ291bnRlciBQYWdlIgogICAgfQp9CmBgYAoKMi4gVGhlbiBhZGQgYSBuZXcga2V5L3ZhbHVlIGFuZCBkZXNjcmlwdGlvbgoKYGBgYXJiCnsKICAgICJAQGxvY2FsZSI6ICJlbiIsCiAgICAiY291bnRlckFwcEJhclRpdGxlIjogIkNvdW50ZXIiLAogICAgIkBjb3VudGVyQXBwQmFyVGl0bGUiOiB7CiAgICAgICAgImRlc2NyaXB0aW9uIjogIlRleHQgc2hvd24gaW4gdGhlIEFwcEJhciBvZiB0aGUgQ291bnRlciBQYWdlIgogICAgfSwKICAgICJoZWxsb1dvcmxkIjogIkhlbGxvIFdvcmxkIiwKICAgICJAaGVsbG9Xb3JsZCI6IHsKICAgICAgICAiZGVzY3JpcHRpb24iOiAiSGVsbG8gV29ybGQgVGV4dCIKICAgIH0KfQpgYGAKCjMuIFVzZSB0aGUgbmV3IHN0cmluZwoKYGBgZGFydAppbXBvcnQgJ3BhY2thZ2U6e3twcm9qZWN0X25hbWV9fS9sMTBuL2wxMG4uZGFydCc7CgpAb3ZlcnJpZGUKV2lkZ2V0IGJ1aWxkKEJ1aWxkQ29udGV4dCBjb250ZXh0KSB7CiAgZmluYWwgbDEwbiA9IGNvbnRleHQubDEwbjsKICByZXR1cm4gVGV4dChsMTBuLmhlbGxvV29ybGQpOwp9CmBgYAoKIyMjIEFkZGluZyBTdXBwb3J0ZWQgTG9jYWxlcwoKVXBkYXRlIHRoZSBgQ0ZCdW5kbGVMb2NhbGl6YXRpb25zYCBhcnJheSBpbiB0aGUgYEluZm8ucGxpc3RgIGF0IGBpb3MvUnVubmVyL0luZm8ucGxpc3RgIHRvIGluY2x1ZGUgdGhlIG5ldyBsb2NhbGUuCgpgYGB4bWwKICAgIC4uLgoKICAgIDxrZXk+Q0ZCdW5kbGVMb2NhbGl6YXRpb25zPC9rZXk+Cgk8YXJyYXk+CgkJPHN0cmluZz5lbjwvc3RyaW5nPgoJCTxzdHJpbmc+ZXM8L3N0cmluZz4KCTwvYXJyYXk+CgogICAgLi4uCmBgYAoKIyMjIEFkZGluZyBUcmFuc2xhdGlvbnMKCjEuIEZvciBlYWNoIHN1cHBvcnRlZCBsb2NhbGUsIGFkZCBhIG5ldyBBUkIgZmlsZSBpbiBgbGliL2wxMG4vYXJiYC4KCmBgYArilJzilIDilIAgbDEwbgrilIIgICDilJzilIDilIAgYXJiCuKUgiAgIOKUgiAgIOKUnOKUgOKUgCBhcHBfZW4uYXJiCuKUgiAgIOKUgiAgIOKUlOKUgOKUgCBhcHBfZXMuYXJiCmBgYAoKMi4gQWRkIHRoZSB0cmFuc2xhdGVkIHN0cmluZ3MgdG8gZWFjaCBgLmFyYmAgZmlsZToKCmBhcHBfZW4uYXJiYAoKYGBgYXJiCnsKICAgICJAQGxvY2FsZSI6ICJlbiIsCiAgICAiY291bnRlckFwcEJhclRpdGxlIjogIkNvdW50ZXIiLAogICAgIkBjb3VudGVyQXBwQmFyVGl0bGUiOiB7CiAgICAgICAgImRlc2NyaXB0aW9uIjogIlRleHQgc2hvd24gaW4gdGhlIEFwcEJhciBvZiB0aGUgQ291bnRlciBQYWdlIgogICAgfQp9CmBgYAoKYGFwcF9lcy5hcmJgCgpgYGBhcmIKewogICAgIkBAbG9jYWxlIjogImVzIiwKICAgICJjb3VudGVyQXBwQmFyVGl0bGUiOiAiQ29udGFkb3IiLAogICAgIkBjb3VudGVyQXBwQmFyVGl0bGUiOiB7CiAgICAgICAgImRlc2NyaXB0aW9uIjogIlRleHRvIG1vc3RyYWRvIGVuIGxhIEFwcEJhciBkZSBsYSBww6FnaW5hIGRlbCBjb250YWRvciIKICAgIH0KfQpgYGAKCltjb3ZlcmFnZV9iYWRnZV06IGNvdmVyYWdlX2JhZGdlLnN2ZwpbZmx1dHRlcl9sb2NhbGl6YXRpb25zX2xpbmtdOiBodHRwczovL2FwaS5mbHV0dGVyLmRldi9mbHV0dGVyL2ZsdXR0ZXJfbG9jYWxpemF0aW9ucy9mbHV0dGVyX2xvY2FsaXphdGlvbnMtbGlicmFyeS5odG1sCltpbnRlcm5hdGlvbmFsaXphdGlvbl9saW5rXTogaHR0cHM6Ly9mbHV0dGVyLmRldi9kb2NzL2RldmVsb3BtZW50L2FjY2Vzc2liaWxpdHktYW5kLWxvY2FsaXphdGlvbi9pbnRlcm5hdGlvbmFsaXphdGlvbgpbbGljZW5zZV9iYWRnZV06IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvbGljZW5zZS1NSVQtYmx1ZS5zdmcKW2xpY2Vuc2VfbGlua106IGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUClt2ZXJ5X2dvb2RfYW5hbHlzaXNfYmFkZ2VdOiBodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3N0eWxlLXZlcnlfZ29vZF9hbmFseXNpcy1CMjJDODkuc3ZnClt2ZXJ5X2dvb2RfYW5hbHlzaXNfbGlua106IGh0dHBzOi8vcHViLmRldi9wYWNrYWdlcy92ZXJ5X2dvb2RfYW5hbHlzaXMKW3ZlcnlfZ29vZF9jbGlfbGlua106IGh0dHBzOi8vZ2l0aHViLmNvbS9WZXJ5R29vZE9wZW5Tb3VyY2UvdmVyeV9nb29kX2NsaQo=", "type": "text" }, { @@ -847,7 +847,7 @@ final veryGoodCoreBundle = MasonBundle.fromJson({ { "path": "pubspec.yaml", "data": - "bmFtZToge3twcm9qZWN0X25hbWV9fQpkZXNjcmlwdGlvbjogQSBuZXcgRmx1dHRlciBwcm9qZWN0Lgp2ZXJzaW9uOiAxLjAuMCsxCnB1Ymxpc2hfdG86IG5vbmUKCmVudmlyb25tZW50OgogIHNkazogIj49Mi4xMi4wIDwzLjAuMCIKCmRlcGVuZGVuY2llczoKICBmbHV0dGVyOgogICAgc2RrOiBmbHV0dGVyCiAgZmx1dHRlcl9sb2NhbGl6YXRpb25zOgogICAgc2RrOiBmbHV0dGVyCiAgYmxvYzogXjcuMC4wCiAgZmx1dHRlcl9ibG9jOiBeNy4wLjAKICBpbnRsOiBeMC4xNy4wCgpkZXZfZGVwZW5kZW5jaWVzOgogIGZsdXR0ZXJfdGVzdDoKICAgIHNkazogZmx1dHRlcgogIGJsb2NfdGVzdDogXjguMC4wCiAgbW9ja3RhaWw6IF4wLjEuMAogIHZlcnlfZ29vZF9hbmFseXNpczogXjIuMS4wCgpmbHV0dGVyOgogIHVzZXMtbWF0ZXJpYWwtZGVzaWduOiB0cnVlCiAgZ2VuZXJhdGU6IHRydWUK", + "bmFtZToge3twcm9qZWN0X25hbWV9fQpkZXNjcmlwdGlvbjoge3tkZXNjcmlwdGlvbn19CnZlcnNpb246IDEuMC4wKzEKcHVibGlzaF90bzogbm9uZQoKZW52aXJvbm1lbnQ6CiAgc2RrOiAiPj0yLjEyLjAgPDMuMC4wIgoKZGVwZW5kZW5jaWVzOgogIGZsdXR0ZXI6CiAgICBzZGs6IGZsdXR0ZXIKICBmbHV0dGVyX2xvY2FsaXphdGlvbnM6CiAgICBzZGs6IGZsdXR0ZXIKICBibG9jOiBeNy4wLjAKICBmbHV0dGVyX2Jsb2M6IF43LjAuMAogIGludGw6IF4wLjE3LjAKCmRldl9kZXBlbmRlbmNpZXM6CiAgZmx1dHRlcl90ZXN0OgogICAgc2RrOiBmbHV0dGVyCiAgYmxvY190ZXN0OiBeOC4wLjAKICBtb2NrdGFpbDogXjAuMS4wCiAgdmVyeV9nb29kX2FuYWx5c2lzOiBeMi4xLjAKCmZsdXR0ZXI6CiAgdXNlcy1tYXRlcmlhbC1kZXNpZ246IHRydWUKICBnZW5lcmF0ZTogdHJ1ZQo=", "type": "text" }, { @@ -1390,5 +1390,5 @@ final veryGoodCoreBundle = MasonBundle.fromJson({ ], "name": "very_good_core", "description": "Core Very Good Flutter App", - "vars": ["project_name"] + "vars": ["project_name", "org_name", "description"] }); From edea5e51498356a753c27b885aceab90ba79deb6 Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Tue, 27 Jul 2021 14:19:30 -0500 Subject: [PATCH 3/4] Update lib/src/commands/create.dart --- lib/src/commands/create.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/src/commands/create.dart b/lib/src/commands/create.dart index ef68d223..f16b32e7 100644 --- a/lib/src/commands/create.dart +++ b/lib/src/commands/create.dart @@ -135,10 +135,7 @@ class CreateCommand extends Command { } //// Gets the description for the project - String get _description { - final description = _argResults['desc'] as String? ?? ''; - return description; - } + String get _description => _argResults['desc'] as String ?? ''; /// Gets the organization name. List> get _orgName { From 995c8cb7e760d324ca20942ede8e6ba3370e38a6 Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Tue, 27 Jul 2021 14:24:18 -0500 Subject: [PATCH 4/4] Update lib/src/commands/create.dart --- lib/src/commands/create.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/commands/create.dart b/lib/src/commands/create.dart index f16b32e7..0a6c42f5 100644 --- a/lib/src/commands/create.dart +++ b/lib/src/commands/create.dart @@ -135,7 +135,7 @@ class CreateCommand extends Command { } //// Gets the description for the project - String get _description => _argResults['desc'] as String ?? ''; + String get _description => _argResults['desc'] as String? ?? ''; /// Gets the organization name. List> get _orgName {