Skip to content

Commit 4d71540

Browse files
Integrates freestyle and sbt-org-policies plugin, and, also:
* Fixes compilation issues * Moves core sources to correct folder * Fixes tests * Provides Scalafmt as code formatter * Autoheaders changes
1 parent 5614891 commit 4d71540

File tree

7 files changed

+124
-107
lines changed

7 files changed

+124
-107
lines changed

src/main/scala/org/scalaexercises/exercises/Exercises.scala

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* scala-exercises-runtime
2+
* scala-exercises - runtime
33
* Copyright (C) 2015-2016 47 Degrees, LLC. <http://www.47deg.com>
44
*/
55

@@ -20,33 +20,38 @@ object Exercises {
2020
val LIBRARIES_PACKAGE = "org.scalaexercises.content"
2121

2222
private[this] def classMap(cl: ClassLoader) = {
23-
val files = cl.asInstanceOf[URLClassLoader].getURLs map (_.getFile)
23+
val files = cl.asInstanceOf[URLClassLoader].getURLs map (_.getFile)
2424
val classFinder = ClassFinder(files map (new File(_)) filter (f f.exists()))
25-
val classes = classFinder.getClasses.toIterator
25+
val classes = classFinder.getClasses.toIterator
2626
ClassFinder.classInfoMap(classes)
2727
}
2828

2929
private[this] def subclassesOf[A: ClassTag](cl: ClassLoader): List[String] = {
30-
def loop(currentClassLoader: ClassLoader, acc: List[String]): List[String] = Option(currentClassLoader) match {
31-
case None acc
32-
case Some(cll: URLClassLoader)
33-
val cn = ClassFinder.concreteSubclasses(implicitly[ClassTag[A]].runtimeClass.getName, classMap(cll))
34-
.filter(_.name.startsWith(LIBRARIES_PACKAGE))
35-
.map(_.name)
36-
.toList
37-
loop(currentClassLoader.getParent, acc ++ cn)
38-
case Some(o) loop(o.getParent, acc)
39-
}
30+
def loop(currentClassLoader: ClassLoader, acc: List[String]): List[String] =
31+
Option(currentClassLoader) match {
32+
case None acc
33+
case Some(cll: URLClassLoader)
34+
val cn = ClassFinder
35+
.concreteSubclasses(implicitly[ClassTag[A]].runtimeClass.getName, classMap(cll))
36+
.filter(_.name.startsWith(LIBRARIES_PACKAGE))
37+
.map(_.name)
38+
.toList
39+
loop(currentClassLoader.getParent, acc ++ cn)
40+
case Some(o) loop(o.getParent, acc)
41+
}
4042
loop(cl, Nil)
4143
}
4244

43-
def discoverLibraries(cl: ClassLoader = classOf[Exercise].getClassLoader): (List[String], List[Library]) = {
45+
def discoverLibraries(
46+
cl: ClassLoader = classOf[Exercise].getClassLoader): (List[String], List[Library]) = {
4447
val classNames: List[String] = subclassesOf[Library](cl)
4548

4649
val errorsAndLibraries = classNames.map { name
4750
for {
4851
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")
52+
loadedObject guard(
53+
loadedClass.getField("MODULE$").get(null),
54+
s"$name must be defined as an object")
5055
loadedLibrary guard(loadedObject.asInstanceOf[Library], s"$name must extend Library")
5156
} yield loadedLibrary
5257
}
@@ -58,12 +63,12 @@ object Exercises {
5863
Either.catchNonFatal(f).leftMap(_ message)
5964

6065
def buildEvaluatorRequest(
61-
pkg: String,
62-
qualifiedMethod: String,
63-
rawArgs: List[String],
64-
imports: List[String] = Nil,
65-
resolvers: List[String],
66-
libraryDependencies: List[String]
66+
pkg: String,
67+
qualifiedMethod: String,
68+
rawArgs: List[String],
69+
imports: List[String] = Nil,
70+
resolvers: List[String],
71+
libraryDependencies: List[String]
6772
): (List[String], List[Dependency], String) = {
6873

6974
val extractEvaluatorResolvers: List[String] = {
@@ -79,7 +84,7 @@ object Exercises {
7984
}
8085
}
8186

82-
val pre = (s"import $pkg._" :: imports).mkString("; ")
87+
val pre = (s"import $pkg._" :: imports).mkString("; ")
8388
val code = s"""$qualifiedMethod(${rawArgs.mkString(", ")})"""
8489

8590
val allCode = s"{$pre; $code}"
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/*
2-
* scala-exercises-exercise-compiler
2+
* scala-exercises - runtime
33
* Copyright (C) 2015-2016 47 Degrees, LLC. <http://www.47deg.com>
44
*/
55

66
package org.scalaexercises.runtime
77

88
import java.text.SimpleDateFormat
9-
import java.util.{ Date, TimeZone }
9+
import java.util.{Date, TimeZone}
1010

1111
object Timestamp {
1212
val ISO8601 = "yyyy-MM-dd'T'HH:mm:ssz"
@@ -17,9 +17,8 @@ object Timestamp {
1717
setTimeZone(UTC)
1818
}
1919

20-
def fromDate(d: Date): String = {
20+
def fromDate(d: Date): String =
2121
FORMAT.format(d)
22-
}
2322

2423
def toDate(timestamp: String): Date = FORMAT.parse(timestamp)
2524
}
Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* scala-exercises-runtime
2+
* scala-exercises - runtime
33
* Copyright (C) 2015-2016 47 Degrees, LLC. <http://www.47deg.com>
44
*/
55

@@ -9,7 +9,7 @@ package model
99
// This is the exercise runtime metamodel
1010

1111
/** An exercise library.
12-
*/
12+
*/
1313
trait Library {
1414
def owner: String
1515
def repository: String
@@ -24,14 +24,14 @@ trait Library {
2424
}
2525

2626
/** Library Build Metadata Information
27-
*/
27+
*/
2828
trait BuildInfo {
2929
def resolvers: List[String]
3030
def libraryDependencies: List[String]
3131
}
3232

3333
/** A section in a library.
34-
*/
34+
*/
3535
trait Section {
3636
def name: String
3737
def description: Option[String]
@@ -42,7 +42,7 @@ trait Section {
4242
}
4343

4444
/** A contribution to a section.
45-
*/
45+
*/
4646
trait Contribution {
4747
def sha: String
4848
def message: String
@@ -54,7 +54,7 @@ trait Contribution {
5454
}
5555

5656
/** Exercises within a section.
57-
*/
57+
*/
5858
trait Exercise {
5959
def name: String
6060
def description: Option[String]
@@ -67,48 +67,47 @@ trait Exercise {
6767

6868
// default case class implementations
6969
case class DefaultLibrary(
70-
owner: String,
71-
repository: String,
72-
name: String,
73-
description: String,
74-
color: Option[String],
75-
logoPath: String,
76-
logoData: Option[String],
77-
sections: List[Section] = Nil,
78-
timestamp: String,
79-
buildMetaInfo: BuildInfo
70+
owner: String,
71+
repository: String,
72+
name: String,
73+
description: String,
74+
color: Option[String],
75+
logoPath: String,
76+
logoData: Option[String],
77+
sections: List[Section] = Nil,
78+
timestamp: String,
79+
buildMetaInfo: BuildInfo
8080
) extends Library
8181

8282
case class DefaultContribution(
83-
sha: String,
84-
message: String,
85-
timestamp: String,
86-
url: String,
87-
author: String,
88-
authorUrl: String,
89-
avatarUrl: String
83+
sha: String,
84+
message: String,
85+
timestamp: String,
86+
url: String,
87+
author: String,
88+
authorUrl: String,
89+
avatarUrl: String
9090
) extends Contribution
9191

9292
case class DefaultSection(
93-
name: String,
94-
description: Option[String],
95-
exercises: List[Exercise] = Nil,
96-
imports: List[String] = Nil,
97-
path: Option[String] = None,
98-
contributions: List[DefaultContribution] = Nil
93+
name: String,
94+
description: Option[String],
95+
exercises: List[Exercise] = Nil,
96+
imports: List[String] = Nil,
97+
path: Option[String] = None,
98+
contributions: List[DefaultContribution] = Nil
9999
) extends Section
100100

101101
case class DefaultExercise(
102-
name: String,
103-
description: Option[String] = None,
104-
code: String,
105-
qualifiedMethod: String,
106-
imports: List[String],
107-
explanation: Option[String] = None,
108-
packageName: String
102+
name: String,
103+
description: Option[String] = None,
104+
code: String,
105+
qualifiedMethod: String,
106+
imports: List[String],
107+
explanation: Option[String] = None,
108+
packageName: String
109109
) extends Exercise
110110
/*
111111
* scala-exercises-runtime
112112
* Copyright (C) 2015-2016 47 Degrees, LLC. <http://www.47deg.com>
113113
*/
114-
Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,60 @@
1+
/*
2+
* scala-exercises - runtime
3+
* Copyright (C) 2015-2016 47 Degrees, LLC. <http://www.47deg.com>
4+
*/
5+
16
package org.scalaexercises.content
27

38
import org.scalaexercises.runtime.model.Library
49

510
object LibraryA extends Library {
6-
override def owner = ???
7-
override def repository = ???
8-
override def color = ???
9-
override def logoPath = ???
10-
override def logoData = ???
11-
override def description = ???
12-
override def name = ???
13-
override def sections = ???
14-
override def timestamp = ???
11+
override def owner = ???
12+
override def repository = ???
13+
override def color = ???
14+
override def logoPath = ???
15+
override def logoData = ???
16+
override def description = ???
17+
override def name = ???
18+
override def sections = ???
19+
override def timestamp = ???
1520
override def buildMetaInfo = ???
1621
}
1722

1823
object LibraryB extends Library {
19-
override def owner = ???
20-
override def repository = ???
21-
override def color = ???
22-
override def logoPath = ???
23-
override def logoData = ???
24-
override def description = ???
25-
override def name = ???
26-
override def sections = ???
27-
override def timestamp = ???
24+
override def owner = ???
25+
override def repository = ???
26+
override def color = ???
27+
override def logoPath = ???
28+
override def logoData = ???
29+
override def description = ???
30+
override def name = ???
31+
override def sections = ???
32+
override def timestamp = ???
2833
override def buildMetaInfo = ???
2934
}
3035

3136
object LibraryC extends Library {
32-
override def owner = ???
33-
override def repository = ???
34-
override def color = ???
35-
override def logoPath = ???
36-
override def logoData = ???
37-
override def description = ???
38-
override def name = ???
39-
override def sections = ???
40-
override def timestamp = ???
37+
override def owner = ???
38+
override def repository = ???
39+
override def color = ???
40+
override def logoPath = ???
41+
override def logoData = ???
42+
override def description = ???
43+
override def name = ???
44+
override def sections = ???
45+
override def timestamp = ???
4146
override def buildMetaInfo = ???
4247
}
4348

4449
class ErrorLibrary extends Library {
45-
override def owner = ???
46-
override def repository = ???
47-
override def color = ???
48-
override def logoPath = ???
49-
override def logoData = ???
50-
override def description = ???
51-
override def name = ???
52-
override def sections = ???
53-
override def timestamp = ???
50+
override def owner = ???
51+
override def repository = ???
52+
override def color = ???
53+
override def logoPath = ???
54+
override def logoData = ???
55+
override def description = ???
56+
override def name = ???
57+
override def sections = ???
58+
override def timestamp = ???
5459
override def buildMetaInfo = ???
5560
}

src/test/scala/com/fortysevendeg/exercises/ExampleTarget.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1+
/*
2+
* scala-exercises - runtime
3+
* Copyright (C) 2015-2016 47 Degrees, LLC. <http://www.47deg.com>
4+
*/
5+
16
package org.scalaexercises.runtime
27

38
import org.scalatest._
49

510
object ExampleTarget extends FlatSpec with Matchers {
6-
def intStringMethod(a: Int, b: String): String = {
11+
def intStringMethod(a: Int, b: String): String =
712
s"$a$b"
8-
}
913

10-
def isOne(a: Int) = {
14+
def isOne(a: Int) =
1115
a shouldBe 1
12-
}
1316

1417
class ExampleException extends Exception("this is an example exception")
1518

src/test/scala/com/fortysevendeg/exercises/LibraryDiscoverySpec.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* scala-exercises-runtime
2+
* scala-exercises - runtime
33
* Copyright (C) 2015-2016 47 Degrees, LLC. <http://www.47deg.com>
44
*/
55

@@ -20,7 +20,9 @@ class LibraryDiscoverySpec extends FunSpec with Matchers {
2020
val (errors, discovered) = Exercises.discoverLibraries()
2121

2222
discovered.toSet shouldEqual Set(
23-
LibraryA, LibraryB, LibraryC
23+
LibraryA,
24+
LibraryB,
25+
LibraryC
2426
)
2527
}
2628

0 commit comments

Comments
 (0)