Skip to content

Commit

Permalink
Merge a495dac into 0e19f28
Browse files Browse the repository at this point in the history
  • Loading branch information
yaroot committed Oct 28, 2019
2 parents 0e19f28 + a495dac commit 1cca95b
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 2 deletions.
21 changes: 19 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ lazy val integrationProjectRefs = Seq(
enumeratumQuillJs,
enumeratumQuillJvm,
enumeratumDoobie,
enumeratumDoobiePg,
enumeratumSlick,
enumeratumCatsJs,
enumeratumCatsJvm
Expand Down Expand Up @@ -431,12 +432,28 @@ lazy val enumeratumDoobie =
version := "1.5.16-SNAPSHOT",
libraryDependencies ++= {
Seq(
"com.beachape" %%% "enumeratum" % Versions.Core.stable,
"org.tpolecat" %% "doobie-core" % doobieVersion
"com.beachape" %%% "enumeratum" % Versions.Core.stable,
"org.tpolecat" %% "doobie-core" % doobieVersion
)
}
)

lazy val enumeratumDoobiePg =
Project(id = "enumeratum-doobie-postgres", base = file("enumeratum-doobie-postgres"))
.settings(commonWithPublishSettings: _*)
.settings(testSettings: _*)
.settings(
crossScalaVersions := scalaVersionsAbove_2_11,
version := "1.5.16-SNAPSHOT",
libraryDependencies ++= {
Seq(
"com.beachape" %%% "enumeratum" % Versions.Core.stable,
"org.tpolecat" %% "doobie-postgres" % doobieVersion,
)
}
)


lazy val enumeratumSlick =
Project(id = "enumeratum-slick", base = file("enumeratum-slick"))
.settings(commonWithPublishSettings: _*)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package enumeratum.postgres

import doobie._
import doobie.postgres.implicits.pgEnumStringOpt
import enumeratum._

import scala.reflect.runtime.universe.TypeTag

object DoobiePgEnum {

/**
* {{{
* trait Foo extends EnumEntry
* object Foo extends Enum[Foo] {
* case object Bar extends Foo
*
* val values = findValues
* implicit val doobieMeta: Meta[Foo] = DoobiePgEnum.meta("foo", Foo)
* }
* }}}
* @param name type in postgres
* @return Meta[A] for the given enum
*/
def meta[A <: EnumEntry: TypeTag](name: String, enum: Enum[A]): Meta[A] = {
pgEnumStringOpt(name, enum.withNameOption, _.entryName)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package enumeratum.postgres.values

import doobie._
import doobie.postgres.implicits.pgEnumStringOpt
import enumeratum.values.{StringEnumEntry, ValueEnum}

import scala.reflect.runtime.universe.TypeTag

object DoobiePgValueEnum {
def meta[A <: StringEnumEntry: TypeTag](name: String, enum: ValueEnum[String, A]): Meta[A] = {
pgEnumStringOpt(name, enum.withValueOpt, _.value)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package enumeratum.posrgres

import enumeratum._
import org.scalatest.{FunSpec, Matchers}
import doobie.{Read, Write, Meta}
import enumeratum.postgres.DoobiePgEnum

import scala.collection.immutable

class DoobiePgEnumSpec extends FunSpec with Matchers {
describe("A DoobieEnum") {

it("should have a Write") {
Write[DoobieShirt]
}

it("should have a Read") {
Read[DoobieShirt]
}

}
}

sealed trait DoobieShirtSize extends EnumEntry
case object DoobieShirtSize extends Enum[DoobieShirtSize] {
case object Small extends DoobieShirtSize
case object Medium extends DoobieShirtSize
case object Large extends DoobieShirtSize

override val values: immutable.IndexedSeq[DoobieShirtSize] = findValues
implicit val doobieMeta: Meta[DoobieShirtSize] = DoobiePgEnum.meta("shirt_size", DoobieShirtSize)
}

case class DoobieShirt(size: DoobieShirtSize)
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package enumeratum.posrgres.values

import org.scalatest.{FunSpec, Matchers}
import doobie.{Meta, Read, Write}
import enumeratum.postgres.values.DoobiePgValueEnum
import enumeratum.values.{StringEnum, StringEnumEntry}

import scala.collection.immutable

class DoobiePgValueEnumSpec extends FunSpec with Matchers {
describe("A StringDoobieEnum") {

it("should have a Write") {
Write[DoobieComputer]
}

it("should have a Read") {
Read[DoobieComputer]
}

}
}

sealed abstract class DoobieOperatingSystem(val value: String) extends StringEnumEntry
case object DoobieOperatingSystem extends StringEnum[DoobieOperatingSystem] {

case object Linux extends DoobieOperatingSystem("linux")
case object OSX extends DoobieOperatingSystem("osx")
case object Windows extends DoobieOperatingSystem("windows")
case object Android extends DoobieOperatingSystem("android")

override val values: immutable.IndexedSeq[DoobieOperatingSystem] = findValues
implicit val doobieMeta: Meta[DoobieOperatingSystem] =
DoobiePgValueEnum.meta("operating_system", DoobieOperatingSystem)
}

case class DoobieComputer(operatingSystem: DoobieOperatingSystem)

0 comments on commit 1cca95b

Please sign in to comment.