Skip to content

Commit

Permalink
Update sbt. Update to Scala 2.11.1
Browse files Browse the repository at this point in the history
  • Loading branch information
ChristoRibeiro committed Jun 16, 2014
1 parent 2cbe604 commit d04a9f3
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 54 deletions.
18 changes: 4 additions & 14 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,22 +1,14 @@
name := "scravatar"

scalaVersion:="2.10.0"
scalaVersion:="2.11.1"

crossScalaVersions := Seq("2.9.1", "2.9.2", "2.10.0")
crossScalaVersions := Seq("2.9.1", "2.9.2", "2.10.0", "2.11.1")

organization := "com.andersen-gott"

version := "1.0.2"
version := "1.1.0"

libraryDependencies <++= (scalaVersion) { s =>
Seq(
"org.scalatest" % ("scalatest_" + s) % "1.8" % "test"
)
}

credentials += Credentials(Path.userHome / ".sbt" / "magott-credentials")

useGpg:=true
libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.0" % "test"

publishTo <<= (version) { version: String =>
if (version.trim.endsWith("SNAPSHOT"))
Expand All @@ -25,8 +17,6 @@ publishTo <<= (version) { version: String =>
Some("Sonatype Nexus Staging" at "https://oss.sonatype.org/service/local/staging/deploy/maven2")
}

seq(aetherPublishSettings: _*)

homepage := Some(new URL("http://github.com/magott/scravatar"))

startYear := Some(2012)
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=0.12.1
sbt.version=0.13.5
5 changes: 0 additions & 5 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,5 +0,0 @@
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0")

addSbtPlugin("com.jsuereth" % "xsbt-gpg-plugin" % "0.6")

addSbtPlugin("no.arktekk.sbt" % "aether-deploy" % "0.6")
69 changes: 36 additions & 33 deletions src/main/scala/Gravatar.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,38 +6,44 @@ import java.net.{URI, URL, URLEncoder}
* Immutable (thread safe) class used to generate Gravatar URLs
* @author Morten Andersen-Gott - code@andersen-gott.com
*/
case class Gravatar(private val emailAddress:String, ssl:Boolean, forceDefault:Boolean, defaultImage:Option[DefaultImage], rating:Option[Rating], size:Option[Int]) {
case class Gravatar(
private val emailAddress: String,
ssl: Boolean = false,
forceDefault: Boolean = false,
defaultImage: Option[DefaultImage] = None,
rating: Option[Rating] = None,
size: Option[Int] = None) {

if(! size.forall(isValidSize))
throw new IllegalArgumentException("Size must be positive and cannot exceed 2048")

val email = emailAddress.trim.toLowerCase
val emailHash = Md5.hash(email)

def ssl(ssl:Boolean):Gravatar = copy(ssl=ssl)
def default(default:DefaultImage):Gravatar = copy(defaultImage = Some(default))
def forceDefault(forceDefault:Boolean):Gravatar = copy(forceDefault = forceDefault)
def maxRatedAs(rating:Rating):Gravatar = copy(rating = Some(rating))
def size(size:Int):Gravatar = copy(size = Some(size))
def ssl(ssl: Boolean): Gravatar = copy(ssl=ssl)
def default(default: DefaultImage): Gravatar = copy(defaultImage = Some(default))
def forceDefault(forceDefault: Boolean): Gravatar = copy(forceDefault = forceDefault)
def maxRatedAs(rating: Rating): Gravatar = copy(rating = Some(rating))
def size(size: Int): Gravatar = copy(size = Some(size))

/**
* Builds the Gravatar url
* @return gravatar url as String
*/
def avatarUrl:String = {
initUriBuilder.segments("avatar",emailHash)
.queryParam("d",defaultImage.map(_.value))
def avatarUrl: String = {
initUriBuilder.segments("avatar", emailHash)
.queryParam("d", defaultImage.map(_.value))
.queryParam("r", rating.map(_.value))
.queryParam("s", size.map(_.toString))
.build.toString
.build().toString
}

def downloadImage:Array[Byte] = {
def downloadImage: Array[Byte] = {
val is = new URL(avatarUrl).openStream
Stream.continually(is.read).takeWhile(-1 !=).map(_.toByte).toArray
}

private def initUriBuilder:URIBuilder = {
private def initUriBuilder: URIBuilder = {
val gravatarBase = "www.gravatar.com"
val gravatarSslBase = "secure.gravatar.com"
val urlBuilder =
Expand All @@ -48,46 +54,43 @@ case class Gravatar(private val emailAddress:String, ssl:Boolean, forceDefault:B
else urlBuilder
}

private def isValidSize(size:Int) = size > 0 && size <= 2048
private def isValidSize(size: Int) = size > 0 && size <= 2048

}

object Gravatar{
def apply(email:String):Gravatar = Gravatar(email, false, false, None, None, None)
}

sealed abstract class DefaultImage(val value:String)
sealed abstract class DefaultImage(val value: String)
case object Monster extends DefaultImage("monsterid")
case object MysteryMan extends DefaultImage("mm")
case object IdentIcon extends DefaultImage("identicon")
case object Wavatar extends DefaultImage("wavatar")
case object Retro extends DefaultImage("retro")
case object FourOFour extends DefaultImage("404")
case class CustomImage(url:String) extends DefaultImage(URLEncoder.encode(URI.create(url).toString, "UTF-8"))
case class CustomImage(url: String) extends DefaultImage(URLEncoder.encode(URI.create(url).toString, "UTF-8"))

object DefaultImage{
def apply(value:String):DefaultImage = value match {
case Monster.value => Monster
def apply(value: String): DefaultImage = value match {
case Monster.value => Monster
case MysteryMan.value => MysteryMan
case IdentIcon.value => IdentIcon
case Wavatar.value => Wavatar
case Retro.value => Retro
case FourOFour.value => FourOFour
case x => CustomImage(x)
case IdentIcon.value => IdentIcon
case Wavatar.value => Wavatar
case Retro.value => Retro
case FourOFour.value => FourOFour
case x => CustomImage(x)
}
def unapply(di:DefaultImage) = Some(di.value)
}

sealed abstract class Rating(val value:String)
sealed abstract class Rating(val value: String)
case object G extends Rating("g")
case object PG extends Rating("pg")
case object R extends Rating("r")
case object X extends Rating("x")

object Rating{
def apply(value:String):Rating = value match{
case G.value => G
def apply(value: String): Rating = value match{
case G.value => G
case PG.value => PG
case R.value => R
case X.value => X
case x => throw new IllegalArgumentException(x + " is not a valid rating")
case R.value => R
case X.value => X
case x => throw new IllegalArgumentException(x + " is not a valid rating")
}
}
2 changes: 1 addition & 1 deletion src/main/scala/Md5.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ private object Md5 {

val hexDigits = "0123456789abcdef".toCharArray

@Override def asString(bytes:Array[Byte]) = {
def asString(bytes:Array[Byte]) = {
bytes.foldLeft(""){case (agg, b) => agg + hexDigits((b >> 4) & 0xf) + hexDigits(b & 0xf)}
}

Expand Down

0 comments on commit d04a9f3

Please sign in to comment.