@@ -7,18 +7,14 @@ package org.scalaexercises.runtime
77
88import org .scalaexercises .runtime .model ._
99
10- import scala .annotation .tailrec
1110import scala .collection .immutable .List
12- import scala .collection .JavaConversions ._
1311import scala .reflect .ClassTag
14-
1512import java .net .URLClassLoader
1613import java .io .File
17- import java .lang .ClassNotFoundException
1814
1915import cats .data .Xor
20-
2116import org .clapper .classutil .ClassFinder
17+ import org .scalaexercises .evaluator .Dependency
2218
2319object Exercises {
2420 val LIBRARIES_PACKAGE = " org.scalaexercises.content"
@@ -49,9 +45,9 @@ object Exercises {
4945
5046 val (errors, libraries) = classNames.foldLeft((Nil : List [String ], Nil : List [Library ])) { (acc, name) ⇒
5147 val loadedLibrary = for {
52- loadedClass ← guard(Class .forName(name, true , cl), s " ${ name} not found " )
53- loadedObject ← guard(loadedClass.getField(" MODULE$" ).get(null ), s " ${ name} must be defined as an object " )
54- loadedLibrary ← guard(loadedObject.asInstanceOf [Library ], s " ${ name} must extend Library " )
48+ loadedClass ← guard(Class .forName(name, true , cl), s " $name not found " )
49+ loadedObject ← guard(loadedClass.getField(" MODULE$" ).get(null ), s " $name must be defined as an object " )
50+ loadedLibrary ← guard(loadedObject.asInstanceOf [Library ], s " $name must extend Library " )
5551 } yield loadedLibrary
5652
5753 // until a bifoldable exists in Cats...
@@ -67,4 +63,33 @@ object Exercises {
6763 private def guard [A ](f : ⇒ A , message : ⇒ String ) =
6864 Xor .catchNonFatal(f).leftMap(_ ⇒ message)
6965
66+ def buildEvaluatorRequest (
67+ pkg : String ,
68+ qualifiedMethod : String ,
69+ rawArgs : List [String ],
70+ imports : List [String ] = Nil ,
71+ resolvers : List [String ],
72+ libraryDependencies : List [String ]
73+ ): (List [String ], List [Dependency ], String ) = {
74+
75+ val extractEvaluatorResolvers : List [String ] = {
76+ resolvers.filter(! _.isEmpty) map { resolver ⇒
77+ resolver.substring(resolver.indexOf(" http" ))
78+ }
79+ }
80+
81+ val extractEvaluatorDependencies : List [Dependency ] = {
82+ libraryDependencies map { dep ⇒
83+ val depArray = dep.split(" :" )
84+ Dependency (groupId = depArray(0 ), artifactId = depArray(1 ), version = depArray(2 ))
85+ }
86+ }
87+
88+ val pre = (s " import $pkg._ " :: imports).mkString(" ; " )
89+ val code = s """ $qualifiedMethod( ${rawArgs.mkString(" , " )}) """
90+
91+ val allCode = s " { $pre; $code} "
92+
93+ (extractEvaluatorResolvers, extractEvaluatorDependencies, allCode)
94+ }
7095}
0 commit comments