Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring and increasing test coverage #40

Merged
merged 6 commits into from
Jun 17, 2018
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 1 addition & 5 deletions src/main/scala/ru/d10xa/jadd/Artifact.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,7 @@ final case class Artifact(
val art =
if (needScalaVersionResolving && maybeScalaVersion.isDefined) artifactIdWithScalaVersion(maybeScalaVersion.get)
else artifactId
val l: Seq[String] = groupIdPath :: art :: Nil
maybeVersion
.map(l :+ _)
.getOrElse(l)
.mkString("/")
(groupIdPath :: art :: Nil) mkString "/"
}

// TODO think about merge needScalaVersionResolving and isScala methods
Expand Down
68 changes: 0 additions & 68 deletions src/main/scala/ru/d10xa/jadd/Cli.scala

This file was deleted.

56 changes: 56 additions & 0 deletions src/main/scala/ru/d10xa/jadd/CommandExecutor.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package ru.d10xa.jadd

import ru.d10xa.jadd.cli.Command.Analyze
import ru.d10xa.jadd.cli.Command.Help
import ru.d10xa.jadd.cli.Command.Repl
import ru.d10xa.jadd.cli.Config
import ru.d10xa.jadd.pipelines.GradlePipeline
import ru.d10xa.jadd.pipelines.MavenPipeline
import ru.d10xa.jadd.pipelines.Pipeline
import ru.d10xa.jadd.pipelines.SbtPipeline
import ru.d10xa.jadd.pipelines.UnknownProjectPipeline
import ru.d10xa.jadd.shortcuts.ArtifactInfoFinder
import ru.d10xa.jadd.shortcuts.ArtifactShortcuts
import ru.d10xa.jadd.shortcuts.RepositoryShortcutsImpl

trait CommandExecutor {
def execute(config: Config, showUsage: () => Unit): Unit
}

class CommandExecutorImpl extends CommandExecutor {

override def execute(config: Config, showUsage: () => Unit): Unit = {
config match {
case c if c.command == Repl =>
Unit // already in repl
case c if c.command == Analyze =>
analyze.run(Ctx(c))
case c if c.command == Help =>
showUsage()
case c =>
executePipelines(c)
}
}

def executePipelines(config: Config): Unit = {
implicit val artifactInfoFinder: ArtifactInfoFinder =
new ArtifactInfoFinder(
artifactShortcuts = new ArtifactShortcuts(Utils.sourceFromSpringUri(config.shortcutsUri)),
repositoryShortcuts = RepositoryShortcutsImpl
)
val ctx = Ctx(config)
val pipelines: List[Pipeline] = List(
new GradlePipeline(ctx),
new MavenPipeline(ctx),
new SbtPipeline(ctx)
)

val activePipelines =
Option(pipelines.filter(_.applicable))
.filter(_.nonEmpty)
.getOrElse(Seq(new UnknownProjectPipeline(ctx)))

activePipelines.foreach(_.run())
}

}
2 changes: 1 addition & 1 deletion src/main/scala/ru/d10xa/jadd/Ctx.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ru.d10xa.jadd

import ru.d10xa.jadd.Cli.Config
import ru.d10xa.jadd.cli.Config

