Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ class AppArgumentProcessor(
.parsePrimaryWithSecondaries(arguments = arguments, primaryFlag = NewArchitecturePrimary)
.map { secondaries ->
ArchitectureRequest(
enableHilt = true,
enableCompose = !secondaries.containsKey(SecondaryFlagConstants.NO_COMPOSE),
enableKtlint = secondaries.containsKey(SecondaryFlagConstants.KTLINT),
enableDetekt = secondaries.containsKey(SecondaryFlagConstants.DETEKT),
Expand All @@ -141,6 +142,7 @@ class AppArgumentProcessor(
ProjectTemplateRequest(
projectName = secondaries[SecondaryFlagConstants.NAME].orEmpty(),
packageName = secondaries[SecondaryFlagConstants.PACKAGE].orEmpty(),
enableHilt = true,
enableCompose = !secondaries.containsKey(SecondaryFlagConstants.NO_COMPOSE),
enableKtlint = secondaries.containsKey(SecondaryFlagConstants.KTLINT),
enableDetekt = secondaries.containsKey(SecondaryFlagConstants.DETEKT),
Expand Down
97 changes: 4 additions & 93 deletions cli/src/main/kotlin/com/mitteloupe/cag/cli/Main.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.mitteloupe.cag.cli

import com.mitteloupe.cag.cli.HelpContent.USAGE_SYNTAX
import com.mitteloupe.cag.cli.configuration.ClientConfigurationLoader
import com.mitteloupe.cag.cli.filesystem.CliFileSystemBridge
import com.mitteloupe.cag.cli.help.printHelpMessage
import com.mitteloupe.cag.cli.help.printUsageMessage
import com.mitteloupe.cag.core.GenerationException
import com.mitteloupe.cag.core.Generator
import com.mitteloupe.cag.core.GeneratorFactory
Expand Down Expand Up @@ -87,6 +88,7 @@ fun main(arguments: Array<String>) {
packageName = request.packageName,
overrideMinimumAndroidSdk = null,
overrideAndroidGradlePluginVersion = null,
enableHilt = request.enableHilt,
enableCompose = request.enableCompose,
enableKtlint = request.enableKtlint,
enableDetekt = request.enableDetekt,
Expand Down Expand Up @@ -116,6 +118,7 @@ fun main(arguments: Array<String>) {
GenerateArchitectureRequest(
destinationRootDirectory = destinationRootDirectory,
architecturePackageName = architecturePackageName,
enableHilt = request.enableHilt,
enableCompose = request.enableCompose,
enableKtlint = request.enableKtlint,
enableDetekt = request.enableDetekt
Expand Down Expand Up @@ -239,98 +242,6 @@ private fun String?.toDirectory(destinationRootDirectory: File) =
}
}

private fun printUsageMessage() {
println(
"""
$USAGE_SYNTAX

Run with --help or -h for more options.
""".trimIndent()
)
}

private fun printHelpMessage() {
println(
"""
$USAGE_SYNTAX

Note: You must use either long form (--flag) or short form (-f) arguments consistently throughout your command. Mixing both forms is not allowed.

Options:
--new-project | -np
Generate a complete Clean Architecture project template
--name=ProjectName | -n=ProjectName | -n ProjectName | -nProjectName
Specify the project name (required)
--package=PackageName | --package PackageName | -p=PackageName | -p PackageName | -pPackageName
Specify the package name (required)
--no-compose | -nc
Disable Compose support for the project
--ktlint | -kl
Enable ktlint for the project
--detekt | -d
Enable detekt for the project
--ktor | -kt
Enable Ktor for data sources
--retrofit | -rt
Enable Retrofit for data sources
--new-architecture | -na
Generate a new Clean Architecture package with domain, presentation, and UI layers
--no-compose | -nc
Disable Compose support for the preceding architecture package
--ktlint | -kl
Enable ktlint for the preceding architecture package
--detekt | -d
Enable detekt for the preceding architecture package
--new-feature | -nf
Generate a new feature
--name=FeatureName | -n=FeatureName | -n FeatureName | -nFeatureName
Specify the feature name (required)
--package=PackageName | --package PackageName | -p=PackageName | -p PackageName | -pPackageName
Override the feature package for the preceding feature
--ktlint | -kl
Enable ktlint for the preceding feature (adds plugin and .editorconfig if missing)
--detekt | -d
Enable detekt for the preceding feature (adds plugin and detekt.yml if missing)
--new-datasource | -nds
Generate a new data source
--name=DataSourceName | -n=DataSourceName | -n DataSourceName | -nDataSourceName
Specify the data source name (required, DataSource suffix will be added automatically)
--with=ktor|retrofit|ktor,retrofit | -w=ktor|retrofit|ktor,retrofit
Attach dependencies to the preceding new data source
--new-use-case | -nuc
Generate a new use case
--name=UseCaseName | -n=UseCaseName | -n UseCaseName | -nUseCaseName
Specify the use case name (required)
--path=TargetPath | --path TargetPath | -p=TargetPath | -p TargetPath | -pTargetPath
Specify the target directory for the preceding use case
--new-view-model | -nvm
Generate a new ViewModel
--name=ViewModelName | -n=ViewModelName | -n ViewModelName | -nViewModelName
Specify the ViewModel name (required)
--path=TargetPath | --path TargetPath | -p=TargetPath | -p TargetPath | -pTargetPath
Specify the target directory for the preceding ViewModel
--help, -h
Show this help message and exit
""".trimIndent()
)
}

private fun printHelpMessage(topic: String?) {
val normalized = topic?.lowercase()?.trim()
if (normalized.isNullOrEmpty() || normalized == "all" || normalized == "overview") {
printHelpMessage()
return
}
val sections = HelpContent.helpSections()
val content = sections[normalized]
if (content != null) {
println(content)
} else {
println("Unknown help topic: $topic\nAvailable topics: ${sections.keys.sorted().joinToString(", ")}\n")
printHelpMessage()
}
}

private fun produceGenerator(): Generator = GeneratorFactory(CliFileSystemBridge()).create()

private fun executeAndReport(operation: () -> Unit) =
Expand Down
2 changes: 2 additions & 0 deletions cli/src/main/kotlin/com/mitteloupe/cag/cli/ManPagePrinter.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.mitteloupe.cag.cli

import com.mitteloupe.cag.cli.help.HelpContent

object ManPagePrinter {
fun printManPage(topic: String?) {
val name = "cag"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mitteloupe.cag.cli
package com.mitteloupe.cag.cli.help

object HelpContent {
private const val NEW_PROJECT_SYNTAX =
Expand Down
95 changes: 95 additions & 0 deletions cli/src/main/kotlin/com/mitteloupe/cag/cli/help/HelpPrinter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package com.mitteloupe.cag.cli.help

import com.mitteloupe.cag.cli.help.HelpContent.USAGE_SYNTAX

fun printUsageMessage() {
println(
"""
$USAGE_SYNTAX

Run with --help or -h for more options.
""".trimIndent()
)
}

fun printHelpMessage() {
println(
"""
$USAGE_SYNTAX

Note: You must use either long form (--flag) or short form (-f) arguments consistently throughout your command. Mixing both forms is not allowed.

Options:
--new-project | -np
Generate a complete Clean Architecture project template
--name=ProjectName | -n=ProjectName | -n ProjectName | -nProjectName
Specify the project name (required)
--package=PackageName | --package PackageName | -p=PackageName | -p PackageName | -pPackageName
Specify the package name (required)
--no-compose | -nc
Disable Compose support for the project
--ktlint | -kl
Enable ktlint for the project
--detekt | -d
Enable detekt for the project
--ktor | -kt
Enable Ktor for data sources
--retrofit | -rt
Enable Retrofit for data sources
--new-architecture | -na
Generate a new Clean Architecture package with domain, presentation, and UI layers
--no-compose | -nc
Disable Compose support for the preceding architecture package
--ktlint | -kl
Enable ktlint for the preceding architecture package
--detekt | -d
Enable detekt for the preceding architecture package
--new-feature | -nf
Generate a new feature
--name=FeatureName | -n=FeatureName | -n FeatureName | -nFeatureName
Specify the feature name (required)
--package=PackageName | --package PackageName | -p=PackageName | -p PackageName | -pPackageName
Override the feature package for the preceding feature
--ktlint | -kl
Enable ktlint for the preceding feature (adds plugin and .editorconfig if missing)
--detekt | -d
Enable detekt for the preceding feature (adds plugin and detekt.yml if missing)
--new-datasource | -nds
Generate a new data source
--name=DataSourceName | -n=DataSourceName | -n DataSourceName | -nDataSourceName
Specify the data source name (required, DataSource suffix will be added automatically)
--with=ktor|retrofit|ktor,retrofit | -w=ktor|retrofit|ktor,retrofit
Attach dependencies to the preceding new data source
--new-use-case | -nuc
Generate a new use case
--name=UseCaseName | -n=UseCaseName | -n UseCaseName | -nUseCaseName
Specify the use case name (required)
--path=TargetPath | --path TargetPath | -p=TargetPath | -p TargetPath | -pTargetPath
Specify the target directory for the preceding use case
--new-view-model | -nvm
Generate a new ViewModel
--name=ViewModelName | -n=ViewModelName | -n ViewModelName | -nViewModelName
Specify the ViewModel name (required)
--path=TargetPath | --path TargetPath | -p=TargetPath | -p TargetPath | -pTargetPath
Specify the target directory for the preceding ViewModel
--help, -h
Show this help message and exit
""".trimIndent()
)
}

fun printHelpMessage(topic: String?) {
val normalized = topic?.lowercase()?.trim()
if (normalized.isNullOrEmpty() || normalized == "all" || normalized == "overview") {
printHelpMessage()
return
}
val sections = HelpContent.helpSections()
val content = sections[normalized]
if (content != null) {
println(content)
} else {
println("Unknown help topic: $topic\nAvailable topics: ${sections.keys.sorted().joinToString(", ")}\n")
printHelpMessage()
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.mitteloupe.cag.cli.request

data class ArchitectureRequest(
val enableCompose: Boolean = true,
val enableKtlint: Boolean = false,
val enableDetekt: Boolean = false,
val enableGit: Boolean = false
val enableHilt: Boolean,
val enableCompose: Boolean,
val enableKtlint: Boolean,
val enableDetekt: Boolean,
val enableGit: Boolean
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package com.mitteloupe.cag.cli.request
data class ProjectTemplateRequest(
val projectName: String,
val packageName: String,
val enableCompose: Boolean = true,
val enableKtlint: Boolean = false,
val enableDetekt: Boolean = false,
val enableKtor: Boolean = false,
val enableRetrofit: Boolean = false,
val enableGit: Boolean = false
val enableHilt: Boolean,
val enableCompose: Boolean,
val enableKtlint: Boolean,
val enableDetekt: Boolean,
val enableKtor: Boolean,
val enableRetrofit: Boolean,
val enableGit: Boolean
)
Original file line number Diff line number Diff line change
Expand Up @@ -750,11 +750,13 @@ class AppArgumentProcessorTest {
ProjectTemplateRequest(
projectName = "MyApp",
packageName = "com.example",
enableHilt = true,
enableCompose = true,
enableKtlint = true,
enableDetekt = true,
enableKtor = true,
enableRetrofit = true
enableRetrofit = true,
enableGit = false
)

// When
Expand All @@ -772,11 +774,13 @@ class AppArgumentProcessorTest {
ProjectTemplateRequest(
projectName = "TestApp",
packageName = "com.test",
enableHilt = true,
enableCompose = false,
enableKtlint = true,
enableDetekt = true,
enableKtor = true,
enableRetrofit = true
enableRetrofit = true,
enableGit = false
)

// When
Expand All @@ -794,11 +798,13 @@ class AppArgumentProcessorTest {
ProjectTemplateRequest(
projectName = "MinimalApp",
packageName = "",
enableHilt = true,
enableCompose = true,
enableKtlint = false,
enableDetekt = false,
enableKtor = false,
enableRetrofit = false
enableRetrofit = false,
enableGit = false
)

// When
Expand All @@ -816,11 +822,13 @@ class AppArgumentProcessorTest {
ProjectTemplateRequest(
projectName = "NoComposeApp",
packageName = "",
enableHilt = true,
enableCompose = false,
enableKtlint = false,
enableDetekt = false,
enableKtor = false,
enableRetrofit = false
enableRetrofit = false,
enableGit = false
)

// When
Expand All @@ -838,21 +846,25 @@ class AppArgumentProcessorTest {
ProjectTemplateRequest(
projectName = "First",
packageName = "com.first",
enableHilt = true,
enableCompose = true,
enableKtlint = false,
enableDetekt = false,
enableKtor = false,
enableRetrofit = false
enableRetrofit = false,
enableGit = false
)
val expectedRequest2 =
ProjectTemplateRequest(
projectName = "Second",
packageName = "",
enableHilt = true,
enableCompose = true,
enableKtlint = false,
enableDetekt = false,
enableKtor = false,
enableRetrofit = false
enableRetrofit = false,
enableGit = false
)

// When
Expand Down Expand Up @@ -968,6 +980,7 @@ class AppArgumentProcessorTest {
ProjectTemplateRequest(
projectName = "GitApp",
packageName = "",
enableHilt = true,
enableCompose = true,
enableKtlint = false,
enableDetekt = false,
Expand Down
2 changes: 2 additions & 0 deletions core/src/main/kotlin/com/mitteloupe/cag/core/Generator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ class Generator(
architectureFilesGenerator.generateArchitecture(
destinationRootDirectory = request.destinationRootDirectory,
architecturePackageName = request.architecturePackageName,
enableHilt = request.enableHilt,
enableCompose = request.enableCompose,
enableKtlint = request.enableKtlint,
enableDetekt = request.enableDetekt
Expand All @@ -96,6 +97,7 @@ class Generator(
packageName = request.packageName,
overrideMinimumAndroidSdk = request.overrideMinimumAndroidSdk,
overrideAndroidGradlePluginVersion = request.overrideAndroidGradlePluginVersion,
enableHilt = request.enableHilt,
enableCompose = request.enableCompose,
enableKtlint = request.enableKtlint,
enableDetekt = request.enableDetekt,
Expand Down
Loading