Skip to content

Commit 77d6a7c

Browse files
committed
reorganized code
1 parent 8dbb963 commit 77d6a7c

18 files changed

+87
-98
lines changed

src/main/scala/json2caseclass/CaseClassGenerator.scala

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ package json2caseclass
33
import java.util.UUID
44

55
import cats.implicits._
6-
import json2caseclass.CaseClassNameGenerator._
7-
import json2caseclass.SchemaExtractorOptions.RootTypeName
6+
import json2caseclass.implementation.CaseClassNameGenerator._
7+
import json2caseclass.implementation._
88
import json2caseclass.model.CaseClass.{ClassFieldName, ClassName}
9-
import json2caseclass.model._
9+
import json2caseclass.model.{?, CaseClassGenerationFailure, Config, Environment}
1010
import json2caseclass.model.Types._
1111

1212
object CaseClassGenerator {
1313

14-
def generate(conf: Config)
15-
(
14+
def generate(conf: Config)(
1615
jsonString: JsonString,
1716
rootTypeName: RootTypeName,
1817
optionals: Seq[(ClassName, ClassFieldName)] = Nil): Either[CaseClassGenerationFailure, CaseClassSource] = {
@@ -21,16 +20,14 @@ object CaseClassGenerator {
2120
jsValue <- ? <~ JsonParser.parse(jsonString)
2221
schema <- SchemaExtractor.extractSchemaFromJsonRoot(rootTypeName, jsValue)
2322
caseClasses <- ? <~ SchemaToCaseClassConverter.convert(schema)
24-
renamed = CaseClassOperations.rename(makeUnique, caseClasses)
23+
renamed = CaseClassOperations.renameAmbiguous(makeUnique, caseClasses)
2524
withOptionals = CaseClassOperations.addOptionals(renamed, optionals)
26-
} yield conf.interpreter(withOptionals)
25+
caseClassSource = conf.interpreter(withOptionals)
26+
} yield caseClassSource
2727

2828
val env = Environment(
29-
jsValueFilter = conf.jsValueFilter,
30-
nameGenerator = SchemaNameGenerator(
31-
SchemaNameGeneratorImpl.generateCaseClassName(conf.suffix),
32-
SchemaNameGeneratorImpl.generateFieldName
33-
)
29+
conf.jsValueFilter,
30+
NameTransformer(conf.suffix)
3431
)
3532

3633
generate.runA(env, UUID.fromString("e61fef28-b115-11e7-abc4-cec278b6b50a"))

src/main/scala/json2caseclass/SchemaExtractorOptions.scala

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/main/scala/json2caseclass/CaseClassNameGenerator.scala renamed to src/main/scala/json2caseclass/implementation/CaseClassNameGenerator.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package json2caseclass
1+
package json2caseclass.implementation
22

33
import json2caseclass.model.CaseClass._
44

src/main/scala/json2caseclass/CaseClassOperations.scala renamed to src/main/scala/json2caseclass/implementation/CaseClassOperations.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package json2caseclass
1+
package json2caseclass.implementation
22

33
import java.util.UUID
44

@@ -7,7 +7,7 @@ import json2caseclass.model.ScalaType._
77
import json2caseclass.model.{CaseClass, ScalaObject, ScalaOption, ScalaType}
88

99
object CaseClassOperations {
10-
def rename(makeUnique: (Set[String], ClassName) => Option[ClassName], caseClasses: Seq[CaseClass]): Seq[CaseClass] = {
10+
def renameAmbiguous(makeUnique: (Set[String], ClassName) => Option[ClassName], caseClasses: Seq[CaseClass]): Seq[CaseClass] = {
1111
val alternativeNames = findAlternativeNames(makeUnique, caseClasses)
1212
rename(caseClasses, alternativeNames)
1313
}

src/main/scala/json2caseclass/CaseClassToStringInterpreter.scala renamed to src/main/scala/json2caseclass/implementation/CaseClassToStringInterpreter.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
package json2caseclass
1+
package json2caseclass.implementation
22

3-
import json2caseclass.model.Types.Interpreter
3+
import json2caseclass.model.Types.{Interpreter, _}
44
import json2caseclass.model._
5-
import json2caseclass.model.Types._
65

76
object CaseClassToStringInterpreter {
87

src/main/scala/json2caseclass/JsonParser.scala renamed to src/main/scala/json2caseclass/implementation/JsonParser.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package json2caseclass
1+
package json2caseclass.implementation
22

33
import json2caseclass.model.Types.JsonString
44
import json2caseclass.model.{CaseClassGenerationFailure, JsonParseFailure}

src/main/scala/json2caseclass/SchemaNameGeneratorImpl.scala renamed to src/main/scala/json2caseclass/implementation/NameTransformer.scala

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1-
package json2caseclass
1+
package json2caseclass.implementation
22

3+
import json2caseclass.model
34
import json2caseclass.model.Schema._
45
import json2caseclass.model.Types.Suffix
56

6-
object SchemaNameGeneratorImpl {
7+
object NameTransformer {
8+
def apply(suffix: Suffix): model.NameTransformer = model.NameTransformer(
9+
NameTransformer.generateCaseClassName(suffix),
10+
NameTransformer.generateFieldName
11+
)
712

813
def generateCaseClassName(suffix: Suffix)(objectName: String): SchemaObjectName = {
914
if (reservedWords.contains(objectName.toLowerCase) || scalaTypes.map(_.toLowerCase).contains(objectName.toLowerCase)) {

src/main/scala/json2caseclass/SchemaExtractor.scala renamed to src/main/scala/json2caseclass/implementation/SchemaExtractor.scala

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
package json2caseclass
1+
package json2caseclass.implementation
22

33
import java.util.UUID
44

55
import cats.data.ReaderWriterStateT._
66
import cats.implicits._
7-
import json2caseclass.SchemaExtractorOptions.RootTypeName
87
import json2caseclass.model.Schema._
8+
import json2caseclass.model.Types.{ErrorOr, ErrorRWSOr, JsValueFilter, RootTypeName}
99
import json2caseclass.model._
10-
import json2caseclass.model.Types.{ErrorOr, ErrorRWSOr}
1110
import play.api.libs.json._
1211

1312
object SchemaExtractor {
@@ -33,8 +32,8 @@ object SchemaExtractor {
3332
_ <- modify[ErrorOr, Environment, Unit, UUID](uuid => UUID.nameUUIDFromBytes(uuid.toString.getBytes))
3433
} yield SchemaObject(
3534
id.toSchemaObjectId,
36-
env.nameGenerator.genClassName(name),
37-
fieldSchemas.map { case (n, v) => (env.nameGenerator.genFieldName(n), v) }
35+
env.nameTransformer.transformClassName(name),
36+
fieldSchemas.map { case (n, v) => (env.nameTransformer.transformFieldName(n), v) }
3837
)
3938
}
4039

@@ -75,7 +74,7 @@ object SchemaExtractor {
7574
Right(SchemaArray(first))
7675
} else if (schemas forall isObject) {
7776
val schema = SchemaObject(
78-
UUID.randomUUID().toSchemaObjectId, env.nameGenerator.genClassName(name),
77+
UUID.randomUUID().toSchemaObjectId, env.nameTransformer.transformClassName(name),
7978
unify(schemas))
8079
Right(SchemaArray(schema))
8180
} else {
@@ -107,4 +106,25 @@ object SchemaExtractor {
107106
val combinedFields = required ++ optionals.map { case (n, s) => (n, SchemaOption(s)) }
108107
combinedFields.asInstanceOf[List[(SchemaFieldName, Schema)]]
109108
}
109+
110+
val allJsValues: JsValueFilter = _ => true
111+
112+
val exceptEmptyArrays: JsValueFilter => JsValueFilter = {
113+
include => {
114+
case JsArray(values) if values.isEmpty => false
115+
case jsValue => include(jsValue)
116+
}
117+
}
118+
119+
val exceptNullValues: JsValueFilter => JsValueFilter = {
120+
include => {
121+
case JsNull => false
122+
case jsValue => include(jsValue)
123+
}
124+
}
125+
126+
implicit class IncludeOptions(include: JsValueFilter) {
127+
def exceptEmptyArrays = SchemaExtractor.exceptEmptyArrays(include)
128+
def exceptNullValues = SchemaExtractor.exceptNullValues(include)
129+
}
110130
}

src/main/scala/json2caseclass/SchemaToCaseClassConverter.scala renamed to src/main/scala/json2caseclass/implementation/SchemaToCaseClassConverter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package json2caseclass
1+
package json2caseclass.implementation
22

33
import cats.implicits._
44
import json2caseclass.model.CaseClass._

src/main/scala/json2caseclass/model/?.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ import cats.implicits._
77
import json2caseclass.model.Types.{ErrorOr, ErrorRWSOr}
88

99
object ? {
10-
def <~[A](x: A): ErrorRWSOr[A] = x.pure[ErrorRWSOr]
11-
12-
def <~[A](
13-
x: Either[CaseClassGenerationFailure, A]): ErrorRWSOr[A] = ReaderWriterStateT.lift[ErrorOr, Environment, Unit, UUID, A](
14-
x)
10+
def <~[A](x: Either[CaseClassGenerationFailure, A]): ErrorRWSOr[A] =
11+
ReaderWriterStateT.lift[ErrorOr, Environment, Unit, UUID, A](x)
1512
}

0 commit comments

Comments
 (0)