final case class Ctx(
config: Config
Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/ru/d10xa/jadd/Indent.scala
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package ru.d10xa.jadd

final case class Indent(style: Char, size: Int) {
require(style == ' ' || style == '\t')
require(Indent.isIndent(style), "indent must be space or tab char")
def take(count: Int = 1): String = style.toString * (size * count)
}
object Indent {
def space(size: Int): Indent = Indent(' ', size)
def tab(size: Int): Indent = Indent('\t', size)
def isIndent(char: Char): Boolean = char == ' ' || char == '\t'
def isIndent(style: Char): Boolean = style == ' ' || style == '\t'
}
93 changes: 8 additions & 85 deletions src/main/scala/ru/d10xa/jadd/Jadd.scala
Original file line number Diff line number Diff line change
@@ -1,93 +1,16 @@
package ru.d10xa.jadd

import ch.qos.logback.classic.Level
import ch.qos.logback.classic.LoggerContext
import com.typesafe.scalalogging.LazyLogging
import org.slf4j.LoggerFactory
import ru.d10xa.jadd.Cli.Analyze
import ru.d10xa.jadd.Cli.Config
import ru.d10xa.jadd.Cli.Help
import ru.d10xa.jadd.Cli.Repl
import ru.d10xa.jadd.pipelines.GradlePipeline
import ru.d10xa.jadd.pipelines.MavenPipeline
import ru.d10xa.jadd.pipelines.Pipeline
import ru.d10xa.jadd.pipelines.SbtPipeline
import ru.d10xa.jadd.pipelines.UnknownProjectPipeline
import ru.d10xa.jadd.shortcuts.ArtifactInfoFinder
import ru.d10xa.jadd.shortcuts.ArtifactShortcuts
import ru.d10xa.jadd.shortcuts.RepositoryShortcutsImpl
import ru.d10xa.jadd.cli.Cli

object Jadd extends LazyLogging {

def run(config: Config): Unit = {
implicit val artifactInfoFinder: ArtifactInfoFinder =
new ArtifactInfoFinder(
artifactShortcuts = new ArtifactShortcuts(Utils.sourceFromSpringUri(config.shortcutsUri)),
repositoryShortcuts = RepositoryShortcutsImpl
)
val ctx = Ctx(config)
val pipelines: List[Pipeline] = List(
new GradlePipeline(ctx),
new MavenPipeline(ctx),
new SbtPipeline(ctx)
)

val activePipelines =
Option(pipelines.filter(_.applicable))
.filter(_.nonEmpty)
.getOrElse(Seq(new UnknownProjectPipeline(ctx)))

activePipelines.foreach(_.run())
}
object Jadd {

def main(args: Array[String]): Unit = {
readConfig(args) match {
case Some(config) if config.command == Repl =>
ReplCommand.runRepl(runOnceForRepl)
case Some(config) =>
runOnce(args, config)
case None =>
logger.error("arguments are bad")
}
}

def readConfig(args: Array[String]): Option[Config] = {
val maybeConfig: Option[Config] =
Cli.parser.parse(args, Cli.Config())
maybeConfig.foreach { cfg =>
if(cfg.debug) enableDebugMode()
}
maybeConfig
}

def runOnceForRepl(args: Array[String]): Unit = {
// TODO reduce copy/paste from main
readConfig(args) match {
case Some(config) =>
runOnce(args, config)
case None =>
logger.error("arguments are bad")
}
}

def runOnce(args: Array[String], config: Config): Unit = {
config match {
case c if c.command == Repl =>
Unit // already in repl
case c if c.command == Analyze =>
analyze.run(Ctx(c))
case c if c.command == Help =>
Cli.parser.showUsage()
case c =>
Jadd.run(c)
}
}

def enableDebugMode(): Unit = {
val loggerContext = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext]
val rootLogger = loggerContext.getLogger("ru.d10xa.jadd")
rootLogger.setLevel(Level.DEBUG)
logger.debug("Debug mode enabled")
val runner = new JaddRunner(
cli = Cli,
commandExecutor = new CommandExecutorImpl,
loggingUtil = LoggingUtil
)
runner.run(args)
}

}
33 changes: 33 additions & 0 deletions src/main/scala/ru/d10xa/jadd/JaddRunner.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ru.d10xa.jadd

import com.typesafe.scalalogging.StrictLogging
import ru.d10xa.jadd.cli.Config
import ru.d10xa.jadd.cli.Command.Repl
import ru.d10xa.jadd.cli.Cli

class JaddRunner(
cli: Cli,
loggingUtil: LoggingUtil,
commandExecutor: CommandExecutor
) extends StrictLogging {

def run(args: Array[String]): Unit = {

def runOnce(args: Array[String], config: Config): Unit =
commandExecutor.execute(config, () => logger.info(config.usage))

def readConfig(args: Array[String]): Config = {
val config = cli.parse(args)
if(config.debug) loggingUtil.enableDebug()
config
}

def runOnceForRepl(args: Array[String]): Unit =
runOnce(args, readConfig(args))

val config: Config = readConfig(args)
if (config.command == Repl) ReplCommand.runRepl(runOnceForRepl)
else runOnce(args, config)
}

}
19 changes: 19 additions & 0 deletions src/main/scala/ru/d10xa/jadd/LoggingUtil.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ru.d10xa.jadd

import ch.qos.logback.classic.Level
import ch.qos.logback.classic.LoggerContext
import com.typesafe.scalalogging.LazyLogging
import org.slf4j.LoggerFactory

trait LoggingUtil {
def enableDebug(): Unit
}

object LoggingUtil extends LoggingUtil with LazyLogging {
override def enableDebug(): Unit = {
val loggerContext = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext]
val rootLogger = loggerContext.getLogger("ru.d10xa.jadd")
rootLogger.setLevel(Level.DEBUG)
logger.debug("Debug mode enabled")
}
}