From 0863a2af75583b976aee3171585685b2524d0874 Mon Sep 17 00:00:00 2001 From: adamw Date: Sat, 8 Jul 2017 21:27:52 +0200 Subject: Simple URI tests --- .../com/softwaremill/sttp/UriInterpolator.scala | 32 +++++++++++----------- .../main/scala/com/softwaremill/sttp/package.scala | 4 +++ 2 files changed, 20 insertions(+), 16 deletions(-) (limited to 'core/src') diff --git a/core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala b/core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala index abb2327..e329630 100644 --- a/core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala +++ b/core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala @@ -1,6 +1,8 @@ package com.softwaremill.sttp -// from https://gist.github.com/teigen/5865923 +import java.net.URI + +// based on https://gist.github.com/teigen/5865923 object UriInterpolator { private val unreserved = { @@ -9,24 +11,22 @@ object UriInterpolator { alphanum ++ mark } - implicit class UriContext(val sc:StringContext) extends AnyVal { - def uri(args:String*) = { - val strings = sc.parts.iterator - val expressions = args.iterator - val sb = new StringBuffer(strings.next()) + def interpolate(sc: StringContext, args: String*): URI = { + val strings = sc.parts.iterator + val expressions = args.iterator + val sb = new StringBuffer(strings.next()) - while(strings.hasNext){ - for(c <- expressions.next()){ - if(unreserved(c)) - sb.append(c) - else for(b <- c.toString.getBytes("UTF-8")){ - sb.append("%") - sb.append("%02X".format(b)) - } + while(strings.hasNext){ + for(c <- expressions.next()){ + if(unreserved(c)) + sb.append(c) + else for(b <- c.toString.getBytes("UTF-8")){ + sb.append("%") + sb.append("%02X".format(b)) } - sb.append(strings.next()) } - sb.toString + sb.append(strings.next()) } + new URI(sb.toString) } } diff --git a/core/src/main/scala/com/softwaremill/sttp/package.scala b/core/src/main/scala/com/softwaremill/sttp/package.scala index 52d06f0..3321aa7 100644 --- a/core/src/main/scala/com/softwaremill/sttp/package.scala +++ b/core/src/main/scala/com/softwaremill/sttp/package.scala @@ -178,4 +178,8 @@ package object sttp { private val MultipartFormDataContentType = "multipart/form-data" private def contentTypeWithEncoding(ct: String, enc: String) = s"$ct; charset=$enc" + + implicit class UriContext(val sc: StringContext) extends AnyVal { + def uri(args:String*): URI = UriInterpolator.interpolate(sc, args: _*) + } } -- cgit v1.2.3